aboutsummaryrefslogtreecommitdiff
path: root/testdata/invoke-polymorphic.smali
diff options
context:
space:
mode:
Diffstat (limited to 'testdata/invoke-polymorphic.smali')
-rw-r--r--testdata/invoke-polymorphic.smali70
1 files changed, 70 insertions, 0 deletions
diff --git a/testdata/invoke-polymorphic.smali b/testdata/invoke-polymorphic.smali
new file mode 100644
index 0000000..1ad7246
--- /dev/null
+++ b/testdata/invoke-polymorphic.smali
@@ -0,0 +1,70 @@
+# Tests invoke-polymorphic added in DEX version 38.
+# Disassembled from dexdump test files.
+# Repo: https://android.googlesource.com/platform/art/
+# File: test/dexdump/invoke-polymorphic.dex
+
+# Compile using smali: https://github.com/JesusFreke/smali
+# java -jar smali.jar assemble invoke-polymorphic.smali --api 28
+
+.class public LMain;
+.super Ljava/lang/Object;
+.source "Main.java"
+
+
+# direct methods
+.method public constructor <init>()V
+ .registers 1
+
+ .prologue
+ .line 9
+ invoke-direct {p0}, Ljava/lang/Object;-><init>()V
+
+ return-void
+.end method
+
+.method public static main([Ljava/lang/String;)V
+ .registers 10
+ .param p0, "args" # [Ljava/lang/String;
+ .annotation system Ldalvik/annotation/Throws;
+ value = {
+ Ljava/lang/Throwable;
+ }
+ .end annotation
+
+ .prologue
+ const-wide v2, 0x400199999999999aL # 2.2
+
+ const/4 v4, 0x1
+
+ .line 31
+ const/4 v0, 0x0
+
+ .line 32
+ .local v0, "handle":Ljava/lang/invoke/MethodHandle;
+ const/4 v5, 0x0
+
+ .line 33
+ .local v5, "o":Ljava/lang/Object;
+ const-string/jumbo v1, "a"
+
+ move v6, v4
+
+ 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;
+
+ move-result-object v7
+
+ .line 34
+ .local v7, "s":Ljava/lang/String;
+ invoke-polymorphic {v0, v2, v3, v4}, Ljava/lang/invoke/MethodHandle;->invokeExact([Ljava/lang/Object;)Ljava/lang/Object;, (DI)I
+
+ move-result v8
+
+ .line 35
+ .local v8, "x":I
+ const-string/jumbo v1, "a"
+
+ invoke-polymorphic {v0, v1, v2, v3, v4}, Ljava/lang/invoke/MethodHandle;->invoke([Ljava/lang/Object;)Ljava/lang/Object;, (Ljava/lang/String;DI)V
+
+ .line 56
+ return-void
+.end method