Uploaded image for project: 'Code Tools'
  1. Code Tools
  2. CODETOOLS-7903402

jdis: tool writes incorrect StackMapTable if the first same_frame has type 0

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • asm_tools_8.0
    • asm_tools_7.0, asm_tools_8.0
    • tools
    • None

      if StackMapTable: number_of_entries = 6
              frame_type = 0 /* same */
              frame_type = 55 /* same */
              frame_type = 23 /* same */
              frame_type = 23 /* same */
              frame_type = 23 /* same */
              frame_type = 7 /* same */
      the output jasm file is:
        private Method #294:#6 // recoverField:"()V"
          throws #80, #371 // org/openjdk/asmtools/common/SyntaxError, java/io/IOException
          stack 3 locals 1
        {
                 var 0 #429:#430; // this:"Lorg/openjdk/asmtools/jcoder/Jcoder;"
           0: stack_frame_type same;
                 getstatic #87; // Field Jcoder$1.$SwitchMap$org$openjdk$asmtools$jcoder$JcodTokens$Token:"[I"
           3: aload_0;
           4: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
           7: getfield #46; // Field Scanner.token:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          10: invokevirtual #93; // Method JcodTokens$Token.ordinal:"()I"
          13: iaload;
          14: tableswitch { // 1 to 7
                      1: 56;
                      2: 80;
                      3: 104;
                      4: 128;
                      5: 128;
                      6: 128;
                      7: 128;
                     default: 136 };
          56: aload_0;
          57: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          60: getstatic #96; // Field JcodTokens$Token.LBRACE:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          63: getstatic #99; // Field JcodTokens$Token.RBRACE:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          66: invokevirtual #102; // Method Scanner.match:"(Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;)V"
          69: aload_0;
          70: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          73: invokevirtual #83; // Method Scanner.scan:"()I"
          76: pop;
          77: goto 0;
          80: aload_0;
          81: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          84: getstatic #106; // Field JcodTokens$Token.LPAREN:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          87: getstatic #109; // Field JcodTokens$Token.RPAREN:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          90: invokevirtual #102; // Method Scanner.match:"(Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;)V"
          93: aload_0;
          94: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          97: invokevirtual #83; // Method Scanner.scan:"()I"
          100: pop;
          101: goto 0;
          104: aload_0;
          105: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          108: getstatic #112; // Field JcodTokens$Token.LSQBRACKET:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          111: getstatic #115; // Field JcodTokens$Token.RSQBRACKET:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          114: invokevirtual #102; // Method Scanner.match:"(Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;)V"
          117: aload_0;
          118: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          121: invokevirtual #83; // Method Scanner.scan:"()I"
          124: pop;
          125: goto 0;
          128: new #80; // class org/openjdk/asmtools/common/SyntaxError
          131: dup;
          132: invokespecial #82; // Method org/openjdk/asmtools/common/SyntaxError."<init>":"()V"
          135: stack_frame_type same;
                 athrow;
          136: aload_0;
          137: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          140: invokevirtual #83; // Method Scanner.scan:"()I"
          143: pop;
          144: goto 0;
                 endvar 0;
        }
      although expected method should be:

      private Method #294:#6 // recoverField:"()V"
          throws #80, #371 // org/openjdk/asmtools/common/SyntaxError, java/io/IOException
          stack 3 locals 1
        {
                 var 0 #429:#430; // this:"Lorg/openjdk/asmtools/jcoder/Jcoder;"
           0: stack_frame_type same;
                 getstatic #87; // Field Jcoder$1.$SwitchMap$org$openjdk$asmtools$jcoder$JcodTokens$Token:"[I"
           3: aload_0;
           4: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
           7: getfield #46; // Field Scanner.token:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          10: invokevirtual #93; // Method JcodTokens$Token.ordinal:"()I"
          13: iaload;
          14: tableswitch { // 1 to 7
                      1: 56;
                      2: 80;
                      3: 104;
                      4: 128;
                      5: 128;
                      6: 128;
                      7: 128;
                     default: 136 };
          56: stack_frame_type same;
                 aload_0;
          57: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          60: getstatic #96; // Field JcodTokens$Token.LBRACE:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          63: getstatic #99; // Field JcodTokens$Token.RBRACE:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          66: invokevirtual #102; // Method Scanner.match:"(Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;)V"
          69: aload_0;
          70: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          73: invokevirtual #83; // Method Scanner.scan:"()I"
          76: pop;
          77: goto 0;
          80: stack_frame_type same;
                 aload_0;
          81: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          84: getstatic #106; // Field JcodTokens$Token.LPAREN:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          87: getstatic #109; // Field JcodTokens$Token.RPAREN:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          90: invokevirtual #102; // Method Scanner.match:"(Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;)V"
          93: aload_0;
          94: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          97: invokevirtual #83; // Method Scanner.scan:"()I"
          100: pop;
          101: goto 0;
          104: stack_frame_type same;
                 aload_0;
          105: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          108: getstatic #112; // Field JcodTokens$Token.LSQBRACKET:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          111: getstatic #115; // Field JcodTokens$Token.RSQBRACKET:"Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;"
          114: invokevirtual #102; // Method Scanner.match:"(Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;Lorg/openjdk/asmtools/jcoder/JcodTokens$Token;)V"
          117: aload_0;
          118: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          121: invokevirtual #83; // Method Scanner.scan:"()I"
          124: pop;
          125: goto 0;
          128: stack_frame_type same;
                 new #80; // class org/openjdk/asmtools/common/SyntaxError
          131: dup;
          132: invokespecial #82; // Method org/openjdk/asmtools/common/SyntaxError."<init>":"()V"
          135: athrow;
          136: stack_frame_type same;
                 aload_0;
          137: getfield #31; // Field scanner:"Lorg/openjdk/asmtools/jcoder/Scanner;"
          140: invokevirtual #83; // Method Scanner.scan:"()I"
          143: pop;
          144: goto 0;
                  endvar 0;
        }

            lkuskov Leonid Kuskov
            lkuskov Leonid Kuskov
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: