本文整理了Java中org.objectweb.asm.tree.analysis.BasicValue
类的一些代码示例,展示了BasicValue
类的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。BasicValue
类的具体详情如下:
包路径:org.objectweb.asm.tree.analysis.BasicValue
类名称:BasicValue
[英]A Value that is represented by its type in a seven types type system. This type system distinguishes the UNINITIALZED, INT, FLOAT, LONG, DOUBLE, REFERENCE and RETURNADDRESS types.
[中]在七种类型系统中由其类型表示的值。此类型系统区分未初始化、INT、FLOAT、LONG、DOUBLE、REFERENCE和RETURNADDRESS类型。
代码示例来源:origin: org.ow2.asm/asm-debug-all
@Override
public BasicValue newValue(final Type type) {
if (type == null) {
return BasicValue.UNINITIALIZED_VALUE;
}
boolean isArray = type.getSort() == Type.ARRAY;
if (isArray) {
switch (type.getElementType().getSort()) {
case Type.BOOLEAN:
case Type.CHAR:
case Type.BYTE:
case Type.SHORT:
return new BasicValue(type);
}
}
BasicValue v = super.newValue(type);
if (BasicValue.REFERENCE_VALUE.equals(v)) {
if (isArray) {
v = newValue(type.getElementType());
String desc = v.getType().getDescriptor();
for (int i = 0; i < type.getDimensions(); ++i) {
desc = '[' + desc;
}
v = new BasicValue(Type.getType(desc));
} else {
v = new BasicValue(type);
}
}
return v;
}
代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5
private static boolean isNull(BasicValue value) {
if (null == value)
return true;
if (!value.isReference())
return false;
Type type = value.getType();
return "Lnull;".equals(type.getDescriptor());
}
代码示例来源:origin: fge/grappa
@Override
public String toString()
{
return instruction.getOpcode() != -1
? Printer.OPCODES[instruction.getOpcode()]
: super.toString();
}
}
代码示例来源:origin: co.paralleluniverse/quasar
static boolean isNullType(BasicValue v) {
return (v == BasicValue.UNINITIALIZED_VALUE)
|| (v.isReference() && v.getType().getInternalName().equals("null"));
}
代码示例来源:origin: co.paralleluniverse/quasar
@Override
public BasicValue binaryOperation(AbstractInsnNode insn, BasicValue value1, BasicValue value2) throws AnalyzerException {
if(insn.getOpcode() == Opcodes.AALOAD) {
Type t1 = value1.getType();
if(t1 == null || t1.getSort() != Type.ARRAY) {
throw new AnalyzerException(insn, "AALOAD needs an array as first parameter");
}
Type resultType = Type.getType(t1.getDescriptor().substring(1));
return new BasicValue(resultType);
}
return super.binaryOperation(insn, value1, value2);
}
代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5
Type returnType = Type.getReturnType(desc);
boolean hasReturn = returnType != Type.VOID_TYPE;
if (hasReturn) {
mv.visitInsn(returnType.getSize() == 1 ? POP : POP2);
Type[] params = Type.getArgumentTypes(desc);
int argSize = params.length;
int ownerSize = opcode == INVOKESTATIC || opcode == INVOKEDYNAMIC ? 0 : 1; // TODO
} else if (value == BasicValue.UNINITIALIZED_VALUE) {
} else if (value.isReference()) {
mv.visitVarInsn(ALOAD, stackRecorderVar);
mv.visitInsn(SWAP);
mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, PUSH_METHOD + "Object", "(Ljava/lang/Object;)V", false);
} else {
Type type = value.getType();
if (type.getSize() > 1) {
} else if (value.isReference()) {
mv.visitVarInsn(ALOAD, stackRecorderVar);
mv.visitVarInsn(ALOAD, j);
} else {
mv.visitVarInsn(ALOAD, stackRecorderVar);
Type type = value.getType();
mv.visitVarInsn(type.getOpcode(ILOAD), j);
mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, getPushMethod(type), "(" + type.getDescriptor() + ")V", false);
代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5
Type type = value.getType();
if (value.isReference()) {
mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, POP_METHOD + "Object", "()Ljava/lang/Object;", false);
Type t = value.getType();
String desc = t.getDescriptor();
if (desc.charAt(0) == '[') {
mv.visitTypeInsn(CHECKCAST, desc);
} else {
mv.visitTypeInsn(CHECKCAST, t.getInternalName());
mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, getPopMethod(type), "()" + type.getDescriptor(), false);
mv.visitVarInsn(type.getOpcode(ISTORE), j);
} else if (value.isReference()) {
mv.visitVarInsn(ALOAD, stackRecorderVar);
mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, POP_METHOD + "Object", "()Ljava/lang/Object;", false);
mv.visitTypeInsn(CHECKCAST, value.getType().getInternalName());
} else {
Type type = value.getType();
mv.visitVarInsn(ALOAD, stackRecorderVar);
mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, getPopMethod(type), "()" + type.getDescriptor(), false);
mv.visitVarInsn(ALOAD, stackRecorderVar);
mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, POP_METHOD + "Reference", "()Ljava/lang/Object;", false);
mv.visitTypeInsn(CHECKCAST, value.getType().getInternalName());
代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5
@Override
protected boolean isAssignableFrom(Type t, Type u) {
if (t.equals(u)) {
return true;
if ("Lnull;".equals(u.getDescriptor()) && t.getSort() >= Type.ARRAY) {
return true;
int dt = t.getDimensions();
int du = u.getDimensions();
boolean isObject = et.equals(BasicValue.REFERENCE_VALUE.getType());
代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5
@Override
public BasicValue merge(BasicValue v, BasicValue w) {
if (!v.equals(w)) {
Type t = v.getType();
Type u = w.getType();
if (t != null
&& (t.getSort() == Type.OBJECT || t.getSort() == Type.ARRAY)) {
if (u != null
&& (u.getSort() == Type.OBJECT || u.getSort() == Type.ARRAY)) {
if ("Lnull;".equals(t.getDescriptor())) {
return w;
}
if ("Lnull;".equals(u.getDescriptor())) {
return v;
}
if (isAssignableFrom(t, u)) {
return v;
}
if (isAssignableFrom(u, t)) {
return w;
}
return new BasicValue(inheritanceLookup.getCommonSuperType(t, u));
}
}
return BasicValue.UNINITIALIZED_VALUE;
}
return v;
}
代码示例来源:origin: co.paralleluniverse/quasar
@Override
public BasicValue merge(BasicValue v, BasicValue w) {
if (!v.equals(w)) {
if(v.isReference() && w.isReference()) {
int dimensions = 0;
Type typeV = v.getType();
Type typeW = w.getType();
if(typeV.getSort() != typeW.getSort()) {
db.log(LogLevel.DEBUG, "Array and none array type can't be merged: %s %s", v, w);
return BasicValue.UNINITIALIZED_VALUE;
if(typeW.getSort() == Type.ARRAY) {
dimensions = typeV.getDimensions();
if(dimensions != typeW.getDimensions()) {
return new BasicValue(Type.getType(typeDescriptor));
代码示例来源:origin: org.ow2.asm/asm-debug-all
@Override
protected BasicValue getElementValue(final BasicValue objectArrayValue)
throws AnalyzerException {
Type arrayType = objectArrayValue.getType();
if (arrayType != null) {
if (arrayType.getSort() == Type.ARRAY) {
return newValue(Type.getType(arrayType.getDescriptor()
.substring(1)));
} else if ("Lnull;".equals(arrayType.getDescriptor())) {
return objectArrayValue;
}
}
throw new Error("Internal error");
}
代码示例来源:origin: dragome/dragome-sdk
Type type= value.getType();
if (value.isReference())
Type t= value.getType();
String desc= t.getDescriptor();
if (desc.charAt(0) == '[')
mv.visitTypeInsn(CHECKCAST, t.getInternalName());
mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, getPopMethod(type), "()" + type.getDescriptor(), false);
mv.visitVarInsn(type.getOpcode(ISTORE), j);
else if (value.isReference())
mv.visitTypeInsn(CHECKCAST, value.getType().getInternalName());
Type type= value.getType();
mv.visitVarInsn(ALOAD, stackRecorderVar);
mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, getPopMethod(type), "()" + type.getDescriptor(), false);
mv.visitTypeInsn(CHECKCAST, value.getType().getInternalName());
代码示例来源:origin: co.paralleluniverse/quasar
emitConst(mv, idx);
switch (v.getType().getSort()) {
case Type.OBJECT:
String internalName = v.getType().getInternalName();
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, STACK_NAME, "getObject", "(I)Ljava/lang/Object;");
if (!internalName.equals("java/lang/Object")) { // don't cast to Object ;)
case Type.ARRAY:
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, STACK_NAME, "getObject", "(I)Ljava/lang/Object;");
mv.visitTypeInsn(Opcodes.CHECKCAST, v.getType().getDescriptor());
break;
case Type.BYTE:
break;
default:
throw new InternalError("Unexpected type: " + v.getType());
代码示例来源:origin: fge/grappa
@Override
public void returnOperation(final AbstractInsnNode insn,
final BasicValue value, final BasicValue expected)
throws AnalyzerException
{
Preconditions.checkState(insn.getOpcode() == ARETURN);
Preconditions.checkState(unwrap(value).getType().equals(
Type.getType(Rule.class)));
Preconditions.checkState(unwrap(expected).getType().equals(
Type.getType(Rule.class)));
Preconditions.checkState(method.getReturnInstructionNode() == null);
method.setReturnInstructionNode(createNode(insn, null, value));
}
代码示例来源:origin: org.ow2.asm/asm-debug-all
@Override
protected boolean isSubTypeOf(final BasicValue value,
final BasicValue expected) {
Type expectedType = expected.getType();
Type type = value.getType();
switch (expectedType.getSort()) {
case Type.INT:
case Type.FLOAT:
case Type.LONG:
case Type.DOUBLE:
return type.equals(expectedType);
case Type.ARRAY:
case Type.OBJECT:
if ("Lnull;".equals(type.getDescriptor())) {
return true;
} else if (type.getSort() == Type.OBJECT
|| type.getSort() == Type.ARRAY) {
return isAssignableFrom(expectedType, type);
} else {
return false;
}
default:
throw new Error("Internal error");
}
}
代码示例来源:origin: com.amazon.device.tools.lint/lint-checks
Frame frame = frames[instructions.indexOf(call)];
int stackSlot = frame.getStackSize();
for (Type type : Type.getArgumentTypes(desc)) {
stackSlot -= type.getSize();
Type type = stackValue.getType();
if (type != null && type.getDescriptor().equals(VM_SECURE_RANDOM)) {
checkValidSetSeed(context, call);
代码示例来源:origin: org.ow2.asm/asm-debug-all
final BasicValue value) throws AnalyzerException {
BasicValue expected;
switch (insn.getOpcode()) {
case INEG:
case IINC:
case GETFIELD:
expected = newValue(Type
.getObjectType(((FieldInsnNode) insn).owner));
break;
case CHECKCAST:
if (!value.isReference()) {
throw new AnalyzerException(insn, null, "an object reference",
value);
case IFNULL:
case IFNONNULL:
if (!value.isReference()) {
throw new AnalyzerException(insn, null, "an object reference",
value);
expected = newValue(Type.getType(((FieldInsnNode) insn).desc));
break;
default:
代码示例来源:origin: org.ow2.asm/asm-debug-all
@Override
protected boolean isArrayValue(final BasicValue value) {
Type t = value.getType();
return t != null
&& ("Lnull;".equals(t.getDescriptor()) || t.getSort() == Type.ARRAY);
}
代码示例来源:origin: com.amazon.device.tools.lint/lint-checks
Type type = stackValue.getType();
if (type == null) {
return;
String internalName = type.getInternalName();
String className = type.getClassName();
LintDriver driver = context.getDriver();
代码示例来源:origin: org.ow2.asm/asm-debug-all
@Override
public BasicValue naryOperation(final AbstractInsnNode insn,
final List<? extends BasicValue> values) throws AnalyzerException {
int opcode = insn.getOpcode();
if (opcode == MULTIANEWARRAY) {
for (int i = 0; i < values.size(); ++i) {
if (!BasicValue.INT_VALUE.equals(values.get(i))) {
throw new AnalyzerException(insn, null,
BasicValue.INT_VALUE, values.get(i));
int j = 0;
if (opcode != INVOKESTATIC && opcode != INVOKEDYNAMIC) {
Type owner = Type.getObjectType(((MethodInsnNode) insn).owner);
if (!isSubTypeOf(values.get(i++), newValue(owner))) {
throw new AnalyzerException(insn, "Method owner",
Type[] args = Type.getArgumentTypes(desc);
while (i < values.size()) {
BasicValue expected = newValue(args[j++]);
内容来源于网络,如有侵权,请联系作者删除!