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 return-void 54.end method 55 56.method public static test(Ljava/lang/String;)V 57.registers 6 58 :try_start_1 59 invoke-static {v5}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class; 60 move-result-object v0 61 invoke-virtual {v0}, Ljava/lang/Class;->newInstance()Ljava/lang/Object; 62 :try_end_1 63 .catch Ljava/lang/VerifyError; {:try_start_1 .. :try_end_1} :catch_verifier 64 return-void 65 :catch_verifier 66 move-exception v3 67 invoke-virtual {v3}, Ljava/lang/Exception;->toString()Ljava/lang/String; 68 move-result-object v3 69 sget-object v2, Ljava/lang/System;->out:Ljava/io/PrintStream; 70 invoke-virtual {v2, v3}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V 71 return-void 72.end method 73 74# A test method called "invoke", but on a class other than MethodHandle. 75.method public invoke([Ljava/lang/Object;)Ljava/lang/Object; 76.registers 2 77 const/4 v0, 0 78 aget-object v0, p0, v0 79 return-object v0 80.end method 81 82# A test method called "invokeExact" that is native varargs, but is on a class 83# other than MethodHandle. 84.method public native varargs invokeExact([Ljava/lang/Object;)Ljava/lang/Object; 85.end method