List of usage examples for org.objectweb.asm.commons GeneratorAdapter pop2
public void pop2()
From source file:io.datakernel.codegen.ExpressionSequence.java
License:Apache License
@Override public Type load(Context ctx) { GeneratorAdapter g = ctx.getGeneratorAdapter(); Type type = VOID_TYPE;/*from w w w. j av a 2s . c om*/ for (int i = 0; i < expressions.size(); i++) { Expression expression = expressions.get(i); type = expression.load(ctx); if (i != expressions.size() - 1) { if (type.getSize() == 1) g.pop(); if (type.getSize() == 2) g.pop2(); } } return type; }
From source file:io.datakernel.codegen.Utils.java
License:Apache License
public static void cast(Context ctx, Type type, Type targetType) { GeneratorAdapter g = ctx.getGeneratorAdapter(); if (type.equals(targetType)) { return;//from w w w .j a v a 2 s . c om } if (targetType == Type.VOID_TYPE) { if (type.getSize() == 1) g.pop(); if (type.getSize() == 2) g.pop2(); return; } if (type == Type.VOID_TYPE) { throw new RuntimeException(format("Can't cast VOID_TYPE to %s. %s", targetType.getClassName(), exceptionInGeneratedClass(ctx))); } if (type.equals(ctx.getThisType())) { final Class<?> javaType = getJavaType(ctx.getClassLoader(), targetType); for (Class<?> aClass : ctx.getOtherClasses()) { if (javaType.isAssignableFrom(aClass)) { return; } } throw new RuntimeException(format("Can't cast self %s to %s, %s", type.getClassName(), targetType.getClassName(), exceptionInGeneratedClass(ctx))); } if (!type.equals(ctx.getThisType()) && !targetType.equals(ctx.getThisType()) && getJavaType(ctx.getClassLoader(), targetType) .isAssignableFrom(getJavaType(ctx.getClassLoader(), type))) { return; } if (targetType.equals(getType(Object.class)) && isPrimitiveType(type)) { g.box(type); g.cast(wrap(type), getType(Object.class)); return; } if ((isPrimitiveType(type) || isWrapperType(type)) && (isPrimitiveType(targetType) || isWrapperType(targetType))) { Type targetTypePrimitive = isPrimitiveType(targetType) ? targetType : unwrap(targetType); if (isWrapperType(type)) { g.invokeVirtual(type, primitiveValueMethod(targetType)); return; } assert isPrimitiveType(type); if (type != targetTypePrimitive) { g.cast(type, targetTypePrimitive); } if (isWrapperType(targetType)) { g.valueOf(targetTypePrimitive); } return; } g.checkCast(targetType); }
From source file:io.datakernel.codegen.VarField.java
License:Apache License
public static void setField(Context ctx, Type ownerType, String field, Type valueType, boolean isStatic) { GeneratorAdapter g = ctx.getGeneratorAdapter(); Class<?> valueClass = getJavaType(ctx.getClassLoader(), valueType); if (ctx.getThisType().equals(ownerType)) { Map<String, Class<?>> fieldNameToClass = (isStatic) ? ctx.getStaticFields() : ctx.getThisFields(); Class<?> fieldClass = fieldNameToClass.get(field); if (fieldClass == null) { throw new RuntimeException(format("No field \"%s\" in generated class %s. %s", field, ctx.getThisType().getClassName(), exceptionInGeneratedClass(ctx))); }//from w w w .j a va 2s .com Type fieldType = getType(fieldClass); cast(ctx, valueType, fieldType); if (isStatic) g.putStatic(ownerType, field, fieldType); else g.putField(ownerType, field, fieldType); return; } Class<?> argumentClass = getJavaType(ctx.getClassLoader(), ownerType); try { java.lang.reflect.Field javaField = argumentClass.getField(field); if (Modifier.isPublic(javaField.getModifiers()) && Modifier.isStatic(javaField.getModifiers()) == isStatic) { Type fieldType = getType(javaField.getType()); cast(ctx, valueType, fieldType); if (Modifier.isStatic(javaField.getModifiers())) g.putStatic(ownerType, field, fieldType); else g.putField(ownerType, field, fieldType); return; } } catch (NoSuchFieldException ignored) { } java.lang.reflect.Method javaSetter = tryFindSetter(argumentClass, field, valueClass); if (javaSetter == null && Primitives.isWrapperType(valueClass)) { javaSetter = tryFindSetter(argumentClass, field, Primitives.unwrap(valueClass)); } if (javaSetter == null && valueClass.isPrimitive()) { javaSetter = tryFindSetter(argumentClass, field, Primitives.wrap(valueClass)); } if (javaSetter == null) { javaSetter = tryFindSetter(argumentClass, field); } if (javaSetter != null) { Type fieldType = getType(javaSetter.getParameterTypes()[0]); cast(ctx, valueType, fieldType); invokeVirtualOrInterface(g, argumentClass, getMethod(javaSetter)); Type returnType = getType(javaSetter.getReturnType()); if (returnType.getSize() == 1) { g.pop(); } else if (returnType.getSize() == 2) { g.pop2(); } return; } throw new RuntimeException(format("No public field or setter for class %s for field \"%s\". %s ", ownerType.getClassName(), field, exceptionInGeneratedClass(ctx))); }
From source file:lucee.transformer.bytecode.util.ASMUtil.java
License:Open Source License
/** * @param adapter/*from ww w. ja v a2 s .co m*/ * @param expr * @param mode */ public static void pop(GeneratorAdapter adapter, Expression expr, int mode) { if (mode == Expression.MODE_VALUE && (expr instanceof ExprDouble)) adapter.pop2(); else adapter.pop(); }
From source file:lucee.transformer.bytecode.util.ASMUtil.java
License:Open Source License
public static void pop(GeneratorAdapter adapter, Type type) { if (type.equals(Types.DOUBLE_VALUE)) adapter.pop2(); else if (type.equals(Types.VOID)) ;//from w w w . j a v a 2 s .co m else adapter.pop(); }