List of usage examples for org.objectweb.asm Opcodes ALOAD
int ALOAD
To view the source code for org.objectweb.asm Opcodes ALOAD.
Click Source Link
From source file:com.asakusafw.dag.compiler.builtin.SplitOperatorGenerator.java
License:Apache License
private static ClassData generateClass(Context context, UserOperator operator, ClassDescription target) { OperatorInput input = operator.getInput(Split.ID_INPUT); OperatorOutput left = operator.getOutput(Split.ID_OUTPUT_LEFT); OperatorOutput right = operator.getOutput(Split.ID_OUTPUT_RIGHT); List<PropertyMapping> mappings = Invariants .safe(() -> JoinedModelUtil.getPropertyMappings(context.getClassLoader(), operator)); ClassWriter writer = newWriter(target, Object.class, Result.class); FieldRef leftField = defineField(writer, target, "leftBuffer", typeOf(left.getDataType())); FieldRef rightField = defineField(writer, target, "rightBuffer", typeOf(right.getDataType())); Map<OperatorOutput, FieldRef> deps = defineDependenciesConstructor(context, operator.getOutputs(), target, writer, method -> {// w ww . ja v a2 s. c o m method.visitVarInsn(Opcodes.ALOAD, 0); getNew(method, left.getDataType()); putField(method, leftField); method.visitVarInsn(Opcodes.ALOAD, 0); getNew(method, right.getDataType()); putField(method, rightField); }); defineResultAdd(writer, method -> { LocalVarRef inputVar = cast(method, 1, input.getDataType()); method.visitVarInsn(Opcodes.ALOAD, 0); getField(method, leftField); LocalVarRef leftVar = putLocalVar(method, Type.OBJECT, 2); method.visitVarInsn(Opcodes.ALOAD, 0); getField(method, rightField); LocalVarRef rightVar = putLocalVar(method, Type.OBJECT, 3); Map<OperatorInput, ValueRef> inputs = new HashMap<>(); Map<OperatorOutput, ValueRef> outputs = new HashMap<>(); inputs.put(input, inputVar); outputs.put(left, leftVar); outputs.put(right, rightVar); mapping(method, context.getDataModelLoader(), mappings, inputs, outputs); method.visitVarInsn(Opcodes.ALOAD, 0); getField(method, deps.get(left)); leftVar.load(method); invokeResultAdd(method); method.visitVarInsn(Opcodes.ALOAD, 0); getField(method, deps.get(right)); rightVar.load(method); invokeResultAdd(method); }); return new ClassData(target, writer::toByteArray); }
From source file:com.asakusafw.dag.compiler.builtin.SummarizeOperatorGenerator.java
License:Apache License
private static ClassData generateClass(Context context, UserOperator operator, ClassDescription target) { ClassDescription mapperClass = generateMapperClass(context, operator, target); ClassDescription combinerClass = generateCombinerClass(context, operator, target); ClassWriter writer = newWriter(target, CombineResult.class); writer.visitInnerClass(mapperClass.getInternalName(), target.getInternalName(), mapperClass.getSimpleName(), Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC); writer.visitInnerClass(combinerClass.getInternalName(), target.getInternalName(), combinerClass.getSimpleName(), Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC); OperatorOutput output = operator.getOutput(Summarize.ID_OUTPUT); defineDependenciesConstructor(context, operator.getOutputs(), target, writer, method -> { method.visitVarInsn(Opcodes.ALOAD, 0); getNew(method, combinerClass);/* www . j a v a2s . com*/ getNew(method, output.getDataType()); method.visitVarInsn(Opcodes.ALOAD, 1); method.visitMethodInsn(Opcodes.INVOKESPECIAL, typeOf(CombineResult.class).getInternalName(), CONSTRUCTOR_NAME, Type.getMethodDescriptor(Type.VOID_TYPE, typeOf(ObjectCombiner.class), typeOf(DataModel.class), typeOf(Result.class)), false); }, Lang.discard()); return new ClassData(target, writer::toByteArray); }
From source file:com.asakusafw.dag.compiler.builtin.SummarizeOperatorGenerator.java
License:Apache License
static ClassDescription generateMapperClass(Context context, UserOperator operator, ClassDescription outer) { ClassDescription target = getMapperName(outer); OperatorInput input = operator.getInput(Summarize.ID_INPUT); OperatorOutput output = operator.getOutput(Summarize.ID_OUTPUT); ClassWriter writer = newWriter(target, Object.class, Function.class); writer.visitOuterClass(outer.getInternalName(), target.getSimpleName(), null); FieldRef buffer = defineField(writer, target, "buffer", typeOf(output.getDataType())); defineEmptyConstructor(writer, Object.class, method -> { method.visitVarInsn(Opcodes.ALOAD, 0); getNew(method, output.getDataType()); putField(method, buffer);/*from ww w . j ava2 s .co m*/ }); MethodVisitor method = writer.visitMethod(Opcodes.ACC_PUBLIC, "apply", Type.getMethodDescriptor(typeOf(Object.class), typeOf(Object.class)), null, null); LocalVarRef inputVar = cast(method, 1, input.getDataType()); buffer.load(method); LocalVarRef outputVar = putLocalVar(method, Type.OBJECT, 2); outputVar.load(method); resetDataModel(method, output.getDataType()); List<PropertyFolding> foldings = Invariants .safe(() -> SummarizedModelUtil.getPropertyFoldings(context.getClassLoader(), operator)); DataModelReference inputModel = context.getDataModelLoader().load(input.getDataType()); DataModelReference outputModel = context.getDataModelLoader().load(output.getDataType()); Set<PropertyReference> nullChecked = new HashSet<>(); for (PropertyFolding folding : foldings) { PropertyMapping mapping = folding.getMapping(); Aggregation aggregation = folding.getAggregation(); PropertyReference src = Invariants.requireNonNull(inputModel.findProperty(mapping.getSourceProperty())); PropertyReference dst = Invariants .requireNonNull(outputModel.findProperty(mapping.getDestinationProperty())); mapping(method, target, aggregation, src, dst, inputVar, outputVar, nullChecked); } outputVar.load(method); method.visitInsn(Opcodes.ARETURN); method.visitMaxs(0, 0); method.visitEnd(); if (nullChecked.isEmpty() == false) { defineCheckNull(writer, operator, inputModel); } return context.addClassFile(new ClassData(target, writer::toByteArray)); }
From source file:com.asakusafw.dag.compiler.builtin.SummarizeOperatorGenerator.java
License:Apache License
private static void defineCheckNull(ClassWriter writer, UserOperator operator, DataModelReference inputType) { MethodVisitor method = writer.visitMethod(Opcodes.ACC_PRIVATE | Opcodes.ACC_STATIC, METHOD_CHECK_NON_NULL, Type.getMethodDescriptor(Type.VOID_TYPE, typeOf(ValueOption.class), typeOf(Object.class), typeOf(String.class)), null, null);//from w ww . j a v a 2s .c o m LocalVarRef optionVar = new LocalVarRef(Opcodes.ALOAD, 0); LocalVarRef objectVar = new LocalVarRef(Opcodes.ALOAD, 1); LocalVarRef nameVar = new LocalVarRef(Opcodes.ALOAD, 2); // if (option.isNull()) { Label ifEnd = new Label(); optionVar.load(method); getNullity(method, VALUE_DESC); method.visitJumpInsn(Opcodes.IFEQ, ifEnd); // new NullPointerException ... method.visitTypeInsn(Opcodes.NEW, typeOf(NullPointerException.class).getInternalName()); method.visitInsn(Opcodes.DUP); // str = String.format("<type>.%s must not be null (in <operator>): %s", name, object) getConst(method, String.format("%s.%%s must not be null (in %s.%s): %%s", inputType.getDeclaration().getSimpleName(), operator.getMethod().getDeclaringClass().getSimpleName(), operator.getMethod().getName())); getArray(method, typeOf(Object.class), new LocalVarRef[] { nameVar, objectVar }); method.visitMethodInsn(Opcodes.INVOKESTATIC, typeOf(String.class).getInternalName(), "format", Type.getMethodDescriptor(typeOf(String.class), typeOf(String.class), typeOf(Object[].class)), false); // throw new NullPointerException(str) method.visitMethodInsn(Opcodes.INVOKESPECIAL, typeOf(NullPointerException.class).getInternalName(), CONSTRUCTOR_NAME, Type.getMethodDescriptor(Type.VOID_TYPE, typeOf(String.class)), false); method.visitInsn(Opcodes.ATHROW); method.visitLabel(ifEnd); // } method.visitInsn(Opcodes.RETURN); method.visitMaxs(0, 0); method.visitEnd(); }
From source file:com.asakusafw.dag.compiler.builtin.UpdateOperatorGenerator.java
License:Apache License
private static ClassData generateClass(Context context, UserOperator operator, ClassDescription target) { OperatorInput input = operator.getInput(Update.ID_INPUT); OperatorOutput output = operator.getOutput(Update.ID_OUTPUT); ClassWriter writer = newWriter(target, Object.class, Result.class); FieldRef impl = defineOperatorField(writer, operator, target); Map<OperatorProperty, FieldRef> map = defineConstructor(context, operator, target, writer, method -> { setOperatorField(method, operator, impl); });//w w w . j a v a 2 s.c o m defineResultAdd(writer, method -> { cast(method, 1, input.getDataType()); List<ValueRef> arguments = new ArrayList<>(); arguments.add(impl); arguments.add(new LocalVarRef(Opcodes.ALOAD, 1)); appendSecondaryInputs(arguments::add, operator, map::get); appendArguments(arguments::add, operator, map::get); invoke(method, context, operator, arguments); method.visitVarInsn(Opcodes.ALOAD, 0); getField(method, map.get(output)); method.visitVarInsn(Opcodes.ALOAD, 1); invokeResultAdd(method); }); return new ClassData(target, writer::toByteArray); }
From source file:com.asakusafw.dag.compiler.builtin.Util.java
License:Apache License
static void setOperatorField(MethodVisitor method, UserOperator operator, FieldRef field) { method.visitVarInsn(Opcodes.ALOAD, 0); AsmUtil.getNew(method, operator.getImplementationClass()); AsmUtil.putField(method, field);/* ww w. j ava 2 s . c o m*/ }
From source file:com.asakusafw.dag.compiler.builtin.Util.java
License:Apache License
static Map<OperatorProperty, FieldRef> defineConstructor(Context context, Operator operator, ClassDescription aClass, ClassVisitor writer, Consumer<MethodVisitor> body) { return defineConstructor(context, operator, aClass, writer, method -> { method.visitVarInsn(Opcodes.ALOAD, 0); method.visitMethodInsn(Opcodes.INVOKESPECIAL, AsmUtil.typeOf(Object.class).getInternalName(), CONSTRUCTOR_NAME, Type.getMethodDescriptor(Type.VOID_TYPE), false); }, body);//from w ww. java2 s .c om }
From source file:com.asakusafw.dag.compiler.builtin.Util.java
License:Apache License
static void getGroupList(MethodVisitor method, Context context, OperatorInput input) { method.visitVarInsn(Opcodes.ALOAD, 1); getInt(method, context.getGroupIndex(input)); method.visitMethodInsn(Opcodes.INVOKESTATIC, AsmUtil.typeOf(CoGroupOperationUtil.class).getInternalName(), "getList", Type.getMethodDescriptor(AsmUtil.typeOf(List.class), AsmUtil.typeOf(CoGroupOperation.Input.class), Type.INT_TYPE), false);//from w w w . j av a2 s.c om }
From source file:com.asakusafw.dag.compiler.builtin.Util.java
License:Apache License
static void getGroupIterable(MethodVisitor method, Context context, OperatorInput input) { method.visitVarInsn(Opcodes.ALOAD, 1); getInt(method, context.getGroupIndex(input)); method.visitMethodInsn(Opcodes.INVOKESTATIC, AsmUtil.typeOf(CoGroupOperationUtil.class).getInternalName(), "getIterable", Type.getMethodDescriptor(AsmUtil.typeOf(Iterable.class), AsmUtil.typeOf(CoGroupOperation.Input.class), Type.INT_TYPE), false);//from ww w . ja v a 2s . com }
From source file:com.asakusafw.dag.compiler.builtin.Util.java
License:Apache License
static void defineBuildKey(ClassGeneratorContext context, ClassWriter writer, TypeDescription dataType, Group group) {/*from ww w . j a va2s. c o m*/ DataModelReference type = context.getDataModelLoader().load(dataType); List<PropertyReference> props = group.getGrouping().stream() .map(p -> Invariants.requireNonNull(type.findProperty(p))).collect(Collectors.toList()); MethodVisitor v = writer.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL, "buildKey", Type.getMethodDescriptor(Type.VOID_TYPE, typeOf(KeyBuffer.class), typeOf(Object.class)), null, null); LocalVarRef key = new LocalVarRef(Opcodes.ALOAD, 1); LocalVarRef object = cast(v, 2, dataType); for (PropertyReference p : props) { key.load(v); object.load(v); getOption(v, p); v.visitMethodInsn(Opcodes.INVOKEINTERFACE, typeOf(KeyBuffer.class).getInternalName(), "append", Type.getMethodDescriptor(typeOf(KeyBuffer.class), typeOf(Object.class)), true); v.visitInsn(Opcodes.POP); } v.visitInsn(Opcodes.RETURN); v.visitMaxs(0, 0); v.visitEnd(); }