1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.bcel.verifier.structurals;
18
19
20
21 /***
22 * This class represents a JVM execution frame; that means,
23 * a local variable array and an operand stack.
24 *
25 * @version $Id: Frame.java 386056 2006-03-15 11:31:56Z tcurdt $
26 * @author Enver Haase
27 */
28
29 public class Frame{
30
31 /***
32 * For instance initialization methods, it is important to remember
33 * which instance it is that is not initialized yet. It will be
34 * initialized invoking another constructor later.
35 * NULL means the instance already *is* initialized.
36 */
37 protected static UninitializedObjectType _this;
38
39 /***
40 *
41 */
42 private LocalVariables locals;
43
44 /***
45 *
46 */
47 private OperandStack stack;
48
49 /***
50 *
51 */
52 public Frame(int maxLocals, int maxStack){
53 locals = new LocalVariables(maxLocals);
54 stack = new OperandStack(maxStack);
55 }
56
57 /***
58 *
59 */
60 public Frame(LocalVariables locals, OperandStack stack){
61 this.locals = locals;
62 this.stack = stack;
63 }
64
65 /***
66 *
67 */
68 protected Object clone(){
69 Frame f = new Frame(locals.getClone(), stack.getClone());
70 return f;
71 }
72
73 /***
74 *
75 */
76 public Frame getClone(){
77 return (Frame) clone();
78 }
79
80 /***
81 *
82 */
83 public LocalVariables getLocals(){
84 return locals;
85 }
86
87 /***
88 *
89 */
90 public OperandStack getStack(){
91 return stack;
92 }
93
94 /*** @return a hash code value for the object.
95 */
96 public int hashCode() { return stack.hashCode() ^ locals.hashCode(); }
97
98 /***
99 *
100 */
101 public boolean equals(Object o){
102 if (!(o instanceof Frame)) {
103 return false;
104 }
105 Frame f = (Frame) o;
106 return this.stack.equals(f.stack) && this.locals.equals(f.locals);
107 }
108
109 /***
110 * Returns a String representation of the Frame instance.
111 */
112 public String toString(){
113 String s="Local Variables:\n";
114 s += locals;
115 s += "OperandStack:\n";
116 s += stack;
117 return s;
118 }
119 }