Package cn.wensiqun.asmsupport.definition.variable

Source Code of cn.wensiqun.asmsupport.definition.variable.SuperVariable

/**
*
*/
package cn.wensiqun.asmsupport.definition.variable;


import org.objectweb.asm.Opcodes;

import cn.wensiqun.asmsupport.block.ProgramBlock;
import cn.wensiqun.asmsupport.clazz.AClass;
import cn.wensiqun.asmsupport.clazz.AClassFactory;
import cn.wensiqun.asmsupport.entity.GlobalVariableEntity;
import cn.wensiqun.asmsupport.entity.VariableEntity;
import cn.wensiqun.asmsupport.operators.AbstractOperator;
import cn.wensiqun.asmsupport.utils.ASConstant;


/**
* 全局变量。这个class只用于方法体内操作变量
* @author 温斯群(Joe Wen)
*/
public class SuperVariable extends AbstractVariable{

    private GlobalVariableEntity gve;
   
    /**
     * 通过Class获取的全局变量
     * @param insnHelper
     */
    public SuperVariable(AClass aclass) {
        this.gve = new GlobalVariableEntity(
                AClassFactory.getProductClass(aclass.getSuperClass()),
                AClassFactory.getProductClass(aclass.getSuperClass()),
                Opcodes.ACC_FINAL, ASConstant.SUPER);
    }

    @Override
    public void loadToStack(ProgramBlock block) {
        block.getInsnHelper().loadThis();
    }

    @Override
    public boolean availableFor(AbstractOperator operator) {
        return true;
    }


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

    @Override
    public VariableEntity getVariableEntity() {
        return gve;
    }

    @Override
    public GlobalVariable getGlobalVariable(String name) {
        return getGlobalVariable(gve.getDeclareClass(), name);
    }

    @Override
    public String toString() {
        return ASConstant.SUPER;
    }
  
}
TOP

Related Classes of cn.wensiqun.asmsupport.definition.variable.SuperVariable

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.