Home | History | Annotate | Download | only in generic
      1 /*
      2  * Licensed to the Apache Software Foundation (ASF) under one or more
      3  * contributor license agreements.  See the NOTICE file distributed with
      4  * this work for additional information regarding copyright ownership.
      5  * The ASF licenses this file to You under the Apache License, Version 2.0
      6  * (the "License"); you may not use this file except in compliance with
      7  * the License.  You may obtain a copy of the License at
      8  *
      9  *      http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  *
     17  */
     18 package org.apache.bcel.generic;
     19 
     20 import java.io.DataOutputStream;
     21 import java.io.IOException;
     22 
     23 import org.apache.bcel.util.ByteSequence;
     24 
     25 /**
     26  * SIPUSH - Push short
     27  *
     28  * <PRE>Stack: ... -&gt; ..., value</PRE>
     29  *
     30  * @version $Id$
     31  */
     32 public class SIPUSH extends Instruction implements ConstantPushInstruction {
     33 
     34     private short b;
     35 
     36 
     37     /**
     38      * Empty constructor needed for Instruction.readInstruction.
     39      * Not to be used otherwise.
     40      */
     41     SIPUSH() {
     42     }
     43 
     44 
     45     public SIPUSH(final short b) {
     46         super(org.apache.bcel.Const.SIPUSH, (short) 3);
     47         this.b = b;
     48     }
     49 
     50 
     51     /**
     52      * Dump instruction as short code to stream out.
     53      */
     54     @Override
     55     public void dump( final DataOutputStream out ) throws IOException {
     56         super.dump(out);
     57         out.writeShort(b);
     58     }
     59 
     60 
     61     /**
     62      * @return mnemonic for instruction
     63      */
     64     @Override
     65     public String toString( final boolean verbose ) {
     66         return super.toString(verbose) + " " + b;
     67     }
     68 
     69 
     70     /**
     71      * Read needed data (e.g. index) from file.
     72      */
     73     @Override
     74     protected void initFromFile( final ByteSequence bytes, final boolean wide ) throws IOException {
     75         super.setLength(3);
     76         b = bytes.readShort();
     77     }
     78 
     79 
     80     @Override
     81     public Number getValue() {
     82         return Integer.valueOf(b);
     83     }
     84 
     85 
     86     /** @return Type.SHORT
     87      */
     88     @Override
     89     public Type getType( final ConstantPoolGen cp ) {
     90         return Type.SHORT;
     91     }
     92 
     93 
     94     /**
     95      * Call corresponding visitor method(s). The order is:
     96      * Call visitor methods of implemented interfaces first, then
     97      * call methods according to the class hierarchy in descending order,
     98      * i.e., the most specific visitXXX() call comes last.
     99      *
    100      * @param v Visitor object
    101      */
    102     @Override
    103     public void accept( final Visitor v ) {
    104         v.visitPushInstruction(this);
    105         v.visitStackProducer(this);
    106         v.visitTypedInstruction(this);
    107         v.visitConstantPushInstruction(this);
    108         v.visitSIPUSH(this);
    109     }
    110 }
    111