1 /***
2  * ASM: a very small and fast Java bytecode manipulation framework
3  * Copyright (c) 2000-2007 INRIA, France Telecom
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. Neither the name of the copyright holders nor the names of its
15  *    contributors may be used to endorse or promote products derived from
16  *    this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28  * THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 package org.mockito.asm;
31 
32 /**
33  * An edge in the control flow graph of a method body. See {@link Label Label}.
34  *
35  * @author Eric Bruneton
36  */
37 class Edge {
38 
39     /**
40      * Denotes a normal control flow graph edge.
41      */
42     static final int NORMAL = 0;
43 
44     /**
45      * Denotes a control flow graph edge corresponding to an exception handler.
46      * More precisely any {@link Edge} whose {@link #info} is strictly positive
47      * corresponds to an exception handler. The actual value of {@link #info} is
48      * the index, in the {@link ClassWriter} type table, of the exception that
49      * is catched.
50      */
51     static final int EXCEPTION = 0x7FFFFFFF;
52 
53     /**
54      * Information about this control flow graph edge. If
55      * {@link ClassWriter#COMPUTE_MAXS} is used this field is the (relative)
56      * stack size in the basic block from which this edge originates. This size
57      * is equal to the stack size at the "jump" instruction to which this edge
58      * corresponds, relatively to the stack size at the beginning of the
59      * originating basic block. If {@link ClassWriter#COMPUTE_FRAMES} is used,
60      * this field is the kind of this control flow graph edge (i.e. NORMAL or
61      * EXCEPTION).
62      */
63     int info;
64 
65     /**
66      * The successor block of the basic block from which this edge originates.
67      */
68     Label successor;
69 
70     /**
71      * The next edge in the list of successors of the originating basic block.
72      * See {@link Label#successors successors}.
73      */
74     Edge next;
75 }
76