Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- scala> class Cast1 { "".asInstanceOf[Option[String]] }
- defined class Cast1
- scala> :javap -c Cast1
- Compiled from "<console>"
- public class $line8.$read$$iw$$iw$Cast1 {
- public $line8.$read$$iw$$iw$Cast1();
- Code:
- 0: aload_0
- 1: invokespecial #17 // Method java/lang/Object."<init>":()V
- 4: ldc #19 // String
- 6: checkcast #21 // class scala/Option
- 9: pop
- 10: return
- }
- scala> class Cast1[T] { "".asInstanceOf[T] }
- defined class Cast1
- scala> class Cast2[T] { "".asInstanceOf[T] }
- defined class Cast2
- scala> :javap -c Cast2
- Compiled from "<console>"
- public class $line10.$read$$iw$$iw$Cast2<T> {
- public $line10.$read$$iw$$iw$Cast2();
- Code:
- 0: aload_0
- 1: invokespecial #18 // Method java/lang/Object."<init>":()V
- 4: ldc #20 // String
- 6: pop
- 7: return
- }
- scala> class Cast2[T] { def get: T = "".asInstanceOf[T] }
- defined class Cast2
- scala> val c2 = new Cast2[Option[String]]
- c2: Cast2[Option[String]] = Cast2@87fc0fc
- scala> c2.get
- java.lang.ClassCastException: java.lang.String cannot be cast to scala.Option
- ... 28 elided
- scala> class Call2 { c2.get }
- defined class Call2
- scala> :javap Call2
- Size 835 bytes
- MD5 checksum 2caa9c963680c64a2b8ff4d730306580
- Compiled from "<console>"
- public class $line16.$read$$iw$$iw$Call2
- minor version: 0
- major version: 52
- flags: ACC_PUBLIC, ACC_SUPER
- Constant pool:
- #1 = Utf8 $line16/$read$$iw$$iw$Call2
- #2 = Class #1 // $line16/$read$$iw$$iw$Call2
- #3 = Utf8 java/lang/Object
- #4 = Class #3 // java/lang/Object
- #5 = Utf8 <console>
- #6 = Utf8 $line11/$read$$iw$
- #7 = Class #6 // $line11/$read$$iw$
- #8 = Utf8 $line11/$read
- #9 = Class #8 // $line11/$read
- #10 = Utf8 $iw$
- #11 = Utf8 $line11/$read$$iw$$iw$
- #12 = Class #11 // $line11/$read$$iw$$iw$
- #13 = Utf8 $line11/$read$$iw$$iw$Cast2
- #14 = Class #13 // $line11/$read$$iw$$iw$Cast2
- #15 = Utf8 Cast2
- #16 = Utf8 $line12/$read$$iw$
- #17 = Class #16 // $line12/$read$$iw$
- #18 = Utf8 $line12/$read
- #19 = Class #18 // $line12/$read
- #20 = Utf8 $line12/$read$$iw$$iw$
- #21 = Class #20 // $line12/$read$$iw$$iw$
- #22 = Utf8 $line16/$read$$iw$
- #23 = Class #22 // $line16/$read$$iw$
- #24 = Utf8 $line16/$read
- #25 = Class #24 // $line16/$read
- #26 = Utf8 $line16/$read$$iw$$iw$
- #27 = Class #26 // $line16/$read$$iw$$iw$
- #28 = Utf8 Call2
- #29 = Utf8 <init>
- #30 = Utf8 ()V
- #31 = NameAndType #29:#30 // "<init>":()V
- #32 = Methodref #4.#31 // java/lang/Object."<init>":()V
- #33 = Utf8 MODULE$
- #34 = Utf8 L$line12/$read$$iw$$iw$;
- #35 = NameAndType #33:#34 // MODULE$:L$line12/$read$$iw$$iw$;
- #36 = Fieldref #21.#35 // $line12/$read$$iw$$iw$.MODULE$:L$line12/$read$$iw$$iw$;
- #37 = Utf8 c2
- #38 = Utf8 ()L$line11/$read$$iw$$iw$Cast2;
- #39 = NameAndType #37:#38 // c2:()L$line11/$read$$iw$$iw$Cast2;
- #40 = Methodref #21.#39 // $line12/$read$$iw$$iw$.c2:()L$line11/$read$$iw$$iw$Cast2;
- #41 = Utf8 get
- #42 = Utf8 ()Ljava/lang/Object;
- #43 = NameAndType #41:#42 // get:()Ljava/lang/Object;
- #44 = Methodref #14.#43 // $line11/$read$$iw$$iw$Cast2.get:()Ljava/lang/Object;
- #45 = Utf8 this
- #46 = Utf8 L$line16/$read$$iw$$iw$Call2;
- #47 = Utf8 Code
- #48 = Utf8 LocalVariableTable
- #49 = Utf8 LineNumberTable
- #50 = Utf8 SourceFile
- #51 = Utf8 InnerClasses
- #52 = Utf8 ScalaInlineInfo
- #53 = Utf8 Scala
- {
- public $line16.$read$$iw$$iw$Call2();
- descriptor: ()V
- flags: ACC_PUBLIC
- Code:
- stack=1, locals=1, args_size=1
- 0: aload_0
- 1: invokespecial #32 // Method java/lang/Object."<init>":()V
- 4: getstatic #36 // Field $line12/$read$$iw$$iw$.MODULE$:L$line12/$read$$iw$$iw$;
- 7: invokevirtual #40 // Method $line12/$read$$iw$$iw$.c2:()L$line11/$read$$iw$$iw$Cast2;
- 10: invokevirtual #44 // Method $line11/$read$$iw$$iw$Cast2.get:()Ljava/lang/Object;
- 13: pop
- 14: return
- LocalVariableTable:
- Start Length Slot Name Signature
- 0 15 0 this L$line16/$read$$iw$$iw$Call2;
- LineNumberTable:
- line 14: 0
- line 12: 4
- }
- SourceFile: "<console>"
- InnerClasses:
- public static #10= #7 of #9; //$iw$=class $line11/$read$$iw$ of class $line11/$read
- public static #10= #12 of #7; //$iw$=class $line11/$read$$iw$$iw$ of class $line11/$read$$iw$
- public static #15= #14 of #12; //Cast2=class $line11/$read$$iw$$iw$Cast2 of class $line11/$read$$iw$$iw$
- public static #10= #17 of #19; //$iw$=class $line12/$read$$iw$ of class $line12/$read
- public static #10= #21 of #17; //$iw$=class $line12/$read$$iw$$iw$ of class $line12/$read$$iw$
- public static #10= #23 of #25; //$iw$=class $line16/$read$$iw$ of class $line16/$read
- public static #10= #27 of #23; //$iw$=class $line16/$read$$iw$$iw$ of class $line16/$read$$iw$
- public static #28= #2 of #27; //Call2=class $line16/$read$$iw$$iw$Call2 of class $line16/$read$$iw$$iw$
- Error: unknown attribute
- ScalaInlineInfo: length = 0x9
- 01 00 00 01 00 1D 00 1E 00
- Error: unknown attribute
- Scala: length = 0x0
- scala> :javap -c Call2
- Compiled from "<console>"
- public class $line16.$read$$iw$$iw$Call2 {
- public $line16.$read$$iw$$iw$Call2();
- Code:
- 0: aload_0
- 1: invokespecial #32 // Method java/lang/Object."<init>":()V
- 4: getstatic #36 // Field $line12/$read$$iw$$iw$.MODULE$:L$line12/$read$$iw$$iw$;
- 7: invokevirtual #40 // Method $line12/$read$$iw$$iw$.c2:()L$line11/$read$$iw$$iw$Cast2;
- 10: invokevirtual #44 // Method $line11/$read$$iw$$iw$Cast2.get:()Ljava/lang/Object;
- 13: pop
- 14: return
- }
- scala> new Call2
- res3: Call2 = Call2@34766f4b
- scala> class Call2 { c2.get.charAt(0) }
- <console>:12: error: value charAt is not a member of Option[String]
- class Call2 { c2.get.charAt(0) }
- ^
- scala> class Call2 { c2.get.isDefined }
- defined class Call2
- scala> class Call3 { c2.get.charAt(0) }
- <console>:12: error: value charAt is not a member of Option[String]
- class Call3 { c2.get.charAt(0) }
- ^
- scala> class Call3 { c2.get.isDefined }
- defined class Call3
- scala> :javap -c Call3
- Compiled from "<console>"
- public class $line21.$read$$iw$$iw$Call3 {
- public $line21.$read$$iw$$iw$Call3();
- Code:
- 0: aload_0
- 1: invokespecial #32 // Method java/lang/Object."<init>":()V
- 4: getstatic #36 // Field $line12/$read$$iw$$iw$.MODULE$:L$line12/$read$$iw$$iw$;
- 7: invokevirtual #40 // Method $line12/$read$$iw$$iw$.c2:()L$line11/$read$$iw$$iw$Cast2;
- 10: invokevirtual #44 // Method $line11/$read$$iw$$iw$Cast2.get:()Ljava/lang/Object;
- 13: checkcast #46 // class scala/Option
- 16: invokevirtual #50 // Method scala/Option.isDefined:()Z
- 19: pop
- 20: return
- }
- scala> new Call3
- java.lang.ClassCastException: java.lang.String cannot be cast to scala.Option
- ... 29 elided
- scala> 1.asInstanceOf[Object]
- res5: Object = 1
- scala> class Cast4 { 1.asInstanceOf[Object] }
- <console>:11: warning: a pure expression does nothing in statement position; multiline expressions may require enclosing parentheses
- class Cast4 { 1.asInstanceOf[Object] }
- ^
- defined class Cast4
- scala> class Cast4 { def get = 1.asInstanceOf[Object] }
- defined class Cast4
- scala> new Cast4.get
- <console>:12: error: not found: value Cast4
- new Cast4.get
- ^
- scala> new Cast4().get
- res7: Object = 1
- scala> :javap -c Cast4
- Compiled from "<console>"
- public class $line27.$read$$iw$$iw$Cast4 {
- public java.lang.Object get();
- Code:
- 0: iconst_1
- 1: invokestatic #21 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer;
- 4: areturn
- public $line27.$read$$iw$$iw$Cast4();
- Code:
- 0: aload_0
- 1: invokespecial #27 // Method java/lang/Object."<init>":()V
- 4: return
- }
- scala> Int.box(1)
- res8: Integer = 1
- scala> java.lang.Integer.valueOf(1)
- res9: Integer = 1
- scala> class Cast2[T] { def get: T = "".asInstanceOf[T] }
- defined class Cast2
- scala> class Call5 { val x: Int = new Cast2[Int]().get }
- defined class Call5
- scala> new Call5
- java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
- at scala.runtime.BoxesRunTime.unboxToInt(BoxesRunTime.java:101)
- ... 29 elided
- scala> :javap -c Call5
- Compiled from "<console>"
- public class $line33.$read$$iw$$iw$Call5 {
- public int x();
- Code:
- 0: aload_0
- 1: getfield #27 // Field x:I
- 4: ireturn
- public $line33.$read$$iw$$iw$Call5();
- Code:
- 0: aload_0
- 1: invokespecial #33 // Method java/lang/Object."<init>":()V
- 4: aload_0
- 5: new #14 // class $line32/$read$$iw$$iw$Cast2
- 8: dup
- 9: invokespecial #34 // Method $line32/$read$$iw$$iw$Cast2."<init>":()V
- 12: invokevirtual #38 // Method $line32/$read$$iw$$iw$Cast2.get:()Ljava/lang/Object;
- 15: invokestatic #44 // Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I
- 18: putfield #27 // Field x:I
- 21: return
- }
- scala>
Add Comment
Please, Sign In to add comment