use of org.mvel2.asm.Label in project drools by kiegroup.
the class TraitMapProxyClassBuilderImpl method buildKeyedEquals.
protected void buildKeyedEquals(ClassVisitor cw, ClassDefinition classDef, String proxyType) {
MethodVisitor mv;
mv = cw.visitMethod(ACC_PUBLIC, "equals", "(" + Type.getDescriptor(Object.class) + ")Z", null, null);
mv.visitCode();
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
Label l0 = new Label();
mv.visitJumpInsn(IF_ACMPNE, l0);
mv.visitInsn(ICONST_1);
mv.visitInsn(IRETURN);
mv.visitLabel(l0);
mv.visitVarInsn(ALOAD, 1);
Label l1 = new Label();
mv.visitJumpInsn(IFNULL, l1);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(Object.class), "getClass", "()" + Type.getDescriptor(Class.class), false);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(Object.class), "getClass", "()" + Type.getDescriptor(Class.class), false);
Label l2 = new Label();
mv.visitJumpInsn(IF_ACMPEQ, l2);
mv.visitLabel(l1);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l2);
mv.visitVarInsn(ALOAD, 1);
mv.visitTypeInsn(CHECKCAST, proxyType);
mv.visitVarInsn(ASTORE, 2);
int x = 2;
for (FieldDefinition field : classDef.getFieldsDefinitions()) {
if (field.isKey()) {
if (!BuildUtils.isPrimitive(field.getTypeName())) {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
Label l11 = new Label();
mv.visitJumpInsn(IFNULL, l11);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitMethodInsn(INVOKEVIRTUAL, BuildUtils.getInternalType(field.getTypeName()), "equals", "(" + Type.getDescriptor(Object.class) + ")Z", false);
Label l12 = new Label();
mv.visitJumpInsn(IFNE, l12);
Label l13 = new Label();
mv.visitJumpInsn(GOTO, l13);
mv.visitLabel(l11);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitJumpInsn(IFNULL, l12);
mv.visitLabel(l13);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l12);
} else if ("double".equals(field.getTypeName())) {
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(Double.class), "compare", "(DD)I", false);
Label l5 = new Label();
mv.visitJumpInsn(IFEQ, l5);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l5);
x = Math.max(x, 4);
} else if ("float".equals(field.getTypeName())) {
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(Float.class), "compare", "(FF)I", false);
Label l6 = new Label();
mv.visitJumpInsn(IFEQ, l6);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l6);
} else if ("long".equals(field.getTypeName())) {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitInsn(LCMP);
Label l8 = new Label();
mv.visitJumpInsn(IFEQ, l8);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l8);
x = Math.max(x, 4);
} else {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
Label l4 = new Label();
mv.visitJumpInsn(IF_ICMPEQ, l4);
mv.visitInsn(ICONST_0);
mv.visitInsn(IRETURN);
mv.visitLabel(l4);
}
}
}
mv.visitInsn(ICONST_1);
mv.visitInsn(IRETURN);
// mv.visitMaxs( x, 3 );
mv.visitMaxs(0, 0);
mv.visitEnd();
}
use of org.mvel2.asm.Label in project drools by kiegroup.
the class TraitMapProxyClassBuilderImpl method buildKeyedHashCode.
protected void buildKeyedHashCode(ClassVisitor cw, ClassDefinition classDef, String proxyType) {
MethodVisitor mv;
{
mv = cw.visitMethod(ACC_PUBLIC, "hashCode", "()I", null, null);
mv.visitCode();
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ISTORE, 1);
int x = 2;
int y = 2;
for (FieldDefinition field : classDef.getFieldsDefinitions()) {
if (field.isKey()) {
if (!BuildUtils.isPrimitive(field.getTypeName())) {
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
Label l8 = new Label();
mv.visitJumpInsn(IFNULL, l8);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitMethodInsn(INVOKEVIRTUAL, BuildUtils.getInternalType(field.getTypeName()), "hashCode", "()I", false);
Label l9 = new Label();
mv.visitJumpInsn(GOTO, l9);
mv.visitLabel(l8);
mv.visitInsn(ICONST_0);
mv.visitLabel(l9);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
} else if ("double".equals(field.getTypeName())) {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitInsn(DCONST_0);
mv.visitInsn(DCMPL);
Label l2 = new Label();
mv.visitJumpInsn(IFEQ, l2);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(Double.class), "doubleToLongBits", "(D)J", false);
Label l3 = new Label();
mv.visitJumpInsn(GOTO, l3);
mv.visitLabel(l2);
mv.visitInsn(LCONST_0);
mv.visitLabel(l3);
mv.visitVarInsn(LSTORE, 2);
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(LLOAD, 2);
mv.visitVarInsn(LLOAD, 2);
mv.visitIntInsn(BIPUSH, 32);
mv.visitInsn(LUSHR);
mv.visitInsn(LXOR);
mv.visitInsn(L2I);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
x = Math.max(6, x);
y = Math.max(4, y);
} else if ("boolean".equals(field.getTypeName())) {
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
Label l4 = new Label();
mv.visitJumpInsn(IFEQ, l4);
mv.visitInsn(ICONST_1);
Label l5 = new Label();
mv.visitJumpInsn(GOTO, l5);
mv.visitLabel(l4);
mv.visitInsn(ICONST_0);
mv.visitLabel(l5);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
} else if ("float".equals(field.getTypeName())) {
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitInsn(FCONST_0);
mv.visitInsn(FCMPL);
Label l6 = new Label();
mv.visitJumpInsn(IFEQ, l6);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(Float.class), "floatToIntBits", "(F)I", false);
Label l7 = new Label();
mv.visitJumpInsn(GOTO, l7);
mv.visitLabel(l6);
mv.visitInsn(ICONST_0);
mv.visitLabel(l7);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
x = Math.max(3, x);
} else if ("long".equals(field.getTypeName())) {
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitIntInsn(BIPUSH, 32);
mv.visitInsn(LUSHR);
mv.visitInsn(LXOR);
mv.visitInsn(L2I);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
x = Math.max(6, x);
} else {
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + Type.getDescriptor(field.getType()), false);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
}
}
}
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IRETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
}
}
use of org.mvel2.asm.Label in project drools by kiegroup.
the class TraitTripleProxyClassBuilderImpl method buildConstructorCore.
protected void buildConstructorCore(MethodVisitor mv, String internalProxy, String internalWrapper, String internalCore, String descrCore, MixinInfo mixinInfo) {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(proxyBaseClass), "<init>", "()V", false);
if (mixinInfo != null) {
for (Class<?> mixinClass : mixinInfo.mixinClasses) {
try {
// Constructor con = mixinClass.getConstructor( trait.getDefinedClass() );
Class actualArg = getPossibleConstructor(mixinClass, trait.getDefinedClass());
mv.visitVarInsn(ALOAD, 0);
mv.visitTypeInsn(NEW, Type.getInternalName(mixinClass));
mv.visitInsn(DUP);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(mixinClass), "<init>", "(" + Type.getDescriptor(actualArg) + ")V", false);
mv.visitFieldInsn(PUTFIELD, internalProxy, getMixinName(mixinClass), Type.getDescriptor(mixinClass));
} catch (NoSuchMethodException nsme) {
mv.visitVarInsn(ALOAD, 0);
mv.visitTypeInsn(NEW, Type.getInternalName(mixinClass));
mv.visitInsn(DUP);
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(mixinClass), "<init>", "()V", false);
mv.visitFieldInsn(PUTFIELD, internalProxy, getMixinName(mixinClass), Type.getDescriptor(mixinClass));
}
}
}
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 1);
mv.visitFieldInsn(PUTFIELD, internalProxy, "object", descrCore);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 2);
mv.visitFieldInsn(PUTFIELD, internalProxy, "store", Type.getDescriptor(TripleStore.class));
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 3);
mv.visitMethodInsn(INVOKEVIRTUAL, internalProxy, "setTripleFactory", "(" + Type.getDescriptor(TripleFactory.class) + ")V", false);
mv.visitVarInsn(ALOAD, 0);
mv.visitVarInsn(ALOAD, 4);
mv.visitMethodInsn(INVOKEVIRTUAL, internalProxy, "setTypeCode", Type.getMethodDescriptor(Type.VOID_TYPE, Type.getType(BitSet.class)), false);
mv.visitVarInsn(ALOAD, 0);
mv.visitTypeInsn(NEW, internalWrapper);
mv.visitInsn(DUP);
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 2);
mv.visitVarInsn(ALOAD, 3);
mv.visitMethodInsn(INVOKESPECIAL, internalWrapper, "<init>", "(" + descrCore + Type.getDescriptor(TripleStore.class) + Type.getDescriptor(TripleFactory.class) + ")V", false);
mv.visitFieldInsn(PUTFIELD, internalProxy, "fields", Type.getDescriptor(Map.class));
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, internalCore, "_getDynamicProperties", "()" + Type.getDescriptor(Map.class), false);
Label l0 = new Label();
mv.visitJumpInsn(IFNONNULL, l0);
mv.visitVarInsn(ALOAD, 1);
mv.visitTypeInsn(NEW, Type.getInternalName(TripleBasedBean.class));
mv.visitInsn(DUP);
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 2);
mv.visitVarInsn(ALOAD, 3);
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(TripleBasedBean.class), "<init>", "(" + Type.getDescriptor(Object.class) + Type.getDescriptor(TripleStore.class) + Type.getDescriptor(TripleFactory.class) + ")V", false);
mv.visitMethodInsn(INVOKEVIRTUAL, internalCore, "_setDynamicProperties", "(" + Type.getDescriptor(Map.class) + ")V", false);
mv.visitLabel(l0);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, internalCore, "_getTraitMap", "()" + Type.getDescriptor(Map.class), false);
Label l1 = new Label();
mv.visitJumpInsn(IFNONNULL, l1);
mv.visitVarInsn(ALOAD, 1);
mv.visitTypeInsn(NEW, Type.getInternalName(TraitTypeMap.class));
mv.visitInsn(DUP);
mv.visitTypeInsn(NEW, Type.getInternalName(TripleBasedTypes.class));
mv.visitInsn(DUP);
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 2);
mv.visitVarInsn(ALOAD, 3);
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(TripleBasedTypes.class), "<init>", "(" + Type.getDescriptor(Object.class) + Type.getDescriptor(TripleStore.class) + Type.getDescriptor(TripleFactory.class) + ")V", false);
mv.visitMethodInsn(INVOKESPECIAL, Type.getInternalName(TraitTypeMap.class), "<init>", "(" + Type.getDescriptor(Map.class) + ")V", false);
mv.visitMethodInsn(INVOKEVIRTUAL, internalCore, "_setTraitMap", "(" + Type.getDescriptor(Map.class) + ")V", false);
mv.visitLabel(l1);
mv.visitVarInsn(ALOAD, 1);
mv.visitVarInsn(ALOAD, 5);
mv.visitMethodInsn(INVOKEVIRTUAL, internalCore, "_setBottomTypeCode", Type.getMethodDescriptor(Type.VOID_TYPE, Type.getType(BitSet.class)), false);
// core.addTrait
mv.visitVarInsn(ALOAD, 1);
mv.visitLdcInsn(trait.getName().endsWith(TraitFactory.SUFFIX) ? trait.getName().replace(TraitFactory.SUFFIX, "") : trait.getName());
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, internalCore, "addTrait", Type.getMethodDescriptor(Type.VOID_TYPE, Type.getType(String.class), Type.getType(Thing.class)), false);
}
use of org.mvel2.asm.Label in project drools by kiegroup.
the class TraitTripleProxyClassBuilderImpl method buildKeyedHashCode.
protected void buildKeyedHashCode(ClassVisitor cw, ClassDefinition classDef, String proxyType) {
MethodVisitor mv;
{
mv = cw.visitMethod(ACC_PUBLIC, "hashCode", "()I", null, null);
mv.visitCode();
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ISTORE, 1);
int x = 2;
int y = 2;
for (FieldDefinition field : classDef.getFieldsDefinitions()) {
if (field.isKey()) {
if (!BuildUtils.isPrimitive(field.getTypeName())) {
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
Label l8 = new Label();
mv.visitJumpInsn(IFNULL, l8);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitMethodInsn(INVOKEVIRTUAL, BuildUtils.getInternalType(field.getTypeName()), "hashCode", "()I", false);
Label l9 = new Label();
mv.visitJumpInsn(GOTO, l9);
mv.visitLabel(l8);
mv.visitInsn(ICONST_0);
mv.visitLabel(l9);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
} else if ("double".equals(field.getTypeName())) {
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitInsn(DCONST_0);
mv.visitInsn(DCMPL);
Label l2 = new Label();
mv.visitJumpInsn(IFEQ, l2);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(Double.class), "doubleToLongBits", "(D)J", false);
Label l3 = new Label();
mv.visitJumpInsn(GOTO, l3);
mv.visitLabel(l2);
mv.visitInsn(LCONST_0);
mv.visitLabel(l3);
mv.visitVarInsn(LSTORE, 2);
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(LLOAD, 2);
mv.visitVarInsn(LLOAD, 2);
mv.visitIntInsn(BIPUSH, 32);
mv.visitInsn(LUSHR);
mv.visitInsn(LXOR);
mv.visitInsn(L2I);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
x = Math.max(6, x);
y = Math.max(4, y);
} else if ("boolean".equals(field.getTypeName())) {
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
Label l4 = new Label();
mv.visitJumpInsn(IFEQ, l4);
mv.visitInsn(ICONST_1);
Label l5 = new Label();
mv.visitJumpInsn(GOTO, l5);
mv.visitLabel(l4);
mv.visitInsn(ICONST_0);
mv.visitLabel(l5);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
} else if ("float".equals(field.getTypeName())) {
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitInsn(FCONST_0);
mv.visitInsn(FCMPL);
Label l6 = new Label();
mv.visitJumpInsn(IFEQ, l6);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitMethodInsn(INVOKESTATIC, Type.getInternalName(Float.class), "floatToIntBits", "(F)I", false);
Label l7 = new Label();
mv.visitJumpInsn(GOTO, l7);
mv.visitLabel(l6);
mv.visitInsn(ICONST_0);
mv.visitLabel(l7);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
x = Math.max(3, x);
} else if ("long".equals(field.getTypeName())) {
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitIntInsn(BIPUSH, 32);
mv.visitInsn(LUSHR);
mv.visitInsn(LXOR);
mv.visitInsn(L2I);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
x = Math.max(6, x);
} else {
mv.visitIntInsn(BIPUSH, 31);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IMUL);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, proxyType, BuildUtils.getterName(field.getName(), field.getTypeName()), "()" + BuildUtils.getTypeDescriptor(field.getTypeName()), false);
mv.visitInsn(IADD);
mv.visitVarInsn(ISTORE, 1);
}
}
}
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IRETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
}
}
use of org.mvel2.asm.Label in project drools by kiegroup.
the class TraitTriplePropertyWrapperClassBuilderImpl method invokeGet.
protected void invokeGet(MethodVisitor mv, String wrapperName, ClassDefinition core, String fieldName, FieldDefinition field) {
mv.visitLdcInsn(fieldName);
mv.visitVarInsn(ALOAD, 1);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "equals", "(" + Type.getDescriptor(Object.class) + ")Z", false);
Label l0 = new Label();
mv.visitJumpInsn(IFEQ, l0);
TraitFactory.invokeExtractor(mv, wrapperName, trait, core, field);
if (BuildUtils.isPrimitive(field.getTypeName())) {
TraitFactory.valueOf(mv, field.getTypeName());
}
mv.visitInsn(ARETURN);
mv.visitLabel(l0);
}
Aggregations