home *** CD-ROM | disk | FTP | other *** search
/ OpenStep (Enterprise) / OpenStepENTCD.toast / OEDEV / GNUSRC.Z / function.h < prev    next >
C/C++ Source or Header  |  1996-03-13  |  6KB  |  237 lines

  1. /* Structure for saving state for a nested function.
  2.    Copyright (C) 1989, 1992, 1993, 1994, 1995 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, 59 Temple Place - Suite 330,
  19. Boston, MA 02111-1307, USA.  */
  20.  
  21.  
  22. #ifndef NULL_TREE
  23. #define tree int *
  24. #endif
  25. #ifndef GET_CODE
  26. #define rtx int *
  27. #endif
  28.  
  29. struct var_refs_queue
  30. {
  31.   rtx modified;
  32.   enum machine_mode promoted_mode;
  33.   int unsignedp;
  34.   struct var_refs_queue *next;
  35. };
  36.  
  37. /* Stack of pending (incomplete) sequences saved by `start_sequence'.
  38.    Each element describes one pending sequence.
  39.    The main insn-chain is saved in the last element of the chain,
  40.    unless the chain is empty.  */
  41.  
  42. struct sequence_stack
  43. {
  44.   /* First and last insns in the chain of the saved sequence.  */
  45.   rtx first, last;
  46.   tree sequence_rtl_expr;
  47.   struct sequence_stack *next;
  48. };
  49.  
  50. extern struct sequence_stack *sequence_stack;
  51.  
  52. /* Stack of single obstacks.  */
  53.  
  54. struct simple_obstack_stack
  55. {
  56.   struct obstack *obstack;
  57.   struct simple_obstack_stack *next;
  58. };
  59.  
  60. /* This structure can save all the important global and static variables
  61.    describing the status of the current function.  */
  62.  
  63. struct function
  64. {
  65.   struct function *next;
  66.  
  67.   /* For function.c.  */
  68.   char *name;
  69.   tree decl;
  70.   int pops_args;
  71.   int returns_struct;
  72.   int returns_pcc_struct;
  73.   int needs_context;
  74.   int calls_setjmp;
  75.   int calls_longjmp;
  76.   int calls_alloca;
  77.   int has_nonlocal_label;
  78.   int has_nonlocal_goto;
  79.   int contains_functions;
  80.   rtx nonlocal_goto_handler_slot;
  81.   rtx nonlocal_goto_stack_level;
  82.   tree nonlocal_labels;
  83.   int args_size;
  84.   int pretend_args_size;
  85.   rtx arg_offset_rtx;
  86.   int varargs;
  87.   int stdarg;
  88.   int max_parm_reg;
  89.   rtx *parm_reg_stack_loc;
  90.   int outgoing_args_size;
  91.   rtx return_rtx;
  92.   rtx cleanup_label;
  93.   rtx return_label;
  94.   rtx save_expr_regs;
  95.   rtx stack_slot_list;
  96.   rtx parm_birth_insn;
  97.   int frame_offset;
  98.   rtx tail_recursion_label;
  99.   rtx tail_recursion_reentry;
  100.   rtx internal_arg_pointer;
  101.   rtx arg_pointer_save_area;
  102.   tree rtl_expr_chain;
  103.   rtx last_parm_insn;
  104.   tree context_display;
  105.   tree trampoline_list;
  106.   int function_call_count;
  107.   struct temp_slot *temp_slots;
  108.   int temp_slot_level;
  109.   /* This slot is initialized as 0 and is added to
  110.      during the nested function.  */
  111.   struct var_refs_queue *fixup_var_refs_queue;
  112.  
  113.   /* For stmt.c  */
  114.   struct nesting *block_stack;
  115.   struct nesting *stack_block_stack;
  116.   struct nesting *cond_stack;
  117.   struct nesting *loop_stack;
  118.   struct nesting *case_stack;
  119.   struct nesting *nesting_stack;
  120.   int nesting_depth;
  121.   int block_start_count;
  122.   tree last_expr_type;
  123.   rtx last_expr_value;
  124.   int expr_stmts_for_value;
  125.   char *emit_filename;
  126.   int emit_lineno;
  127.   struct goto_fixup *goto_fixup_chain;
  128.  
  129.   /* For expr.c.  */
  130.   int pending_stack_adjust;
  131.   int inhibit_defer_pop;
  132.   tree cleanups_this_call;
  133.   rtx saveregs_value;
  134.   rtx apply_args_value;
  135.   rtx forced_labels;
  136.  
  137.   /* For emit-rtl.c.  */
  138.   int reg_rtx_no;
  139.   int first_label_num;
  140.   rtx first_insn;
  141.   rtx last_insn;
  142.   tree sequence_rtl_expr;
  143.   struct sequence_stack *sequence_stack;
  144.   int cur_insn_uid;
  145.   int last_linenum;
  146.   char *last_filename;
  147.   char *regno_pointer_flag;
  148.   int regno_pointer_flag_length;
  149.   rtx *regno_reg_rtx;
  150.  
  151.   /* For stor-layout.c.  */
  152.   tree permanent_type_chain;
  153.   tree temporary_type_chain;
  154.   tree permanent_type_end;
  155.   tree temporary_type_end;
  156.   tree pending_sizes;
  157.   int immediate_size_expand;
  158.  
  159.   /* For tree.c.  */
  160.   int all_types_permanent;
  161.   struct momentary_level *momentary_stack;
  162.   char *maybepermanent_firstobj;
  163.   char *temporary_firstobj;
  164.   char *momentary_firstobj;
  165.   char *momentary_function_firstobj;
  166.   struct obstack *current_obstack;
  167.   struct obstack *function_obstack;
  168.   struct obstack *function_maybepermanent_obstack;
  169.   struct obstack *expression_obstack;
  170.   struct obstack *saveable_obstack;
  171.   struct obstack *rtl_obstack;
  172.   struct simple_obstack_stack *inline_obstacks;
  173.  
  174.   /* For integrate.c.  */
  175.   int uses_const_pool;
  176.  
  177.   /* For md files.  */
  178.   int uses_pic_offset_table;
  179.   /* tm.h can use this to store whatever it likes.  */
  180.   struct machine_function *machine;
  181.  
  182.   /* For reorg.  */
  183.   rtx epilogue_delay_list;
  184.  
  185.   /* For varasm.  */
  186.   struct constant_descriptor **const_rtx_hash_table;
  187.   struct pool_sym **const_rtx_sym_hash_table;
  188.   struct pool_constant *first_pool, *last_pool;
  189.   int pool_offset;
  190. };
  191.  
  192. /* For objc-act.c, so hack_method_prototype can initialize temp_slots
  193.    without calling init_function_start.  */
  194. struct temp_slot *temp_slots;
  195.  
  196. /* The FUNCTION_DECL for an inline function currently being expanded.  */
  197. extern tree inline_function_decl;
  198.  
  199. /* Label that will go on function epilogue.
  200.    Jumping to this label serves as a "return" instruction
  201.    on machines which require execution of the epilogue on all returns.  */
  202. extern rtx return_label;
  203.  
  204. /* List (chain of EXPR_LISTs) of all stack slots in this function.
  205.    Made for the sake of unshare_all_rtl.  */
  206. extern rtx stack_slot_list;
  207.  
  208. /* Given a function decl for a containing function,
  209.    return the `struct function' for it.  */
  210. struct function *find_function_data PROTO((tree));
  211.  
  212. /* Pointer to chain of `struct function' for containing functions.  */
  213. extern struct function *outer_function_chain;
  214.  
  215. /* Put all this function's BLOCK nodes into a vector and return it.
  216.    Also store in each NOTE for the beginning or end of a block
  217.    the index of that block in the vector.  */
  218. extern tree *identify_blocks PROTO((tree, rtx));
  219.  
  220. /* These variables hold pointers to functions to
  221.    save and restore machine-specific data,
  222.    in push_function_context and pop_function_context.  */
  223. extern void (*save_machine_status) ();
  224. extern void (*restore_machine_status) ();
  225.  
  226. /* Save and restore varasm.c status for a nested function.  */
  227. extern void save_varasm_status        PROTO((struct function *));
  228. extern void restore_varasm_status    PROTO((struct function *));
  229.  
  230. #ifdef rtx
  231. #undef rtx
  232. #endif
  233.  
  234. #ifdef tree
  235. #undef tree
  236. #endif
  237.