1/*
2 * reserved comment block
3 * DO NOT REMOVE OR ALTER!
4 */
5/*
6 * Licensed to the Apache Software Foundation (ASF) under one or more
7 * contributor license agreements.  See the NOTICE file distributed with
8 * this work for additional information regarding copyright ownership.
9 * The ASF licenses this file to You under the Apache License, Version 2.0
10 * (the "License"); you may not use this file except in compliance with
11 * the License.  You may obtain a copy of the License at
12 *
13 *      http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 */
21
22package com.sun.org.apache.bcel.internal.generic;
23
24import java.io.DataOutputStream;
25import java.io.IOException;
26
27import com.sun.org.apache.bcel.internal.util.ByteSequence;
28
29/**
30 * GOTO_W - Branch always (to relative offset, not absolute address)
31 *
32 * @version $Id: GOTO_W.java 1747278 2016-06-07 17:28:43Z britter $
33 */
34public class GOTO_W extends GotoInstruction {
35
36    /**
37     * Empty constructor needed for the Class.newInstance() statement in
38     * Instruction.readInstruction(). Not to be used otherwise.
39     */
40    GOTO_W() {
41    }
42
43
44    public GOTO_W(final InstructionHandle target) {
45        super(com.sun.org.apache.bcel.internal.Const.GOTO_W, target);
46        super.setLength(5);
47    }
48
49
50    /**
51     * Dump instruction as byte code to stream out.
52     * @param out Output stream
53     */
54    @Override
55    public void dump( final DataOutputStream out ) throws IOException {
56        super.setIndex(getTargetOffset());
57        out.writeByte(super.getOpcode());
58        out.writeInt(super.getIndex());
59    }
60
61
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    }
87}
88