invoke-polymorphic.smali 1.8 KB

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