当前位置: 首页>>代码示例>>Java>>正文


Java LocalVariableGen.setStart方法代码示例

本文整理汇总了Java中org.apache.bcel.generic.LocalVariableGen.setStart方法的典型用法代码示例。如果您正苦于以下问题:Java LocalVariableGen.setStart方法的具体用法?Java LocalVariableGen.setStart怎么用?Java LocalVariableGen.setStart使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在org.apache.bcel.generic.LocalVariableGen的用法示例。


在下文中一共展示了LocalVariableGen.setStart方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: setVarStartEnd

import org.apache.bcel.generic.LocalVariableGen; //导入方法依赖的package包/类
public void setVarStartEnd(int slot, int start_pc, int end_pc, String name) {
	Integer islot = Integer.valueOf(slot);
	if (localVarGenBySlot.containsKey(islot)) {
		name = name.replaceAll("[^a-zA-Z0-9]", "_");
		LocalVariableGen l = (LocalVariableGen)localVarGenBySlot.get(islot);
		l.setEnd(lastInstrHandles[end_pc-1]);
		if (start_pc > 1)
			l.setStart(lastInstrHandles[start_pc-2]);
		l.setName(name);
	}
}
 
开发者ID:gnosygnu,项目名称:luaj_xowa,代码行数:12,代码来源:JavaBuilder.java

示例2: generate

import org.apache.bcel.generic.LocalVariableGen; //导入方法依赖的package包/类
/**
 * A new IdcMetaclass object is created to wrap de 
 * real metaclass providing additional functionality.
 * 
 * <pre>
 * 		NEW IdcMetaclass 
 * 		DUP
 * 		LDC <<model_name>>
 * 		LDC <<class_name>>
 * 		INVOKESPECIAL IdcMetaclass.<init>
 * 		ASTORE !!#variable!!
 * </pre>
 */
@Override
public void generate(GenScope scope) {
	InstructionList il       = scope.getInstructionList();
	InstructionFactory ifact = scope.getInstructionFactory();
	ConstantPoolGen cpg      = scope.getConstantPool();

	LocalVariableGen lvg = null;
	
	if ( getKind() == ReadMetaKind.METACLASS) {		
		lvg = scope.newLocalVariable(this, DefaultTypes.IdcMetaclass);
		
		lvg.setStart(il.append(ifact.createNew(DefaultTypes.IdcMetaclass)));
		il.append(new DUP());
		
		// il.append(new LDC(cpg.addString(getModel().getName())));
		scope.generateGetTransformation();
		scope.generateGetModel(getModel().getName());
		// CommonGen.generateGetModel(getModel().getName(), il, ifact, scope);

		il.append(new LDC(cpg.addString(getClassName())));
		il.append(ifact.createInvoke(DefaultTypes.IdcMetaclass.getClassName(), "<init>",
			Type.VOID, new Type[] { DefaultTypes.IdcTransformation, DefaultTypes.IModel, Type.STRING },
			Constants.INVOKESPECIAL));
	} else if ( getKind() == ReadMetaKind.THIS_TRANSFORMATION_OBJECT ||
			    getKind() == ReadMetaKind.THIS_TRANSFORMATION_METHOD_HANDLER ) {
		lvg = scope.newLocalVariable(this, DefaultTypes.IdcTransformation);			
		lvg.setStart(il.append(InstructionConstants.NOP));

		scope.generateGetTransformation();
	} else if ( getKind() == ReadMetaKind.MODEL ){
		lvg = scope.newLocalVariable(this, DefaultTypes.IModel);			
		lvg.setStart(il.append(InstructionConstants.NOP));
		scope.generateGetModel(getModel().getName());	
	} else {
		throw new IllegalArgumentException();
	}
	
	il.append(new ASTORE(lvg.getIndex()));
}
 
开发者ID:jesusc,项目名称:eclectic,代码行数:53,代码来源:ReadMetaJVMGen.java

示例3: generate

import org.apache.bcel.generic.LocalVariableGen; //导入方法依赖的package包/类
/**
 * <<GET_IMODEL(THIS)>> 
	 * ALOAD !!#receptor_variable!!
    * LDC <<featureName>>
 * INVOKEINTERFACE getFeature
 */	 
@Override
public void generate(GenScope scope) {
	InstructionList il       = scope.getInstructionList();
	InstructionFactory ifact = scope.getInstructionFactory();
	ConstantPoolGen cpg      = scope.getConstantPool();

	Variable realReceptor = scope.getRealVariable(this.receptor);

	LocalVariableGen lvg = scope.newLocalVariable(this, Type.OBJECT);

	// generate model access
	scope.generateGetModel(realReceptor);
	il.append(new DUP()); // for later calls of get/method calls (problem if I put the generateGetModel directly, not using the dup optimize, why?)
	
	
	// push receptor
	// push featureName
	scope.loadVariable(realReceptor, il);
	lvg.setStart(il.append(new LDC(cpg.addString(featureName))));
	
	if ( kind == GetKind.PLAIN_GET ) {
		appendGetFeature(il, ifact);
		il.append(InstructionFactory.SWAP);
		il.append(InstructionFactory.POP);
		// I should swap, and then pop...
		// il.append(new POP());
	} else {
		BranchInstruction branchToCall = InstructionFactory
				.createBranchInstruction(Constants.IFEQ, null);
		BranchInstruction branchToEnd = InstructionFactory
				.createBranchInstruction(Constants.GOTO, null);
		
		// hasFeature(f)
		// ifeq (jump if value == 0)
		appendHasFeature(il, ifact);
		lvg.setStart(il.append(branchToCall));

		// push receptor
		// push featureName
		// get & jump to the end
		/*
		scope.loadVariable(realReceptor, il);
		lvg.setStart(il.append(new LDC(cpg.addString(featureName))));
		*/
		if ( isStreamingMode(scope) ) {
			appendContinuableGetFeature(scope, realReceptor, il, ifact, cpg);
		} else {
			scope.loadVariable(realReceptor, il);
			il.append(new LDC(cpg.addString(featureName)));
			appendGetFeature(il, ifact);
			// branchToEnd.setTarget(appendGetFeature(il, ifact));
		}
		il.append(branchToEnd);
		
		// push receptor
		// push featureName
		// methodCall
		branchToCall.setTarget( il.append(InstructionConstants.NOP) ); // label for this part
		//scope.loadVariable(realReceptor, il);
		// lvg.setStart(il.append(new LDC(cpg.addString(featureName))));			
		lvg.setStart(il.append(InstructionConstants.POP)); // remove IModel
		appendMethodCall(scope, il, ifact);

		// NOP-end
		branchToEnd.setTarget( il.append(InstructionConstants.NOP) );
	}
	
	// store result
	il.append(new ASTORE( lvg.getIndex() ));
}
 
开发者ID:jesusc,项目名称:eclectic,代码行数:77,代码来源:GetJVMGen.java

示例4: generate

import org.apache.bcel.generic.LocalVariableGen; //导入方法依赖的package包/类
@Override
public void generate(GenScope scope) {
	InstructionList il       = scope.getInstructionList();
	InstructionFactory ifact = scope.getInstructionFactory();
	ConstantPoolGen cpg      = scope.getConstantPool();

	LocalVariableGen lvg = scope.newLocalVariable(this, Type.OBJECT);

	switch (kind.getValue()) {
	case LiteralKind.BOOLEAN_VALUE:
		if (getBooleanValue()) {
			il.append(InstructionConstants.ICONST_1);
		} else {
			il.append(InstructionConstants.ICONST_0);
		}
		il.append(ifact.createInvoke(Boolean.class.getName(), "valueOf",
				new ObjectType(Boolean.class.getName()),
				new Type[] { Type.BOOLEAN }, Constants.INVOKESTATIC));
		break;
	case LiteralKind.STRING_VALUE:
		lvg.setStart(il.append(new LDC(cpg.addString(getStringValue()))));
		break;
	case LiteralKind.NULL_VALUE:
		lvg.setStart(il.append(InstructionConstants.ACONST_NULL));
		break;
	case LiteralKind.INTEGER_VALUE:
		//lvg.setStart(il.append(new LDC(cpg.addInteger(intValue))));
		//il.append(new LDC(cpg.addInteger(intValue)));
		il.append(ifact.createConstant(intValue));
		il.append(ifact.createInvoke(Integer.class.getName(), "valueOf",
				new ObjectType(Integer.class.getName()),
				new Type[] { Type.INT }, Constants.INVOKESTATIC));
		break;
	case LiteralKind.DOUBLE_VALUE:
		//lvg.setStart(il.append(new LDC(cpg.addDouble(doubleValue))));
		lvg.setStart(il.append(ifact.createConstant(doubleValue)));
		il.append(ifact.createInvoke(Double.class.getName(), "valueOf",
				new ObjectType(Double.class.getName()), 
				new Type[] { Type.DOUBLE }, Constants.INVOKESTATIC));
		break;
	default:
		throw new IdcException("Not supported literal");
		// break;
	}
	il.append(new ASTORE(lvg.getIndex()));
}
 
开发者ID:jesusc,项目名称:eclectic,代码行数:47,代码来源:LiteralJVMGen.java


注:本文中的org.apache.bcel.generic.LocalVariableGen.setStart方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。