Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jdt-dev] How does this code work ?
  • From: "Sankaran, Srikanth" <srikanth.sankaran@xxxxxxxxxxxxx>
  • Date: Wed, 22 May 2024 06:02:56 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=advantest.com; dmarc=pass action=none header.from=advantest.com; dkim=pass header.d=advantest.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sPKoh0MnsEvmiS1nkqKVS5tQ/U2xatwAJz1mP5EddTk=; b=lPzQ7dRKtfuGj4wNv1JOqwBzSAttLBg68tnCVNKLjvch24UEvXe+1bAIqlx/IWfssLnbhcJB6v1QAI33A4Mg+YIy5p6OB1CDbzB0snqf/7QYpOB6M3xfMZLI1sEDUx3mQfXeaSs2S84SqGer3uMgZ2xHn8KLa/Bg3LbkEXJiZR9hx5h5aSHxrd17XZidLivueYYNIyk1aD+IeJrCtZfw0jsEt9yYKNCkV8A4HEooCQD/ksD7JWuHjuFBJexnV4SJGVDgpHjlrAjICMAXuzgWO7s2ntyXZcs5DYOBAQ5hEAS63VJ117dfhztoetfm9Jk3PmI192pYN34QZFSdiX+sRg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GYfugQUE7U+IwZXBkiRPpKkrf8TK005J71ZNuvMmdYtcCeVX3qllGa0Vf1YFzOe7P7eX5sOY/gaIzbmQpU3sLa/MbvXlmwLUZoKIQ6Uxhd4oWAfeJb7tMjEnngcmRzI7K/Ao4SVcdv1KVp5G1a12RhOpYHRjgiHdRwBGF3CdDAIX9QBVEPEbmxIZzrXf8h8lUNrlUf0/BAoposNKmaxao3SfgHt57W8EFqIDFFV9ufOhKDwXYboOCzZ0+9dp+LR4x0LmA06UUAILdfWLWb5BhLds8pBmUuDvqRw3CHemxax/fopJbWgVm7UNDqZSd3bpliX33yKfpw/b7pXgQZqEQg==
  • Delivered-to: jdt-dev@xxxxxxxxxxx
  • List-archive: <https://www.eclipse.org/mailman/private/jdt-dev/>
  • List-help: <mailto:jdt-dev-request@eclipse.org?subject=help>
  • List-subscribe: <https://www.eclipse.org/mailman/listinfo/jdt-dev>, <mailto:jdt-dev-request@eclipse.org?subject=subscribe>
  • List-unsubscribe: <https://www.eclipse.org/mailman/options/jdt-dev>, <mailto:jdt-dev-request@eclipse.org?subject=unsubscribe>
  • Thread-index: AdqsDSnBdjzOBB2kRnK1ENZTitA2qg==
  • Thread-topic: How does this code work ?

I have been staring at this code for a while now wondering how the bad code generated still works:

 

public class X {

       public static void main(String[] args) {

             

              foo(String.class, switch (42) {

              default -> {

                     try {

                           yield 42;

                     } finally {

 

                     }

              }

              });

       }

      

       static void foo(Class<?> c, int v) {

              System.out.println(c);

              System.out.println(v);

       }

}

 

 

On master, we generate the following code:

 

  public static void main(java.lang.String[]);

    descriptor: ([Ljava/lang/String;)V

    flags: (0x0009) ACC_PUBLIC, ACC_STATIC

    Code:

      stack=2, locals=3, args_size=1

         0: ldc           #16                 // class java/lang/String

         2: astore_1                        <<ß-------------------- Class Object being stored into String See LVT slot 1 below.

         3: bipush        42

         5: istore_2

         6: aload_1                             <<ß-------------------- aload loads an object statically typed String, but at bci 8 we invoke a method that expects a Class object

         7: iload_2

         8: invokestatic  #18                 // Method foo:(Ljava/lang/Class;I)V

        11: return

      LineNumberTable:

        line 4: 0

        line 7: 3

        line 4: 8

        line 13: 11

      LocalVariableTable:

        Start  Length  Slot  Name   Signature

            0      12     0  args   [Ljava/lang/String;

            3       5     1  yieldValue0   Ljava/lang/String;  <<ß---------------------- String typed local

            6       2     2  secretYieldValue   I

 

What am I overlooking ??

 

Srikanth


Back to the top