xref: /aosp_15_r20/external/zucchini/testdata/invoke-polymorphic.smali (revision a03ca8b91e029cd15055c20c78c2e087c84792e4)
1*a03ca8b9SKrzysztof Kosiński# Tests invoke-polymorphic added in DEX version 38.
2*a03ca8b9SKrzysztof Kosiński# Disassembled from dexdump test files.
3*a03ca8b9SKrzysztof Kosiński# Repo: https://android.googlesource.com/platform/art/
4*a03ca8b9SKrzysztof Kosiński# File: test/dexdump/invoke-polymorphic.dex
5*a03ca8b9SKrzysztof Kosiński
6*a03ca8b9SKrzysztof Kosiński# Compile using smali: https://github.com/JesusFreke/smali
7*a03ca8b9SKrzysztof Kosiński# java -jar smali.jar assemble invoke-polymorphic.smali --api 28
8*a03ca8b9SKrzysztof Kosiński
9*a03ca8b9SKrzysztof Kosiński.class public LMain;
10*a03ca8b9SKrzysztof Kosiński.super Ljava/lang/Object;
11*a03ca8b9SKrzysztof Kosiński.source "Main.java"
12*a03ca8b9SKrzysztof Kosiński
13*a03ca8b9SKrzysztof Kosiński
14*a03ca8b9SKrzysztof Kosiński# direct methods
15*a03ca8b9SKrzysztof Kosiński.method public constructor <init>()V
16*a03ca8b9SKrzysztof Kosiński    .registers 1
17*a03ca8b9SKrzysztof Kosiński
18*a03ca8b9SKrzysztof Kosiński    .prologue
19*a03ca8b9SKrzysztof Kosiński    .line 9
20*a03ca8b9SKrzysztof Kosiński    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
21*a03ca8b9SKrzysztof Kosiński
22*a03ca8b9SKrzysztof Kosiński    return-void
23*a03ca8b9SKrzysztof Kosiński.end method
24*a03ca8b9SKrzysztof Kosiński
25*a03ca8b9SKrzysztof Kosiński.method public static main([Ljava/lang/String;)V
26*a03ca8b9SKrzysztof Kosiński    .registers 10
27*a03ca8b9SKrzysztof Kosiński    .param p0, "args"    # [Ljava/lang/String;
28*a03ca8b9SKrzysztof Kosiński    .annotation system Ldalvik/annotation/Throws;
29*a03ca8b9SKrzysztof Kosiński        value = {
30*a03ca8b9SKrzysztof Kosiński            Ljava/lang/Throwable;
31*a03ca8b9SKrzysztof Kosiński        }
32*a03ca8b9SKrzysztof Kosiński    .end annotation
33*a03ca8b9SKrzysztof Kosiński
34*a03ca8b9SKrzysztof Kosiński    .prologue
35*a03ca8b9SKrzysztof Kosiński    const-wide v2, 0x400199999999999aL    # 2.2
36*a03ca8b9SKrzysztof Kosiński
37*a03ca8b9SKrzysztof Kosiński    const/4 v4, 0x1
38*a03ca8b9SKrzysztof Kosiński
39*a03ca8b9SKrzysztof Kosiński    .line 31
40*a03ca8b9SKrzysztof Kosiński    const/4 v0, 0x0
41*a03ca8b9SKrzysztof Kosiński
42*a03ca8b9SKrzysztof Kosiński    .line 32
43*a03ca8b9SKrzysztof Kosiński    .local v0, "handle":Ljava/lang/invoke/MethodHandle;
44*a03ca8b9SKrzysztof Kosiński    const/4 v5, 0x0
45*a03ca8b9SKrzysztof Kosiński
46*a03ca8b9SKrzysztof Kosiński    .line 33
47*a03ca8b9SKrzysztof Kosiński    .local v5, "o":Ljava/lang/Object;
48*a03ca8b9SKrzysztof Kosiński    const-string/jumbo v1, "a"
49*a03ca8b9SKrzysztof Kosiński
50*a03ca8b9SKrzysztof Kosiński    move v6, v4
51*a03ca8b9SKrzysztof Kosiński
52*a03ca8b9SKrzysztof Kosiński    invoke-polymorphic/range {v0 .. v6}, Ljava/lang/invoke/MethodHandle;->invoke([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/String;DILjava/lang/Object;I)Ljava/lang/String;
53*a03ca8b9SKrzysztof Kosiński
54*a03ca8b9SKrzysztof Kosiński    move-result-object v7
55*a03ca8b9SKrzysztof Kosiński
56*a03ca8b9SKrzysztof Kosiński    .line 34
57*a03ca8b9SKrzysztof Kosiński    .local v7, "s":Ljava/lang/String;
58*a03ca8b9SKrzysztof Kosiński    invoke-polymorphic {v0, v2, v3, v4}, Ljava/lang/invoke/MethodHandle;->invokeExact([Ljava/lang/Object;)Ljava/lang/Object;, (DI)I
59*a03ca8b9SKrzysztof Kosiński
60*a03ca8b9SKrzysztof Kosiński    move-result v8
61*a03ca8b9SKrzysztof Kosiński
62*a03ca8b9SKrzysztof Kosiński    .line 35
63*a03ca8b9SKrzysztof Kosiński    .local v8, "x":I
64*a03ca8b9SKrzysztof Kosiński    const-string/jumbo v1, "a"
65*a03ca8b9SKrzysztof Kosiński
66*a03ca8b9SKrzysztof Kosiński    invoke-polymorphic {v0, v1, v2, v3, v4}, Ljava/lang/invoke/MethodHandle;->invoke([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/String;DI)V
67*a03ca8b9SKrzysztof Kosiński
68*a03ca8b9SKrzysztof Kosiński    .line 56
69*a03ca8b9SKrzysztof Kosiński    return-void
70*a03ca8b9SKrzysztof Kosiński.end method
71