hotspot/test/runtime/SelectionResolution/classes/selectionresolution/Method.java
author coleenp
Fri, 27 May 2016 10:52:39 -0400
changeset 38719 133bf85c3f36
parent 37196 f3f7367e8c53
child 41705 332239c052cc
permissions -rw-r--r--
8145148: InterfaceMethod CP entry pointing to a class should cause ICCE Summary: pass tag in LinkInfo and check that resolved method type matches tag, fix tests. Reviewed-by: sspitsyn, minqi
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     1
/*
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     2
 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     4
 *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     7
 * published by the Free Software Foundation.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     8
 *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    13
 * accompanied this code).
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    14
 *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    18
 *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    21
 * questions.
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    22
 *
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    23
 */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    24
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    25
package selectionresolution;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    26
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    27
import jdk.internal.org.objectweb.asm.ClassVisitor;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    28
import jdk.internal.org.objectweb.asm.Handle;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    29
import jdk.internal.org.objectweb.asm.MethodVisitor;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    30
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    31
import java.lang.invoke.CallSite;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    32
import java.lang.invoke.MethodHandles;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    33
import java.lang.invoke.MethodType;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    34
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    35
import static jdk.internal.org.objectweb.asm.Opcodes.ACC_PUBLIC;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    36
import static jdk.internal.org.objectweb.asm.Opcodes.ACC_STATIC;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    37
import static jdk.internal.org.objectweb.asm.Opcodes.ALOAD;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    38
import static jdk.internal.org.objectweb.asm.Opcodes.ARETURN;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    39
import static jdk.internal.org.objectweb.asm.Opcodes.DUP;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    40
import static jdk.internal.org.objectweb.asm.Opcodes.POP;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    41
import static jdk.internal.org.objectweb.asm.Opcodes.NEW;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    42
import static jdk.internal.org.objectweb.asm.Opcodes.SWAP;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    43
import static jdk.internal.org.objectweb.asm.Opcodes.ASTORE;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    44
import static jdk.internal.org.objectweb.asm.Opcodes.RETURN;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    45
import static jdk.internal.org.objectweb.asm.Opcodes.INVOKESPECIAL;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    46
import static jdk.internal.org.objectweb.asm.Opcodes.INVOKESTATIC;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    47
import static jdk.internal.org.objectweb.asm.Opcodes.INVOKEINTERFACE;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    48
import static jdk.internal.org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    49
import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKESPECIAL;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    50
import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKESTATIC;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    51
import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKEINTERFACE;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    52
import static jdk.internal.org.objectweb.asm.Opcodes.H_INVOKEVIRTUAL;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    53
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    54
class Method {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    55
    public static final String defaultMethodName        = "m";
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    56
    public static final String defaultMethodDescriptor  = "()Ljava/lang/Integer;";
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    57
    public static final String methodDescriptorTemplate = "(L%s;)Ljava/lang/Integer;";
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    58
    private final ClassConstruct ownerClass;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    59
    private final String ownerClassName;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    60
    private final ClassVisitor cv;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    61
    private final MethodVisitor mv;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    62
    private final ClassBuilder.ExecutionMode execMode;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    63
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    64
    public Method(ClassConstruct ownerClass, ClassVisitor cv, String name, String descriptor, int access,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    65
                  ClassBuilder.ExecutionMode execMode) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    66
        this.ownerClassName = ownerClass.getName();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    67
        this.ownerClass = ownerClass;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    68
        this.execMode = execMode;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    69
        this.cv = cv;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    70
        mv = cv.visitMethod(access, name, descriptor, null, null);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    71
        mv.visitCode();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    72
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    73
    /**
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    74
     * Add code for the m()Ljava/lang/Integer; method, always returns null
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    75
     */
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    76
    public void makeDefaultMethod() {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    77
        mv.visitTypeInsn(NEW, "java/lang/Integer");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    78
        mv.visitInsn(DUP);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    79
        mv.visitLdcInsn(ownerClass.getIndex());
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    80
        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Integer", "<init>", "(I)V");
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    81
        mv.visitInsn(ARETURN);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    82
        mv.visitMaxs(0, 0);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    83
        mv.visitEnd();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    84
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    85
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    86
    public void makePrivateCallMethod(String className) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    87
        makeSuperCallMethod(INVOKESPECIAL, className);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    88
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    89
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    90
    public void makeSuperCallMethod(int invokeInstruction, String className) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    91
        mv.visitVarInsn(ALOAD, 0);
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
    92
        makeCall(invokeInstruction, className, false);
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    93
        mv.visitInsn(POP);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    94
        done();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    95
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    96
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
    97
    public void defaultInvoke(int instr, String className, String objectRef, boolean isInterface) {
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    98
        switch (instr) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
    99
            case INVOKEVIRTUAL:
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   100
                defaultInvokeVirtual(className, objectRef);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   101
                break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   102
            case INVOKEINTERFACE:
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   103
                defaultInvokeInterface(className, objectRef);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   104
                break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   105
            case INVOKESTATIC:
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   106
                defaultInvokeStatic(className, isInterface);
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   107
                break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   108
            case INVOKESPECIAL:
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   109
                defaultInvokeSpecial(className, objectRef, isInterface);
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   110
                break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   111
            default:
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   112
                break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   113
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   114
        mv.visitInsn(ARETURN);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   115
        mv.visitMaxs(0, 0);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   116
        mv.visitEnd();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   117
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   118
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   119
    private void defaultInvokeVirtual(String className, String objectRef) {
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   120
        String objectRefPackageName = objectRef.substring(0, objectRef.lastIndexOf("/"));
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   121
        makeNewObject(objectRef, objectRefPackageName);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   122
        makeCall(INVOKEVIRTUAL, className, false);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   123
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   124
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   125
    private void defaultInvokeInterface(String className, String objectRef) {
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   126
        String objectRefPackageName = objectRef.substring(0, objectRef.lastIndexOf("/"));
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   127
        makeNewObject(objectRef, objectRefPackageName);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   128
        makeCall(INVOKEINTERFACE, className, true);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   129
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   130
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   131
    private void defaultInvokeSpecial(String className, String objectRef, boolean isInterface) {
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   132
        String objectRefPackageName = objectRef.substring(0, objectRef.lastIndexOf("/"));
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   133
        makeNewObject(objectRef, objectRefPackageName);
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   134
        makeCall(INVOKESPECIAL, className, isInterface);
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   135
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   136
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   137
    private void defaultInvokeStatic(String className, boolean isInterface) {
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   138
        makeCall(INVOKESTATIC, className, isInterface);
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   139
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   140
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   141
    private Method makeCall(int invokeInstruction, String className, boolean isInterface) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   142
        switch(execMode) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   143
            case DIRECT: {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   144
                mv.visitMethodInsn(invokeInstruction, className, defaultMethodName, defaultMethodDescriptor, isInterface);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   145
                break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   146
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   147
            case INDY: {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   148
                Handle m = convertToHandle(invokeInstruction, className, defaultMethodName, defaultMethodDescriptor);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   149
                Handle bsm = generateBootstrapMethod(m);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   150
                mv.visitInvokeDynamicInsn(defaultMethodName, defaultMethodDescriptor, bsm);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   151
                break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   152
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   153
            case MH_INVOKE_EXACT:
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   154
            case MH_INVOKE_GENERIC: {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   155
                String invokerName = execMode == ClassBuilder.ExecutionMode.MH_INVOKE_GENERIC
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   156
                        ? "invoke" : "invokeExact";
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   157
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   158
                Handle m = convertToHandle(invokeInstruction, className, defaultMethodName, defaultMethodDescriptor);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   159
                mv.visitLdcInsn(m);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   160
                mv.visitInsn(SWAP);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   161
                mv.visitMethodInsn(INVOKEVIRTUAL,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   162
                        "java/lang/invoke/MethodHandle",
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   163
                        invokerName,
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   164
                        String.format(methodDescriptorTemplate, className),
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   165
                        false);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   166
                break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   167
            }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   168
            default:
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   169
                throw new Error("Unknown execution mode: " + execMode);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   170
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   171
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   172
        return this;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   173
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   174
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   175
    private Handle generateBootstrapMethod(Handle h) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   176
        String bootstrapName = "bootstrapMethod";
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   177
        MethodType bootstrapType = MethodType.methodType(CallSite.class, MethodHandles.Lookup.class, String.class, MethodType.class);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   178
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   179
        MethodVisitor bmv = cv.visitMethod(ACC_PUBLIC | ACC_STATIC, bootstrapName, bootstrapType.toMethodDescriptorString(), null, null);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   180
        bmv.visitCode();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   181
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   182
        String constCallSite = "java/lang/invoke/ConstantCallSite";
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   183
        bmv.visitTypeInsn(NEW, constCallSite);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   184
        bmv.visitInsn(DUP);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   185
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   186
        bmv.visitLdcInsn(h);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   187
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   188
        bmv.visitMethodInsn(INVOKESPECIAL, constCallSite, "<init>", "(Ljava/lang/invoke/MethodHandle;)V", false);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   189
        bmv.visitInsn(ARETURN);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   190
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   191
        bmv.visitMaxs(0,0);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   192
        bmv.visitEnd();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   193
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   194
        return new Handle(H_INVOKESTATIC, ownerClassName, bootstrapName, bootstrapType.toMethodDescriptorString());
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   195
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   197
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   198
    private static Handle convertToHandle(int invokeInstruction, String className, String methodName, String methodDesc) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   199
        int tag;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   200
        switch (invokeInstruction) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   201
            case INVOKEVIRTUAL:   tag = H_INVOKEVIRTUAL;   break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   202
            case INVOKEINTERFACE: tag = H_INVOKEINTERFACE; break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   203
            case INVOKESPECIAL:   tag = H_INVOKESPECIAL;   break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   204
            case INVOKESTATIC:    tag = H_INVOKESTATIC;    break;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   205
            default:
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   206
                throw new Error("Unknown invoke instruction: "+invokeInstruction);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   207
        }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   208
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   209
        return new Handle(tag, className, methodName, methodDesc);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   210
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   211
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   212
    private void makeNewObject(String objectRef, String objectRefPackageName) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   213
        String className = objectRef.substring(objectRef.lastIndexOf("/") + 1);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   214
        makeStaticCall( objectRefPackageName + "/Helper",
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   215
                        "get" + className,
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   216
                        "()L" + objectRef + ";", false);
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   217
        mv.visitVarInsn(ASTORE, 1);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   218
        mv.visitVarInsn(ALOAD, 1);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   219
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   220
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   221
    public void makeTestCall(String className) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   222
        mv.visitTypeInsn(NEW, className);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   223
        mv.visitInsn(DUP);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   224
        mv.visitMethodInsn(INVOKESPECIAL, className, "<init>", "()V", false);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   225
        mv.visitVarInsn(ASTORE, 1);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   226
        mv.visitVarInsn(ALOAD, 1);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   227
        mv.visitMethodInsn(INVOKEVIRTUAL, className, "test", "()Ljava/lang/Integer;", false);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   228
        mv.visitInsn(RETURN);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   229
        mv.visitMaxs(2, 2);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   230
        mv.visitEnd();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   231
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   232
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   233
    public Method makeStaticCall(String classname, String method, String descriptor, boolean isInterface) {
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   234
        mv.visitMethodInsn(INVOKESTATIC, classname, method, descriptor, isInterface);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   235
        return this;
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   236
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   237
38719
133bf85c3f36 8145148: InterfaceMethod CP entry pointing to a class should cause ICCE
coleenp
parents: 37196
diff changeset
   238
    public void makeConstructor(String extending, boolean isInterface) {
37196
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   239
        mv.visitVarInsn(ALOAD, 0);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   240
        mv.visitMethodInsn(INVOKESPECIAL, extending == null ? "java/lang/Object" : extending, "<init>", "()V", isInterface);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   241
        mv.visitInsn(RETURN);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   242
        mv.visitMaxs(0, 0);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   243
        mv.visitEnd();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   244
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   245
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   246
    public void makeInstantiateMethod(String className) {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   247
        mv.visitTypeInsn(NEW, className);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   248
        mv.visitInsn(DUP);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   249
        mv.visitMethodInsn(INVOKESPECIAL, className, "<init>", "()V", false);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   250
        mv.visitInsn(ARETURN);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   251
        mv.visitMaxs(0, 0);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   252
        mv.visitEnd();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   253
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   254
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   255
    public void done() {
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   256
        mv.visitInsn(RETURN);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   257
        mv.visitMaxs(0, 0);
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   258
        mv.visitEnd();
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   259
    }
f3f7367e8c53 8078112: [TESTBUG] Integrate Selection/Resolution test suite into jtreg tests
ddmitriev
parents:
diff changeset
   260
}