Guest User

Untitled

a guest
Apr 25th, 2018
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.17 KB | None | 0 0
  1. scala> class Cast1 { "".asInstanceOf[Option[String]] }
  2. defined class Cast1
  3.  
  4. scala> :javap -c Cast1
  5. Compiled from "<console>"
  6. public class $line8.$read$$iw$$iw$Cast1 {
  7. public $line8.$read$$iw$$iw$Cast1();
  8. Code:
  9. 0: aload_0
  10. 1: invokespecial #17 // Method java/lang/Object."<init>":()V
  11. 4: ldc #19 // String
  12. 6: checkcast #21 // class scala/Option
  13. 9: pop
  14. 10: return
  15. }
  16.  
  17. scala> class Cast1[T] { "".asInstanceOf[T] }
  18. defined class Cast1
  19.  
  20. scala> class Cast2[T] { "".asInstanceOf[T] }
  21. defined class Cast2
  22.  
  23. scala> :javap -c Cast2
  24. Compiled from "<console>"
  25. public class $line10.$read$$iw$$iw$Cast2<T> {
  26. public $line10.$read$$iw$$iw$Cast2();
  27. Code:
  28. 0: aload_0
  29. 1: invokespecial #18 // Method java/lang/Object."<init>":()V
  30. 4: ldc #20 // String
  31. 6: pop
  32. 7: return
  33. }
  34.  
  35. scala> class Cast2[T] { def get: T = "".asInstanceOf[T] }
  36. defined class Cast2
  37.  
  38. scala> val c2 = new Cast2[Option[String]]
  39. c2: Cast2[Option[String]] = Cast2@87fc0fc
  40.  
  41. scala> c2.get
  42. java.lang.ClassCastException: java.lang.String cannot be cast to scala.Option
  43. ... 28 elided
  44.  
  45. scala> class Call2 { c2.get }
  46. defined class Call2
  47.  
  48. scala> :javap Call2
  49. Size 835 bytes
  50. MD5 checksum 2caa9c963680c64a2b8ff4d730306580
  51. Compiled from "<console>"
  52. public class $line16.$read$$iw$$iw$Call2
  53. minor version: 0
  54. major version: 52
  55. flags: ACC_PUBLIC, ACC_SUPER
  56. Constant pool:
  57. #1 = Utf8 $line16/$read$$iw$$iw$Call2
  58. #2 = Class #1 // $line16/$read$$iw$$iw$Call2
  59. #3 = Utf8 java/lang/Object
  60. #4 = Class #3 // java/lang/Object
  61. #5 = Utf8 <console>
  62. #6 = Utf8 $line11/$read$$iw$
  63. #7 = Class #6 // $line11/$read$$iw$
  64. #8 = Utf8 $line11/$read
  65. #9 = Class #8 // $line11/$read
  66. #10 = Utf8 $iw$
  67. #11 = Utf8 $line11/$read$$iw$$iw$
  68. #12 = Class #11 // $line11/$read$$iw$$iw$
  69. #13 = Utf8 $line11/$read$$iw$$iw$Cast2
  70. #14 = Class #13 // $line11/$read$$iw$$iw$Cast2
  71. #15 = Utf8 Cast2
  72. #16 = Utf8 $line12/$read$$iw$
  73. #17 = Class #16 // $line12/$read$$iw$
  74. #18 = Utf8 $line12/$read
  75. #19 = Class #18 // $line12/$read
  76. #20 = Utf8 $line12/$read$$iw$$iw$
  77. #21 = Class #20 // $line12/$read$$iw$$iw$
  78. #22 = Utf8 $line16/$read$$iw$
  79. #23 = Class #22 // $line16/$read$$iw$
  80. #24 = Utf8 $line16/$read
  81. #25 = Class #24 // $line16/$read
  82. #26 = Utf8 $line16/$read$$iw$$iw$
  83. #27 = Class #26 // $line16/$read$$iw$$iw$
  84. #28 = Utf8 Call2
  85. #29 = Utf8 <init>
  86. #30 = Utf8 ()V
  87. #31 = NameAndType #29:#30 // "<init>":()V
  88. #32 = Methodref #4.#31 // java/lang/Object."<init>":()V
  89. #33 = Utf8 MODULE$
  90. #34 = Utf8 L$line12/$read$$iw$$iw$;
  91. #35 = NameAndType #33:#34 // MODULE$:L$line12/$read$$iw$$iw$;
  92. #36 = Fieldref #21.#35 // $line12/$read$$iw$$iw$.MODULE$:L$line12/$read$$iw$$iw$;
  93. #37 = Utf8 c2
  94. #38 = Utf8 ()L$line11/$read$$iw$$iw$Cast2;
  95. #39 = NameAndType #37:#38 // c2:()L$line11/$read$$iw$$iw$Cast2;
  96. #40 = Methodref #21.#39 // $line12/$read$$iw$$iw$.c2:()L$line11/$read$$iw$$iw$Cast2;
  97. #41 = Utf8 get
  98. #42 = Utf8 ()Ljava/lang/Object;
  99. #43 = NameAndType #41:#42 // get:()Ljava/lang/Object;
  100. #44 = Methodref #14.#43 // $line11/$read$$iw$$iw$Cast2.get:()Ljava/lang/Object;
  101. #45 = Utf8 this
  102. #46 = Utf8 L$line16/$read$$iw$$iw$Call2;
  103. #47 = Utf8 Code
  104. #48 = Utf8 LocalVariableTable
  105. #49 = Utf8 LineNumberTable
  106. #50 = Utf8 SourceFile
  107. #51 = Utf8 InnerClasses
  108. #52 = Utf8 ScalaInlineInfo
  109. #53 = Utf8 Scala
  110. {
  111. public $line16.$read$$iw$$iw$Call2();
  112. descriptor: ()V
  113. flags: ACC_PUBLIC
  114. Code:
  115. stack=1, locals=1, args_size=1
  116. 0: aload_0
  117. 1: invokespecial #32 // Method java/lang/Object."<init>":()V
  118. 4: getstatic #36 // Field $line12/$read$$iw$$iw$.MODULE$:L$line12/$read$$iw$$iw$;
  119. 7: invokevirtual #40 // Method $line12/$read$$iw$$iw$.c2:()L$line11/$read$$iw$$iw$Cast2;
  120. 10: invokevirtual #44 // Method $line11/$read$$iw$$iw$Cast2.get:()Ljava/lang/Object;
  121. 13: pop
  122. 14: return
  123. LocalVariableTable:
  124. Start Length Slot Name Signature
  125. 0 15 0 this L$line16/$read$$iw$$iw$Call2;
  126. LineNumberTable:
  127. line 14: 0
  128. line 12: 4
  129. }
  130. SourceFile: "<console>"
  131. InnerClasses:
  132. public static #10= #7 of #9; //$iw$=class $line11/$read$$iw$ of class $line11/$read
  133. public static #10= #12 of #7; //$iw$=class $line11/$read$$iw$$iw$ of class $line11/$read$$iw$
  134. public static #15= #14 of #12; //Cast2=class $line11/$read$$iw$$iw$Cast2 of class $line11/$read$$iw$$iw$
  135. public static #10= #17 of #19; //$iw$=class $line12/$read$$iw$ of class $line12/$read
  136. public static #10= #21 of #17; //$iw$=class $line12/$read$$iw$$iw$ of class $line12/$read$$iw$
  137. public static #10= #23 of #25; //$iw$=class $line16/$read$$iw$ of class $line16/$read
  138. public static #10= #27 of #23; //$iw$=class $line16/$read$$iw$$iw$ of class $line16/$read$$iw$
  139. public static #28= #2 of #27; //Call2=class $line16/$read$$iw$$iw$Call2 of class $line16/$read$$iw$$iw$
  140. Error: unknown attribute
  141. ScalaInlineInfo: length = 0x9
  142. 01 00 00 01 00 1D 00 1E 00
  143. Error: unknown attribute
  144. Scala: length = 0x0
  145.  
  146.  
  147. scala> :javap -c Call2
  148. Compiled from "<console>"
  149. public class $line16.$read$$iw$$iw$Call2 {
  150. public $line16.$read$$iw$$iw$Call2();
  151. Code:
  152. 0: aload_0
  153. 1: invokespecial #32 // Method java/lang/Object."<init>":()V
  154. 4: getstatic #36 // Field $line12/$read$$iw$$iw$.MODULE$:L$line12/$read$$iw$$iw$;
  155. 7: invokevirtual #40 // Method $line12/$read$$iw$$iw$.c2:()L$line11/$read$$iw$$iw$Cast2;
  156. 10: invokevirtual #44 // Method $line11/$read$$iw$$iw$Cast2.get:()Ljava/lang/Object;
  157. 13: pop
  158. 14: return
  159. }
  160.  
  161. scala> new Call2
  162. res3: Call2 = Call2@34766f4b
  163.  
  164. scala> class Call2 { c2.get.charAt(0) }
  165. <console>:12: error: value charAt is not a member of Option[String]
  166. class Call2 { c2.get.charAt(0) }
  167. ^
  168.  
  169. scala> class Call2 { c2.get.isDefined }
  170. defined class Call2
  171.  
  172. scala> class Call3 { c2.get.charAt(0) }
  173. <console>:12: error: value charAt is not a member of Option[String]
  174. class Call3 { c2.get.charAt(0) }
  175. ^
  176.  
  177. scala> class Call3 { c2.get.isDefined }
  178. defined class Call3
  179.  
  180. scala> :javap -c Call3
  181. Compiled from "<console>"
  182. public class $line21.$read$$iw$$iw$Call3 {
  183. public $line21.$read$$iw$$iw$Call3();
  184. Code:
  185. 0: aload_0
  186. 1: invokespecial #32 // Method java/lang/Object."<init>":()V
  187. 4: getstatic #36 // Field $line12/$read$$iw$$iw$.MODULE$:L$line12/$read$$iw$$iw$;
  188. 7: invokevirtual #40 // Method $line12/$read$$iw$$iw$.c2:()L$line11/$read$$iw$$iw$Cast2;
  189. 10: invokevirtual #44 // Method $line11/$read$$iw$$iw$Cast2.get:()Ljava/lang/Object;
  190. 13: checkcast #46 // class scala/Option
  191. 16: invokevirtual #50 // Method scala/Option.isDefined:()Z
  192. 19: pop
  193. 20: return
  194. }
  195.  
  196. scala> new Call3
  197. java.lang.ClassCastException: java.lang.String cannot be cast to scala.Option
  198. ... 29 elided
  199.  
  200. scala> 1.asInstanceOf[Object]
  201. res5: Object = 1
  202.  
  203. scala> class Cast4 { 1.asInstanceOf[Object] }
  204. <console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
  205. class Cast4 { 1.asInstanceOf[Object] }
  206. ^
  207. defined class Cast4
  208.  
  209. scala> class Cast4 { def get = 1.asInstanceOf[Object] }
  210. defined class Cast4
  211.  
  212. scala> new Cast4.get
  213. <console>:12: error: not found: value Cast4
  214. new Cast4.get
  215. ^
  216.  
  217. scala> new Cast4().get
  218. res7: Object = 1
  219.  
  220. scala> :javap -c Cast4
  221. Compiled from "<console>"
  222. public class $line27.$read$$iw$$iw$Cast4 {
  223. public java.lang.Object get();
  224. Code:
  225. 0: iconst_1
  226. 1: invokestatic #21 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
  227. 4: areturn
  228.  
  229. public $line27.$read$$iw$$iw$Cast4();
  230. Code:
  231. 0: aload_0
  232. 1: invokespecial #27 // Method java/lang/Object."<init>":()V
  233. 4: return
  234. }
  235.  
  236. scala> Int.box(1)
  237. res8: Integer = 1
  238.  
  239. scala> java.lang.Integer.valueOf(1)
  240. res9: Integer = 1
  241.  
  242. scala> class Cast2[T] { def get: T = "".asInstanceOf[T] }
  243. defined class Cast2
  244.  
  245. scala> class Call5 { val x: Int = new Cast2[Int]().get }
  246. defined class Call5
  247.  
  248. scala> new Call5
  249. java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
  250. at scala.runtime.BoxesRunTime.unboxToInt(BoxesRunTime.java:101)
  251. ... 29 elided
  252.  
  253. scala> :javap -c Call5
  254. Compiled from "<console>"
  255. public class $line33.$read$$iw$$iw$Call5 {
  256. public int x();
  257. Code:
  258. 0: aload_0
  259. 1: getfield #27 // Field x:I
  260. 4: ireturn
  261.  
  262. public $line33.$read$$iw$$iw$Call5();
  263. Code:
  264. 0: aload_0
  265. 1: invokespecial #33 // Method java/lang/Object."<init>":()V
  266. 4: aload_0
  267. 5: new #14 // class $line32/$read$$iw$$iw$Cast2
  268. 8: dup
  269. 9: invokespecial #34 // Method $line32/$read$$iw$$iw$Cast2."<init>":()V
  270. 12: invokevirtual #38 // Method $line32/$read$$iw$$iw$Cast2.get:()Ljava/lang/Object;
  271. 15: invokestatic #44 // Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I
  272. 18: putfield #27 // Field x:I
  273. 21: return
  274. }
  275.  
  276. scala>
Add Comment
Please, Sign In to add comment