Package cn.wensiqun.asmsupport.operators.array

Source Code of cn.wensiqun.asmsupport.operators.array.ArrayLength

package cn.wensiqun.asmsupport.operators.array;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import cn.wensiqun.asmsupport.Parameterized;
import cn.wensiqun.asmsupport.asm.InstructionHelper;
import cn.wensiqun.asmsupport.block.ProgramBlock;
import cn.wensiqun.asmsupport.clazz.AClass;

/**
*
* @author 温斯群(Joe Wen)
*
*/
public class ArrayLength extends AbstractArrayOperator implements Parameterized {


    private static Log log = LogFactory.getLog(ArrayLength.class);
   
    private boolean useByOther;
   
    /**
     *
     * @param block
     * @param arrayReference
     * @param parDims
     */
    protected ArrayLength(ProgramBlock block, Parameterized arrayReference, Parameterized... parDims) {
        super(block, arrayReference);
        this.parDims = parDims;
    }
   

    @Override
    public void executing() {
    if(!useByOther){
            throw new RuntimeException(this.toString() + " not use by other operator");
        }
        InstructionHelper ih = block.getInsnHelper();
        if(log.isDebugEnabled()) log.debug("start get length of array");
        getValue();
        if(log.isDebugEnabled()) log.debug("got length and push to stack");
        ih.arrayLength();
    }

    @Override
    public void loadToStack(ProgramBlock block) {
        this.execute();
    }

    @Override
    public AClass getParamterizedType() {
        return AClass.INT_ACLASS;
    }

    @Override
    public void asArgument() {
        useByOther = true;
        block.removeExe(this);
    }
   
    @Override
  public String toString() {
    StringBuilder toString = new StringBuilder(arrayReference.toString());
    for(Parameterized p : parDims){
      toString.append("[").append(p).append("]");
    }
    toString.append(".length");
    return toString.toString();
  }
}
TOP

Related Classes of cn.wensiqun.asmsupport.operators.array.ArrayLength

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.