public void body(MethodVisitor mv) { mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARETURN); } }).addMethod(ACC_PUBLIC, "replaceDeclaration", generator.methodDescr(null, Declaration.class, Declaration.class)
protected void initFields( MethodVisitor mv, String internalProxy ) { mv.visitVarInsn( ALOAD, 0 ); mv.visitVarInsn( ILOAD, 6 ); mv.visitMethodInsn( INVOKESPECIAL, internalProxy, "synchFields", Type.getMethodDescriptor( Type.VOID_TYPE, new Type[] { Type.BOOLEAN_TYPE } ) ); }
protected void buildSystemHashCode(ClassWriter cw) { { MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "hashCode", "()I", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "identityHashCode", "(Ljava/lang/Object;)I"); mv.visitInsn(IRETURN); mv.visitMaxs( 0, 0 ); mv.visitEnd(); } }
protected void invokeContainsKey( MethodVisitor mv, String fieldName ) { mv.visitLdcInsn( fieldName ); mv.visitVarInsn( ALOAD, 1 ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( String.class ), "equals", "(" + Type.getDescriptor( Object.class ) + ")Z" ); Label l0 = new Label(); mv.visitJumpInsn( IFEQ, l0 ); mv.visitInsn( ICONST_1 ); mv.visitInsn( IRETURN ); mv.visitLabel( l0 ); }
private Object addSubstatement(ExecutableStatement stmt) { if (stmt instanceof ExecutableAccessor) { ExecutableAccessor ea = (ExecutableAccessor) stmt; if (ea.getNode().isIdentifier() && !ea.getNode().isDeepProperty()) { loadVariableByName(ea.getNode().getName()); return null; } } compiledInputs.add(stmt); assert debug("ALOAD 0"); mv.visitVarInsn(ALOAD, 0); assert debug("GETFIELD p" + (compiledInputs.size() - 1)); mv.visitFieldInsn(GETFIELD, className, "p" + (compiledInputs.size() - 1), "L" + NAMESPACE + "compiler/ExecutableStatement;"); assert debug("ALOAD 2"); mv.visitVarInsn(ALOAD, 2); assert debug("ALOAD 3"); mv.visitVarInsn(ALOAD, 3); assert debug("INVOKEINTERFACE ExecutableStatement.getValue"); mv.visitMethodInsn(INVOKEINTERFACE, getInternalName(ExecutableStatement.class), "getValue", "(Ljava/lang/Object;L" + NAMESPACE + "integration/VariableResolverFactory;)Ljava/lang/Object;"); return null; }
private void writeOutNullHandler(Member member, int type) { mv.visitInsn(DUP); mv.visitInsn(POP); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKEINTERFACE, NAMESPACE + "integration/PropertyHandler", "getProperty", "(Ljava/lang/String;Ljava/lang/Object;L" + NAMESPACE + "integration/VariableResolverFactory;)Ljava/lang/Object;");
protected void buildSize( ClassVisitor cw, String wrapperName, String coreName, ClassDefinition trait, ClassDefinition core, BitSet mask ) { MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "size", "()I", null, null); mv.visitCode(); mv.visitVarInsn( ALOAD, 0 ); mv.visitMethodInsn( INVOKESPECIAL, Type.getInternalName( TripleBasedStruct.class ), "size", "()I" ); int n = core.getFieldsDefinitions().size(); for ( int j = 0; j < n; j++ ) { mv.visitInsn( ICONST_1 ); mv.visitInsn( IADD ); } mv.visitInsn(IRETURN); // mv.visitMaxs( core.getFieldsDefinitions().size() > 0 ? 2 : 1, // 1 ); mv.visitMaxs( 0, 0 ); mv.visitEnd(); }
protected void invokeContainsKey( MethodVisitor mv, String fieldName ) { mv.visitLdcInsn( fieldName ); mv.visitVarInsn( ALOAD, 1 ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( String.class ), "equals", "(" + Type.getDescriptor( Object.class ) + ")Z" ); Label l0 = new Label(); mv.visitJumpInsn( IFEQ, l0 ); mv.visitInsn( ICONST_1 ); mv.visitInsn( IRETURN ); mv.visitLabel( l0 ); }
private Object addSubstatement(ExecutableStatement stmt) { if (stmt instanceof ExecutableAccessor) { ExecutableAccessor ea = (ExecutableAccessor) stmt; if (ea.getNode().isIdentifier() && !ea.getNode().isDeepProperty()) { loadVariableByName(ea.getNode().getName()); return null; } } compiledInputs.add(stmt); assert debug("ALOAD 0"); mv.visitVarInsn(ALOAD, 0); assert debug("GETFIELD p" + (compiledInputs.size() - 1)); mv.visitFieldInsn(GETFIELD, className, "p" + (compiledInputs.size() - 1), "L" + NAMESPACE + "compiler/ExecutableStatement;"); assert debug("ALOAD 2"); mv.visitVarInsn(ALOAD, 2); assert debug("ALOAD 3"); mv.visitVarInsn(ALOAD, 3); assert debug("INVOKEINTERFACE ExecutableStatement.getValue"); mv.visitMethodInsn(INVOKEINTERFACE, getInternalName(ExecutableStatement.class), "getValue", "(Ljava/lang/Object;L" + NAMESPACE + "integration/VariableResolverFactory;)Ljava/lang/Object;"); return null; }
private void loadVariableByIndex(int pos) { assert debug("ALOAD 3"); mv.visitVarInsn(ALOAD, 3); assert debug("PUSH IDX VAL =" + pos); intPush(pos); assert debug("INVOKEINTERFACE " + NAMESPACE + "integration/VariableResolverFactory.getIndexedVariableResolver"); mv.visitMethodInsn(INVOKEINTERFACE, "" + NAMESPACE + "integration/VariableResolverFactory", "getIndexedVariableResolver", "(I)L" + NAMESPACE + "integration/VariableResolver;"); assert debug("INVOKEINTERFACE " + NAMESPACE + "integration/VariableResolver.getValue"); mv.visitMethodInsn(INVOKEINTERFACE, "" + NAMESPACE + "integration/VariableResolver", "getValue", "()Ljava/lang/Object;"); returnType = Object.class; }
public void body(MethodVisitor mv) { mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ARETURN); } }).addMethod(ACC_PUBLIC, "replaceDeclaration", generator.methodDescr(null, Declaration.class, Declaration.class)
protected void buildCommonMethods( ClassWriter cw, String proxy ) { MethodVisitor mv; { mv = cw.visitMethod( ACC_PUBLIC, "toString", "()" + Type.getDescriptor( String.class ), null, null ); mv.visitCode(); mv.visitTypeInsn( NEW, Type.getInternalName( StringBuilder.class ) ); mv.visitInsn( DUP ); mv.visitMethodInsn( INVOKESPECIAL, Type.getInternalName( StringBuilder.class ), "<init>", "()V" ); mv.visitLdcInsn( "(@" + proxy + ") : " ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( StringBuilder.class ), "append", "(" + Type.getDescriptor( String.class ) + ")" + Type.getDescriptor( StringBuilder.class ) ); mv.visitVarInsn( ALOAD, 0 ); mv.visitMethodInsn( INVOKEVIRTUAL, BuildUtils.getInternalType( proxy ), "getFields", "()" + Type.getDescriptor( Map.class ) ); mv.visitMethodInsn( INVOKEINTERFACE, Type.getInternalName( Map.class ) , "entrySet", "()" + Type.getDescriptor( Set.class ) ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( Object.class ), "toString", "()" + Type.getDescriptor( String.class )); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( StringBuilder.class ), "append", "(" + Type.getDescriptor( String.class ) + ")" + Type.getDescriptor( StringBuilder.class ) ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( StringBuilder.class ), "toString", "()" + Type.getDescriptor( String.class )); mv.visitInsn( ARETURN ); // mv.visitMaxs( 2, 1 ); mv.visitMaxs( 0, 0 ); mv.visitEnd(); } }
private void invokeRemove( MethodVisitor mv, String wrapperName, ClassDefinition core, String fieldName, FieldDefinition field ) { mv.visitLdcInsn( fieldName ); mv.visitVarInsn( ALOAD, 1 ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName(String.class), "equals", "(" + Type.getDescriptor( Object.class ) + ")Z" ); Label l1 = new Label(); mv.visitJumpInsn( IFEQ, l1 ); TraitFactory.invokeExtractor( mv, wrapperName, trait, core, field ); if ( BuildUtils.isPrimitive( field.getTypeName() ) ) { TraitFactory.valueOf( mv, field.getTypeName() ); } mv.visitVarInsn( ASTORE, 2 ); TraitFactory.invokeInjector( mv, wrapperName, trait, core, field, true, 1 ); mv.visitVarInsn( ALOAD, 2 ); mv.visitInsn( ARETURN ); mv.visitLabel( l1 ); }
private Object addSubstatement(ExecutableStatement stmt) { if (stmt instanceof ExecutableAccessor) { ExecutableAccessor ea = (ExecutableAccessor) stmt; if (ea.getNode().isIdentifier() && !ea.getNode().isDeepProperty()) { loadVariableByName(ea.getNode().getName()); return null; } } compiledInputs.add(stmt); assert debug("ALOAD 0"); mv.visitVarInsn(ALOAD, 0); assert debug("GETFIELD p" + (compiledInputs.size() - 1)); mv.visitFieldInsn(GETFIELD, className, "p" + (compiledInputs.size() - 1), "L" + NAMESPACE + "compiler/ExecutableStatement;"); assert debug("ALOAD 2"); mv.visitVarInsn(ALOAD, 2); assert debug("ALOAD 3"); mv.visitVarInsn(ALOAD, 3); assert debug("INVOKEINTERFACE ExecutableStatement.getValue"); mv.visitMethodInsn(INVOKEINTERFACE, getInternalName(ExecutableStatement.class), "getValue", "(Ljava/lang/Object;L" + NAMESPACE + "integration/VariableResolverFactory;)Ljava/lang/Object;"); return null; }
public void body(MethodVisitor mv) { mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, getClassGenerator().getSuperClassDescriptor(), "<init>", "()V"); // super() body.writeBody(getClassGenerator(), mv); } };
protected void traverseTuplesUntilDeclarationWithOr(int declarIndex, int declarReg, int tupleReg, int declarOffsetReg) { mv.visitVarInsn(ALOAD, declarReg); push(declarIndex); mv.visitInsn(AALOAD); // declarations[i] invokeVirtual(Declaration.class, "getPattern", Pattern.class); invokeVirtual(Pattern.class, "getOffset", Integer.TYPE); // declarations[i].getPattern().getOffset() mv.visitVarInsn(ISTORE, declarOffsetReg); // declarations[i].getPattern().getOffset() // while (tuple.getIndex() > declaration[i].getPattern().getOffset()) tuple = tuple.getParent() Label whileStart = new Label(); Label whileExit = new Label(); mv.visitLabel(whileStart); mv.visitVarInsn(ALOAD, tupleReg); invokeInterface(LeftTuple.class, "getIndex", Integer.TYPE); // tuple.getIndex() mv.visitVarInsn(ILOAD, declarOffsetReg); // declarations[i].getPattern().getOffset() mv.visitJumpInsn(IF_ICMPLE, whileExit); // if tuple.getIndex() <= declarations[i].getPattern().getOffset() jump to whileExit mv.visitVarInsn(ALOAD, tupleReg); invokeInterface(LeftTuple.class, "getParent", LeftTuple.class); mv.visitVarInsn(ASTORE, tupleReg); // tuple = tuple.getParent() mv.visitJumpInsn(GOTO, whileStart); mv.visitLabel(whileExit); } }
protected void buildIsEmpty( ClassVisitor cw, String wrapperName, String coreName, ClassDefinition trait, ClassDefinition core, BitSet mask ) { boolean hasHardFields = core.getFieldsDefinitions().size() > 0; MethodVisitor mv = cw.visitMethod( ACC_PUBLIC, "isEmpty", "()Z", null, null ); mv.visitCode(); if ( ! hasHardFields ) { mv.visitVarInsn( ALOAD, 0 ); mv.visitMethodInsn( INVOKESPECIAL, Type.getInternalName( TripleBasedStruct.class ), "isEmpty", "()Z" ); } else { mv.visitInsn( ICONST_0 ); } mv.visitInsn( IRETURN ); // mv.visitMaxs( 1, 1 ); mv.visitMaxs( 0, 0 ); mv.visitEnd(); }
protected void invokePut( MethodVisitor mv, String wrapperName, ClassDefinition core, String fieldName, FieldDefinition field ) { mv.visitLdcInsn( fieldName ); mv.visitVarInsn( ALOAD, 1 ); mv.visitMethodInsn( INVOKEVIRTUAL, Type.getInternalName( String.class ), "equals", "(" + Type.getDescriptor( Object.class ) + ")Z" ); Label l1 = new Label(); mv.visitJumpInsn( IFEQ, l1 ); mv.visitVarInsn( ALOAD, 2 ); if ( BuildUtils.isPrimitive( field.getTypeName() ) ) { TraitFactory.primitiveValue( mv, field.getTypeName() ); mv.visitVarInsn( BuildUtils.storeType( field.getTypeName() ), 3 ); TraitFactory.invokeInjector( mv, wrapperName, trait, core, field, false, 3 ); } else { TraitFactory.invokeInjector( mv, wrapperName, trait, core, field, false, 2 ); } mv.visitVarInsn( ALOAD, 2 ); mv.visitInsn( ARETURN ); mv.visitLabel( l1 ); }
protected boolean defaultConstructorStart( MethodVisitor mv, ClassDefinition classDef ) { // Building default constructor mv.visitVarInsn( Opcodes.ALOAD, 0 ); String sup = ""; try { sup = Type.getInternalName(Class.forName(classDef.getSuperClass())); } catch (ClassNotFoundException e) { sup = BuildUtils.getInternalType( classDef.getSuperClass() ); } mv.visitMethodInsn( Opcodes.INVOKESPECIAL, sup, "<init>", Type.getMethodDescriptor( Type.VOID_TYPE, new Type[]{} ) ); boolean hasObjects = false; for (FieldDefinition field : classDef.getFieldsDefinitions()) { hasObjects = hasObjects || initFieldWithDefaultValue( mv, classDef, field ); } if ( classDef.isTraitable() ) { initializeDynamicTypeStructures( mv, classDef ); } return hasObjects; }
private void loadVariableByName(String name) { assert debug("ALOAD 3"); mv.visitVarInsn(ALOAD, 3); assert debug("LDC \"" + name + "\""); mv.visitLdcInsn(name); assert debug("INVOKEINTERFACE " + NAMESPACE + "integration/VariableResolverFactory.getVariableResolver"); mv.visitMethodInsn(INVOKEINTERFACE, "" + NAMESPACE + "integration/VariableResolverFactory", "getVariableResolver", "(Ljava/lang/String;)L" + NAMESPACE + "integration/VariableResolver;"); assert debug("INVOKEINTERFACE " + NAMESPACE + "integration/VariableResolver.getValue"); mv.visitMethodInsn(INVOKEINTERFACE, "" + NAMESPACE + "integration/VariableResolver", "getValue", "()Ljava/lang/Object;"); returnType = Object.class; }