He-Pin commented on PR #983:
URL: https://github.com/apache/incubator-pekko/pull/983#issuecomment-1901809838

   ```scala
   object Cast {
   
     val NotApplied: Any => Any = _ => NotApplied
     def cast[A](a: Any): A = a.asInstanceOf[A]
   
     def castWithMatch[A](a: Any): A = a match {
       case NotApplied  => ???
       case a: A @unchecked => a
     }
   
     def castWithRef[A](a: Any): A = {
       if (a.asInstanceOf[AnyRef] eq NotApplied) {
         ???
       } else {
         a.asInstanceOf[A]
       }
     }
   }
   ```
   
   and the bytecode:
   
   ```scala
   // class version 52.0 (52)
   // access flags 0x31
   public final class org/apache/pekko/stream/impl/Cast$ {
   
     // compiled from: Cast.scala
   
     ATTRIBUTE Scala : unknown
   
     ATTRIBUTE ScalaInlineInfo : unknown
     // access flags 0x19
     public final static INNERCLASS java/lang/invoke/MethodHandles$Lookup 
java/lang/invoke/MethodHandles Lookup
   
     // access flags 0x19
     public final static Lorg/apache/pekko/stream/impl/Cast$; MODULE$
   
     // access flags 0x1A
     // signature Lscala/Function1<Ljava/lang/Object;Ljava/lang/Object;>;
     // declaration: NotApplied extends scala.Function1<java.lang.Object, 
java.lang.Object>
     private final static Lscala/Function1; NotApplied
   
     // access flags 0x9
     public static <clinit>()V
      L0
       LINENUMBER 25 L0
       NEW org/apache/pekko/stream/impl/Cast$
       DUP
       INVOKESPECIAL org/apache/pekko/stream/impl/Cast$.<init> ()V
       PUTSTATIC org/apache/pekko/stream/impl/Cast$.MODULE$ : 
Lorg/apache/pekko/stream/impl/Cast$;
      L1
       LINENUMBER 27 L1
       INVOKEDYNAMIC apply()Lscala/Function1; [
         // handle kind 0x6 : INVOKESTATIC
         
java/lang/invoke/LambdaMetafactory.altMetafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite;
         // arguments:
         (Ljava/lang/Object;)Ljava/lang/Object;, 
         // handle kind 0x6 : INVOKESTATIC
         
org/apache/pekko/stream/impl/Cast$.$anonfun$NotApplied$1(Ljava/lang/Object;)Lscala/Function1;,
 
         (Ljava/lang/Object;)Lscala/Function1;, 
         5, 
         1, 
         (Ljava/lang/Object;)Lscala/Function1;
       ]
       PUTSTATIC org/apache/pekko/stream/impl/Cast$.NotApplied : 
Lscala/Function1;
      L2
       LINENUMBER 25 L2
       RETURN
       MAXSTACK = 2
       MAXLOCALS = 0
   
     // access flags 0x1
     // signature ()Lscala/Function1<Ljava/lang/Object;Ljava/lang/Object;>;
     // declaration: scala.Function1<java.lang.Object, java.lang.Object> 
NotApplied()
     public NotApplied()Lscala/Function1;
      L0
       LINENUMBER 27 L0
       GETSTATIC org/apache/pekko/stream/impl/Cast$.NotApplied : 
Lscala/Function1;
       ARETURN
      L1
       LOCALVARIABLE this Lorg/apache/pekko/stream/impl/Cast$; L0 L1 0
       MAXSTACK = 1
       MAXLOCALS = 1
   
     // access flags 0x1
     // signature <A:Ljava/lang/Object;>(Ljava/lang/Object;)TA;
     // declaration: A cast<A>(java.lang.Object)
     public cast(Ljava/lang/Object;)Ljava/lang/Object;
       // parameter final  a
      L0
       LINENUMBER 28 L0
       ALOAD 1
       ARETURN
      L1
       LOCALVARIABLE this Lorg/apache/pekko/stream/impl/Cast$; L0 L1 0
       LOCALVARIABLE a Ljava/lang/Object; L0 L1 1
       MAXSTACK = 1
       MAXLOCALS = 2
   
     // access flags 0x1
     // signature <A:Ljava/lang/Object;>(Ljava/lang/Object;)TA;
     // declaration: A castWithMatch<A>(java.lang.Object)
     public castWithMatch(Ljava/lang/Object;)Ljava/lang/Object;
       // parameter final  a
      L0
       LINENUMBER 31 L0
       ALOAD 0
       INVOKEVIRTUAL org/apache/pekko/stream/impl/Cast$.NotApplied 
()Lscala/Function1;
       DUP
       IFNONNULL L1
       POP
       ALOAD 1
       IFNULL L2
       GOTO L3
      L1
      FRAME SAME1 scala/Function1
       ALOAD 1
       INVOKEVIRTUAL java/lang/Object.equals (Ljava/lang/Object;)Z
       IFEQ L3
      L2
      FRAME SAME
       GETSTATIC scala/Predef$.MODULE$ : Lscala/Predef$;
       INVOKEVIRTUAL scala/Predef$.$qmark$qmark$qmark ()Lscala/runtime/Nothing$;
       ATHROW
      L3
       LINENUMBER 32 L3
      FRAME SAME
       ALOAD 1
       INSTANCEOF java/lang/Object
       IFEQ L4
       ALOAD 1
       ARETURN
      L4
       LINENUMBER 30 L4
      FRAME SAME
       NEW scala/MatchError
       DUP
       ALOAD 1
       INVOKESPECIAL scala/MatchError.<init> (Ljava/lang/Object;)V
       ATHROW
      L5
       LOCALVARIABLE this Lorg/apache/pekko/stream/impl/Cast$; L0 L5 0
       LOCALVARIABLE a Ljava/lang/Object; L0 L5 1
       MAXSTACK = 3
       MAXLOCALS = 2
   
     // access flags 0x1
     // signature <A:Ljava/lang/Object;>(Ljava/lang/Object;)TA;
     // declaration: A castWithRef<A>(java.lang.Object)
     public castWithRef(Ljava/lang/Object;)Ljava/lang/Object;
       // parameter final  a
      L0
       LINENUMBER 36 L0
       ALOAD 0
       INVOKEVIRTUAL org/apache/pekko/stream/impl/Cast$.NotApplied 
()Lscala/Function1;
       ASTORE 2
      L1
       LINENUMBER 37 L1
       ALOAD 1
       ALOAD 2
       IF_ACMPNE L2
      L3
       LINENUMBER 38 L3
       GETSTATIC scala/Predef$.MODULE$ : Lscala/Predef$;
       INVOKEVIRTUAL scala/Predef$.$qmark$qmark$qmark ()Lscala/runtime/Nothing$;
       ATHROW
      L2
       LINENUMBER 40 L2
      FRAME APPEND [scala/Function1]
       ALOAD 1
       ARETURN
      L4
       LOCALVARIABLE sentinel Lscala/Function1; L1 L4 2
       LOCALVARIABLE this Lorg/apache/pekko/stream/impl/Cast$; L0 L4 0
       LOCALVARIABLE a Ljava/lang/Object; L0 L4 1
       MAXSTACK = 2
       MAXLOCALS = 3
   
     // access flags 0x1019
     public final static synthetic 
$anonfun$NotApplied$1(Ljava/lang/Object;)Lscala/Function1;
       // parameter final  x$1
      L0
       LINENUMBER 27 L0
       GETSTATIC org/apache/pekko/stream/impl/Cast$.MODULE$ : 
Lorg/apache/pekko/stream/impl/Cast$;
       INVOKEVIRTUAL org/apache/pekko/stream/impl/Cast$.NotApplied 
()Lscala/Function1;
       ARETURN
      L1
       LOCALVARIABLE x$1 Ljava/lang/Object; L0 L1 0
       MAXSTACK = 1
       MAXLOCALS = 1
   
     // access flags 0x2
     private <init>()V
      L0
       LINENUMBER 25 L0
       ALOAD 0
       INVOKESPECIAL java/lang/Object.<init> ()V
       RETURN
      L1
       LOCALVARIABLE this Lorg/apache/pekko/stream/impl/Cast$; L0 L1 0
       MAXSTACK = 1
       MAXLOCALS = 1
   
     // access flags 0x100A
     private static synthetic 
$deserializeLambda$(Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object;
       ALOAD 0
       INVOKEDYNAMIC 
lambdaDeserialize(Ljava/lang/invoke/SerializedLambda;)Ljava/lang/Object; [
         // handle kind 0x6 : INVOKESTATIC
         
scala/runtime/LambdaDeserialize.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;
         // arguments:
         // handle kind 0x6 : INVOKESTATIC
         
org/apache/pekko/stream/impl/Cast$.$anonfun$NotApplied$1(Ljava/lang/Object;)Lscala/Function1;
       ]
       ARETURN
       MAXSTACK = 1
       MAXLOCALS = 1
   }
   
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to