RFR: replace stdout by configurable object [v16]

Leonid Kuskov lkuskov at openjdk.org
Tue Oct 18 02:39:16 UTC 2022


On Mon, 17 Oct 2022 12:54:11 GMT, Jiří Vaněk <jvanek at openjdk.org> wrote:

>> See https://github.com/openjdk/asmtools/pull/38 for full story
>> The PR will be enhanced by handling of two streams in compiler logger. Then the stdout work can continue.
>
> Jiří Vaněk has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Temporary workaround around tests being order-sensitive
>   
>   As -g is now making some disassmebld code not asemble-able back, and
>   order of tests is not deterministic, and Options are static, thus if -g
>   is now set in some test, it is not unset in other tests.
>   
>   Real fix is to move Options out of static context to context of
>   environment as it is done for jcoder.

I like your updates, everything looks good. I've checked your changes they didn't cause any regression in what I was able to test.   

> refactor ToolsInput/Output interfaces with many inner classes to separate pkg

`Agreed`

> adjust readme.md which will describe library-like usage

👍

>if you would agree, then rename four Main classes to match what they are Main of eg jasm.Main -> jasm.JasmMain - it is super easy to call wrong main.

`Doesn't work - there are  few references that can't be updated`

>get rid of dual stream logging? Now when I see the intnetional usage between trace/log maybe it canbe usefull to keep it in. But on the other side, it is confusing.

`Let's keep it in`

> use uEscWriter as currentClass wrapper??

Much better to use uEscWriter

Concerning my changes - I've added couple new methods into Main classes to keep asmtools working with some old staff. And right now I'm fixing constructions like this one that jasm is losing during decoding:
`
 0:    ldc               #1;            // Dynamic REF_invokeStatic:Method cpldyn00105m013.method20:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":
                                            // name:"I" {
                                            //   Dynamic REF_invokeStatic:Method cpldyn00105m013.method19:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //     Dynamic REF_invokeStatic:Method cpldyn00105m013.method18:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //       Dynamic REF_invokeStatic:Method cpldyn00105m013.method17:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //         Dynamic REF_invokeStatic:Method cpldyn00105m013.method16:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //           Dynamic REF_invokeStatic:Method cpldyn00105m013.method15:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //             Dynamic REF_invokeStatic:Method cpldyn00105m013.method14:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //               Dynamic REF_invokeStatic:Method cpldyn00105m013.method13:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                 Dynamic REF_invokeStatic:Method cpldyn00105m013.method12:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                   Dynamic REF_invokeStatic:Method cpldyn00105m013.method11:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                     Dynamic REF_invokeStatic:Method cpldyn00105m013.method10:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                       Dynamic REF_invokeStatic:Method cpldyn00105m013.method9:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                         Dynamic REF_invokeStatic:Method cpldyn00105m013.method8:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                           Dynamic REF_invokeStatic:Method cpldyn00105m013.method7:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                             Dynamic REF_invokeStatic:Method cpldyn00105m013.method6:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                               Dynamic REF_invokeStatic:Method cpldyn00105m013.method5:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                                 Dynamic REF_invokeStatic:Method cpldyn00105m013.method4:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                                   Dynamic REF_invokeStatic:Method cpldyn00105m013.method3:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                                     Dynamic REF_invokeStatic:Method cpldyn00105m013.method2:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                                       Dynamic REF_invokeStatic:Method cpldyn00105m013.method1:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                                         Dynamic REF_invokeStatic:Method cpldyn00105m013.method20:"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)I":name:"I" {
                                            //                                           String "foo-bar"
                                            //                                         }
                                            //                                       }
                                            //                                     }
                                            //                                   }
                                            //                                 }
                                            //                               }
                                            //                             }
                                            //                           }
                                            //                         }
                                            //                       }
                                            //                     }
                                            //                   }
                                            //                 }
                                            //               }
                                            //             }
                                            //           }
                                            //         }
                                            //       }
                                            //     }
                                            //   }
                                            // }
`

-------------

PR: https://git.openjdk.org/asmtools/pull/44


More information about the asmtools-dev mailing list