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 /**
     21  * LCONST - Push 0 or 1, other values cause an exception
     22  *
     23  * <PRE>Stack: ... -&gt; ..., </PRE>
     24  *
     25  * @version $Id$
     26  */
     27 public class LCONST extends Instruction implements ConstantPushInstruction {
     28 
     29     private long value;
     30 
     31 
     32     /**
     33      * Empty constructor needed for Instruction.readInstruction.
     34      * Not to be used otherwise.
     35      */
     36     LCONST() {
     37     }
     38 
     39 
     40     public LCONST(final long l) {
     41         super(org.apache.bcel.Const.LCONST_0, (short) 1);
     42         if (l == 0) {
     43             super.setOpcode(org.apache.bcel.Const.LCONST_0);
     44         } else if (l == 1) {
     45             super.setOpcode(org.apache.bcel.Const.LCONST_1);
     46         } else {
     47             throw new ClassGenException("LCONST can be used only for 0 and 1: " + l);
     48         }
     49         value = l;
     50     }
     51 
     52 
     53     @Override
     54     public Number getValue() {
     55         return Long.valueOf(value);
     56     }
     57 
     58 
     59     /** @return Type.LONG
     60      */
     61     @Override
     62     public Type getType( final ConstantPoolGen cp ) {
     63         return Type.LONG;
     64     }
     65 
     66 
     67     /**
     68      * Call corresponding visitor method(s). The order is:
     69      * Call visitor methods of implemented interfaces first, then
     70      * call methods according to the class hierarchy in descending order,
     71      * i.e., the most specific visitXXX() call comes last.
     72      *
     73      * @param v Visitor object
     74      */
     75     @Override
     76     public void accept( final Visitor v ) {
     77         v.visitPushInstruction(this);
     78         v.visitStackProducer(this);
     79         v.visitTypedInstruction(this);
     80         v.visitConstantPushInstruction(this);
     81         v.visitLCONST(this);
     82     }
     83 }
     84