19 * limitations under the License. |
19 * limitations under the License. |
20 */ |
20 */ |
21 |
21 |
22 package com.sun.org.apache.bcel.internal.generic; |
22 package com.sun.org.apache.bcel.internal.generic; |
23 |
23 |
24 import java.io.*; |
24 import java.io.DataOutputStream; |
|
25 import java.io.IOException; |
|
26 |
25 import com.sun.org.apache.bcel.internal.util.ByteSequence; |
27 import com.sun.org.apache.bcel.internal.util.ByteSequence; |
26 |
28 |
27 /** |
29 /** |
28 * GOTO_W - Branch always (to relative offset, not absolute address) |
30 * GOTO_W - Branch always (to relative offset, not absolute address) |
29 * |
31 * |
30 * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A> |
32 * @version $Id: GOTO_W.java 1747278 2016-06-07 17:28:43Z britter $ |
31 */ |
33 */ |
32 public class GOTO_W extends GotoInstruction { |
34 public class GOTO_W extends GotoInstruction { |
33 /** |
|
34 * Empty constructor needed for the Class.newInstance() statement in |
|
35 * Instruction.readInstruction(). Not to be used otherwise. |
|
36 */ |
|
37 GOTO_W() {} |
|
38 |
35 |
39 public GOTO_W(InstructionHandle target) { |
36 /** |
40 super(com.sun.org.apache.bcel.internal.Constants.GOTO_W, target); |
37 * Empty constructor needed for the Class.newInstance() statement in |
41 length = 5; |
38 * Instruction.readInstruction(). Not to be used otherwise. |
42 } |
39 */ |
|
40 GOTO_W() { |
|
41 } |
43 |
42 |
44 /** |
|
45 * Dump instruction as byte code to stream out. |
|
46 * @param out Output stream |
|
47 */ |
|
48 public void dump(DataOutputStream out) throws IOException { |
|
49 index = getTargetOffset(); |
|
50 out.writeByte(opcode); |
|
51 out.writeInt(index); |
|
52 } |
|
53 |
43 |
54 /** |
44 public GOTO_W(final InstructionHandle target) { |
55 * Read needed data (e.g. index) from file. |
45 super(com.sun.org.apache.bcel.internal.Const.GOTO_W, target); |
56 */ |
46 super.setLength(5); |
57 protected void initFromFile(ByteSequence bytes, boolean wide) throws IOException |
47 } |
58 { |
|
59 index = bytes.readInt(); |
|
60 length = 5; |
|
61 } |
|
62 |
48 |
63 /** |
49 |
64 * Call corresponding visitor method(s). The order is: |
50 /** |
65 * Call visitor methods of implemented interfaces first, then |
51 * Dump instruction as byte code to stream out. |
66 * call methods according to the class hierarchy in descending order, |
52 * @param out Output stream |
67 * i.e., the most specific visitXXX() call comes last. |
53 */ |
68 * |
54 @Override |
69 * @param v Visitor object |
55 public void dump( final DataOutputStream out ) throws IOException { |
70 */ |
56 super.setIndex(getTargetOffset()); |
71 public void accept(Visitor v) { |
57 out.writeByte(super.getOpcode()); |
72 v.visitUnconditionalBranch(this); |
58 out.writeInt(super.getIndex()); |
73 v.visitBranchInstruction(this); |
59 } |
74 v.visitGotoInstruction(this); |
60 |
75 v.visitGOTO_W(this); |
61 |
76 } |
62 /** |
|
63 * Read needed data (e.g. index) from file. |
|
64 */ |
|
65 @Override |
|
66 protected void initFromFile( final ByteSequence bytes, final boolean wide ) throws IOException { |
|
67 super.setIndex(bytes.readInt()); |
|
68 super.setLength(5); |
|
69 } |
|
70 |
|
71 |
|
72 /** |
|
73 * Call corresponding visitor method(s). The order is: |
|
74 * Call visitor methods of implemented interfaces first, then |
|
75 * call methods according to the class hierarchy in descending order, |
|
76 * i.e., the most specific visitXXX() call comes last. |
|
77 * |
|
78 * @param v Visitor object |
|
79 */ |
|
80 @Override |
|
81 public void accept( final Visitor v ) { |
|
82 v.visitUnconditionalBranch(this); |
|
83 v.visitBranchInstruction(this); |
|
84 v.visitGotoInstruction(this); |
|
85 v.visitGOTO_W(this); |
|
86 } |
77 } |
87 } |