cp-freeze-thaw.h   [plain text]


/* APPLE LOCAL PFE */
/* Freeze/thaw C++-specific trees and other data.
   Copyright (C) 2001  Free Software Foundation, Inc.
   Contributed by Apple Computer Inc.

This file is part of GNU CC.

GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.

GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING.  If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  */

#ifndef GCC_PFE_CP_HEADER_H
#define GCC_PFE_CP_HEADER_H

#ifdef PFE

#include "tree.h"
#include "c-common.h"
#include "varray.h"

#include "cp/cp-tree.h"
#include "cp/lex.h"

struct pfe_lang_compiler_state {
  /* global trees from cp/decl.h.  */
  tree cp_global_trees[CPTI_MAX]; 

  /* global name space from cp/decl2.c.  */
  tree global_namespace;

  /* globals from cp/decl2.c.  */
  varray_type deferred_fns;
  varray_type pending_statics;

  /* globals from cp/decl2.c.  */
  tree static_ctors;
  tree static_dtors; 
  int flag_apple_kext;

  /* globals from cp/class.c.  */
  varray_type local_classes;  /* Needed ? */

  /* static globals from cp/decl.c.  */
  tree global_type_node;
  int only_namespace_names;
  int pfe_anon_cnt;

  /* globals from cp/decl.c.  
     integer_zero_node and integer_one_node are part of global_trees array.  */
  tree integer_two_node;
  tree integer_three_node;
  int function_depth;
  struct saved_scope *scope_chain;
  
  /* static globals from cp/pt.c.  */
  tree pending_templates;
  tree last_pending_template;
  int template_header_count;
  tree saved_trees;
  varray_type inline_parm_levels;
  size_t inline_parm_levels_used;
  tree current_tinst_level;

  /* globals from cp/pt.c.  */
  int processing_template_parmlist;
  
  /* globals from cp/lex.c.  */
  operator_name_info_t operator_name_info[(int) LAST_CPLUS_TREE_CODE];
  operator_name_info_t assignment_operator_name_info[(int) LAST_CPLUS_TREE_CODE];
};

/* Freeze/thaw the struct pfe_lang_compiler_state.  */
void cp_lang_freeze_thaw_compiler_state   PARAMS ((struct pfe_lang_compiler_state **));

/* In cp/decl2.c */
extern void pfe_freeze_thaw_decl2_globals PARAMS ((struct pfe_lang_compiler_state *));

/* In cp/decl.c */
extern void pfe_freeze_thaw_decl_globals PARAMS ((struct pfe_lang_compiler_state *));
extern int pfe_get_anon_cnt 		 PARAMS ((void));
extern void pfe_set_anon_cnt 		 PARAMS ((int));

/* In cp/pt.c */
extern void pfe_freeze_thaw_pt_globals 	 PARAMS (( struct pfe_lang_compiler_state *));

/* For scope_chain global from cp/decl.c. saved_scope is in cp/cp-tree.h.  */
extern void pfe_freeze_thaw_saved_scope  PARAMS ((struct saved_scope **pp));

extern void pfe_freeze_thaw_operator_name_info PARAMS ((struct operator_name_info_t *p));

/* Language hooks (in cp-freeze-thaw.c).  */
extern void cxx_pfe_lang_init	           PARAMS ((int));
extern void cxx_freeze_thaw_compiler_state PARAMS ((struct pfe_lang_compiler_state **));
extern int cxx_pfe_freeze_thaw_decl        PARAMS ((union tree_node *));
extern int cxx_pfe_freeze_thaw_type        PARAMS ((union tree_node *));
extern int cxx_pfe_freeze_thaw_special     PARAMS ((union tree_node *));
extern void cxx_pfe_check_all_struct_sizes PARAMS ((void));
extern void cxx_pfe_check_settings         PARAMS ((struct pfe_lang_compiler_state *));

#endif /* PFE */ 
#endif /* ! GCC_PFE_CP_HEADER_H */