|
|
1.1 ! root 1: /* Structure for saving state for a nested function. ! 2: Copyright (C) 1989 Free Software Foundation, Inc. ! 3: ! 4: This file is part of GNU CC. ! 5: ! 6: GNU CC is free software; you can redistribute it and/or modify ! 7: it under the terms of the GNU General Public License as published by ! 8: the Free Software Foundation; either version 2, or (at your option) ! 9: any later version. ! 10: ! 11: GNU CC is distributed in the hope that it will be useful, ! 12: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: GNU General Public License for more details. ! 15: ! 16: You should have received a copy of the GNU General Public License ! 17: along with GNU CC; see the file COPYING. If not, write to ! 18: the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ ! 19: ! 20: ! 21: #ifndef NULL_TREE ! 22: #define tree int * ! 23: #endif ! 24: #ifndef GET_CODE ! 25: #define rtx int * ! 26: #endif ! 27: ! 28: struct var_refs_queue ! 29: { ! 30: rtx modified; ! 31: rtx original; ! 32: struct var_refs_queue *next; ! 33: }; ! 34: ! 35: /* Stack of pending (incomplete) sequences saved by `start_sequence'. ! 36: Each element describes one pending sequence. ! 37: The main insn-chain is saved in the last element of the chain, ! 38: unless the chain is empty. */ ! 39: ! 40: struct sequence_stack ! 41: { ! 42: /* First and last insns in the chain of the saved sequence. */ ! 43: rtx first, last; ! 44: struct sequence_stack *next; ! 45: }; ! 46: ! 47: extern struct sequence_stack *sequence_stack; ! 48: ! 49: /* This structure can save all the important global and static variables ! 50: describing the status of the current function. */ ! 51: ! 52: struct function ! 53: { ! 54: struct function *next; ! 55: ! 56: /* For function.c. */ ! 57: char *name; ! 58: tree decl; ! 59: int pops_args; ! 60: int returns_struct; ! 61: int returns_pcc_struct; ! 62: int needs_context; ! 63: int calls_setjmp; ! 64: int calls_longjmp; ! 65: int calls_alloca; ! 66: int has_nonlocal_label; ! 67: rtx nonlocal_goto_handler_slot; ! 68: rtx nonlocal_goto_stack_level; ! 69: tree nonlocal_labels; ! 70: int args_size; ! 71: int pretend_args_size; ! 72: rtx arg_offset_rtx; ! 73: int max_parm_reg; ! 74: rtx *parm_reg_stack_loc; ! 75: int outgoing_args_size; ! 76: rtx return_rtx; ! 77: rtx cleanup_label; ! 78: rtx return_label; ! 79: rtx save_expr_regs; ! 80: rtx stack_slot_list; ! 81: rtx parm_birth_insn; ! 82: int frame_offset; ! 83: rtx tail_recursion_label; ! 84: rtx tail_recursion_reentry; ! 85: rtx internal_arg_pointer; ! 86: rtx arg_pointer_save_area; ! 87: tree rtl_expr_chain; ! 88: rtx last_parm_insn; ! 89: tree context_display; ! 90: tree trampoline_list; ! 91: int function_call_count; ! 92: struct temp_slot *temp_slots; ! 93: int temp_slot_level; ! 94: /* This slot is initialized as 0 and is added to ! 95: during the nested function. */ ! 96: struct var_refs_queue *fixup_var_refs_queue; ! 97: ! 98: /* For stmt.c */ ! 99: struct nesting *block_stack; ! 100: struct nesting *stack_block_stack; ! 101: struct nesting *cond_stack; ! 102: struct nesting *loop_stack; ! 103: struct nesting *case_stack; ! 104: struct nesting *nesting_stack; ! 105: int nesting_depth; ! 106: int block_start_count; ! 107: tree last_expr_type; ! 108: rtx last_expr_value; ! 109: int expr_stmts_for_value; ! 110: char *emit_filename; ! 111: int emit_lineno; ! 112: struct goto_fixup *goto_fixup_chain; ! 113: ! 114: /* For expr.c. */ ! 115: int pending_stack_adjust; ! 116: int inhibit_defer_pop; ! 117: tree cleanups_this_call; ! 118: rtx saveregs_value; ! 119: ! 120: /* For emit-rtl.c. */ ! 121: int reg_rtx_no; ! 122: int first_label_num; ! 123: rtx first_insn; ! 124: rtx last_insn; ! 125: struct sequence_stack *sequence_stack; ! 126: int cur_insn_uid; ! 127: int last_linenum; ! 128: char *last_filename; ! 129: char *regno_pointer_flag; ! 130: int regno_pointer_flag_length; ! 131: rtx *regno_reg_rtx; ! 132: ! 133: /* For stor-layout.c. */ ! 134: tree permanent_type_chain; ! 135: tree temporary_type_chain; ! 136: tree permanent_type_end; ! 137: tree temporary_type_end; ! 138: tree pending_sizes; ! 139: int immediate_size_expand; ! 140: ! 141: /* For tree.c. */ ! 142: int all_types_permanent; ! 143: struct momentary_level *momentary_stack; ! 144: char *maybepermanent_firstobj; ! 145: char *temporary_firstobj; ! 146: char *momentary_firstobj; ! 147: struct obstack *current_obstack; ! 148: struct obstack *function_obstack; ! 149: struct obstack *function_maybepermanent_obstack; ! 150: struct obstack *expression_obstack; ! 151: struct obstack *saveable_obstack; ! 152: struct obstack *rtl_obstack; ! 153: ! 154: /* For integrate.c. */ ! 155: int uses_const_pool; ! 156: ! 157: /* For md files. */ ! 158: int uses_pic_offset_table; ! 159: }; ! 160: ! 161: /* The FUNCTION_DECL for an inline function currently being expanded. */ ! 162: extern tree inline_function_decl; ! 163: ! 164: /* Label that will go on function epilogue. ! 165: Jumping to this label serves as a "return" instruction ! 166: on machines which require execution of the epilogue on all returns. */ ! 167: extern rtx return_label; ! 168: ! 169: /* List (chain of EXPR_LISTs) of all stack slots in this function. ! 170: Made for the sake of unshare_all_rtl. */ ! 171: extern rtx stack_slot_list; ! 172: ! 173: #ifdef rtx ! 174: #undef rtx ! 175: #endif ! 176: ! 177: #ifdef tree ! 178: #undef tree ! 179: #endif ! 180: ! 181: ! 182: /* Given a function decl for a containing function, ! 183: return the `struct function' for it. */ ! 184: struct function *find_function_data (); ! 185: ! 186: /* Pointer to chain of `struct function' for containing functions. */ ! 187: extern struct function *outer_function_chain;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.