java-except.h 2.51 KB
Newer Older
Anthony Green committed
1 2
/* Definitions for exception handling for use by the GNU compiler
   for the Java(TM) language compiler.
Jeff Law committed
3
   Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
Anthony Green committed
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

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.  

Java and all Java-based marks are trademarks or registered trademarks
of Sun Microsystems, Inc. in the United States and other countries.
The Free Software Foundation is independent of Sun Microsystems, Inc.  */

struct eh_range
  {
    /* The (byte-code PC) range of the handled block. */
    int start_pc;
    int end_pc;

    /* A list of handlers.  For each element in the list,
       the TREE_PURPOSE is the handled class (NULL_EXPR for a finally block),
       and the TREE_VALUE is the LABEL_DECL of the handler. */
    tree handlers;

    /* Surrunding handler, if any. */
    struct eh_range *outer;

    /* The first child range.  It is is nested inside this range
       (i.e. this.start_pc <= first_child.end_pc
       && this.end_pc >= first_child.end_pc).
       The children are linked together using next_sibling, and are sorted
       by increasing start_pc and end_pc (we do not support non-nested
       overlapping ranges). */
    struct eh_range *first_child;

    /* The next child of outer, in address order. */
    struct eh_range *next_sibling;
50 51 52

    /* True if this range has already been expanded. */
    int expanded;
Anthony Green committed
53 54 55 56 57 58 59
  };

/* A dummy range that represents the entire method. */
extern struct eh_range whole_range;

#define NULL_EH_RANGE (&whole_range)

60
extern struct eh_range * find_handler PARAMS ((int));
Anthony Green committed
61

62
extern void method_init_exceptions PARAMS ((void));
Anthony Green committed
63

64
extern void emit_handlers PARAMS ((void));
Anthony Green committed
65

66
extern void maybe_start_try PARAMS ((int, int));
Kaveh R. Ghazi committed
67

68
extern void maybe_end_try PARAMS ((int, int));
Kaveh R. Ghazi committed
69

70
extern void add_handler PARAMS ((int, int, tree, tree));
71

72
extern void handle_nested_ranges PARAMS ((void));
Kaveh R. Ghazi committed
73

74
extern void expand_resume_after_catch PARAMS ((void));