1#
2# Copyright (C) 2016 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#     http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16# This is the test suite runner. It is written in smali rather than
17# Java pending support in dx/dxmerge for invoke-polymorphic (b/33191712).
18
19.source "Main.smali"
20
21.class public LMain;
22.super Ljava/lang/Object;
23
24.method public constructor<init>()V
25.registers 1
26  invoke-direct {v0}, Ljava/lang/Object;-><init>()V
27  return-void
28.end method
29
30.method public static main([Ljava/lang/String;)V
31.registers 1
32  # New tests should be added here.
33  const-string v0, "MethodHandleNotInvoke"
34  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
35  const-string v0, "MethodHandleToString"
36  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
37  const-string v0, "NonReference"
38  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
39  const-string v0, "TooFewArguments"
40  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
41  const-string v0, "TooManyArguments"
42  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
43  const-string v0, "BadThis"
44  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
45  const-string v0, "FakeSignaturePolymorphic"
46  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
47  const-string v0, "BetterFakeSignaturePolymorphic"
48  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
49  const-string v0, "Subclass"
50  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
51  const-string v0, "Unresolved"
52  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
53  const-string v0, "VarHandleHappyAccessors"
54  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
55  const-string v0, "VarHandleUnhappyAccessors"
56  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
57const-string v0, "VarHandleUnknownAccessor"
58  invoke-static {v0}, LMain;->test(Ljava/lang/String;)V
59  return-void
60.end method
61
62.method public static test(Ljava/lang/String;)V
63.registers 6
64 :try_start_1
65  invoke-static {v5}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
66  move-result-object v0
67  invoke-virtual {v0}, Ljava/lang/Class;->newInstance()Ljava/lang/Object;
68 :try_end_1
69  .catch Ljava/lang/VerifyError; {:try_start_1 .. :try_end_1} :catch_verifier
70  return-void
71 :catch_verifier
72  move-exception v3
73  invoke-virtual {v3}, Ljava/lang/Exception;->toString()Ljava/lang/String;
74  move-result-object v3
75  sget-object v2, Ljava/lang/System;->out:Ljava/io/PrintStream;
76  invoke-virtual {v2, v3}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
77  return-void
78.end method
79
80# A test method called "invoke", but on a class other than MethodHandle.
81.method public invoke([Ljava/lang/Object;)Ljava/lang/Object;
82.registers 2
83  const/4 v0, 0
84  aget-object v0, p0, v0
85  return-object v0
86.end method
87
88# A test method called "invokeExact" that is native varargs, but is on a class
89# other than MethodHandle.
90.method public native varargs invokeExact([Ljava/lang/Object;)Ljava/lang/Object;
91.end method