(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (AndOr
                        children: [
                          (C {(cd)} 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [
                                        (C {(dirname)} 
                                          {
                                            (DQ 
                                              (BracedVarSub
                                                token: <VSub_Name BASH_SOURCE>
                                                bracket_op: 
                                                  (ArrayIndex
                                                    expr: (ArithWord w:{(Lit_Digits 0)})
                                                  )
                                                spids: [56 61]
                                              )
                                            )
                                          }
                                        )
                                      ]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [52 63]
                                )
                              )
                            }
                          )
                          (C {(pwd)})
                        ]
                        op_id: Op_DAmp
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [48 69]
              )
            }
          spids: [47]
        )
      ]
      spids: [47]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:JAVAC) op:Equal rhs:{($ VSub_Number "$1")} spids:[75])]
      spids: [75]
    )
    (C {(shift)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:JAVA) op:Equal rhs:{($ VSub_Number "$1")} spids:[80])]
      spids: [80]
    )
    (C {(shift)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:JAR) op:Equal rhs:{($ VSub_Number "$1")} spids:[85])]
      spids: [85]
    )
    (C {(shift)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:JAVAP) op:Equal rhs:{($ VSub_Number "$1")} spids:[90])]
      spids: [90]
    )
    (C {(shift)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:IJAR) op:Equal rhs:{($ VSub_Number "$1")} spids:[95])]
      spids: [95]
    )
    (C {(shift)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:LANGTOOLS8)
          op: Equal
          rhs: {($ VSub_Number "$1")}
          spids: [100]
        )
      ]
      spids: [100]
    )
    (C {(shift)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:UNZIP) op:Equal rhs:{($ VSub_Number "$1")} spids:[105])]
      spids: [105]
    )
    (C {(shift)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:ZIP) op:Equal rhs:{($ VSub_Number "$1")} spids:[110])]
      spids: [110]
    )
    (C {(shift)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:ZIP_COUNT)
          op: Equal
          rhs: {($ VSub_Number "$1")}
          spids: [115]
        )
      ]
      spids: [115]
    )
    (C {(shift)})
    (AndOr
      children: [
        (C {(source)} {(${ VSub_Name DIR) (/testenv.sh)})
        (BraceGroup
          children: [
            (Sentence
              child: 
                (SimpleCommand
                  words: [{(echo)} {(DQ ("testenv.sh not found!"))}]
                  redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[141])]
                )
              terminator: <Op_Semi ";">
            )
            (Sentence child:(C {(exit)} {(1)}) terminator:<Op_Semi ";">)
          ]
          spids: [133]
        )
      ]
      op_id: Op_DPipe
    )
    (FuncDef
      name: cleanup
      body: 
        (BraceGroup
          children: [(C {(rm)} {(-fr)} {(DQ ($ VSub_Name "$TEST_TMPDIR")) (/) (Lit_Other "*")})]
          spids: [159]
        )
      spids: [153 158]
    )
    (C {(trap)} {(cleanup)} {(EXIT)})
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_EqualTilde
              left: {(DQ ($ VSub_Name "$JAVAC"))}
              right: 
                {(Lit_Other "^") ("(") (/) ("|") (Lit_Other "[") (Lit_Other "^") (/) (Lit_Other "]") 
                  (Lit_Other "+") (Lit_Other "$") (")")
                }
            )
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:JAVAC)
              op: Equal
              rhs: {(DQ ($ VSub_Name "$PWD") (/) ($ VSub_Name "$JAVAC"))}
              spids: [212]
            )
          ]
          spids: [212]
        )
      ]
      op_id: Op_DPipe
    )
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_EqualTilde
              left: {(DQ ($ VSub_Name "$JAR"))}
              right: 
                {(Lit_Other "^") ("(") (/) ("|") (Lit_Other "[") (Lit_Other "^") (/) (Lit_Other "]") 
                  (Lit_Other "+") (Lit_Other "$") (")")
                }
            )
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:JAR)
              op: Equal
              rhs: {(DQ ($ VSub_Name "$PWD") (/) ($ VSub_Name "$JAR"))}
              spids: [243]
            )
          ]
          spids: [243]
        )
      ]
      op_id: Op_DPipe
    )
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_EqualTilde
              left: {(DQ ($ VSub_Name "$IJAR"))}
              right: 
                {(Lit_Other "^") ("(") (/) ("|") (Lit_Other "[") (Lit_Other "^") (/) (Lit_Other "]") 
                  (Lit_Other "+") (Lit_Other "$") (")")
                }
            )
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:IJAR)
              op: Equal
              rhs: {(DQ ($ VSub_Name "$PWD") (/) ($ VSub_Name "$IJAR"))}
              spids: [274]
            )
          ]
          spids: [274]
        )
      ]
      op_id: Op_DPipe
    )
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_EqualTilde
              left: {(DQ ($ VSub_Name "$UNZIP"))}
              right: 
                {(Lit_Other "^") ("(") (/) ("|") (Lit_Other "[") (Lit_Other "^") (/) (Lit_Other "]") 
                  (Lit_Other "+") (Lit_Other "$") (")")
                }
            )
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:UNZIP)
              op: Equal
              rhs: {(DQ ($ VSub_Name "$PWD") (/) ($ VSub_Name "$UNZIP"))}
              spids: [305]
            )
          ]
          spids: [305]
        )
      ]
      op_id: Op_DPipe
    )
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_EqualTilde
              left: {(DQ ($ VSub_Name "$ZIP"))}
              right: 
                {(Lit_Other "^") ("(") (/) ("|") (Lit_Other "[") (Lit_Other "^") (/) (Lit_Other "]") 
                  (Lit_Other "+") (Lit_Other "$") (")")
                }
            )
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:ZIP)
              op: Equal
              rhs: {(DQ ($ VSub_Name "$PWD") (/) ($ VSub_Name "$ZIP"))}
              spids: [336]
            )
          ]
          spids: [336]
        )
      ]
      op_id: Op_DPipe
    )
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_EqualTilde
              left: {(DQ ($ VSub_Name "$JAVAP"))}
              right: 
                {(Lit_Other "^") ("(") (/) ("|") (Lit_Other "[") (Lit_Other "^") (/) (Lit_Other "]") 
                  (Lit_Other "+") (Lit_Other "$") (")")
                }
            )
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:JAVAP)
              op: Equal
              rhs: {(DQ ($ VSub_Name "$PWD") (/) ($ VSub_Name "$JAVAP"))}
              spids: [367]
            )
          ]
          spids: [367]
        )
      ]
      op_id: Op_DPipe
    )
    (AndOr
      children: [
        (DBracket
          expr: 
            (BoolBinary
              op_id: BoolBinary_EqualTilde
              left: {(DQ ($ VSub_Name "$ZIP_COUNT"))}
              right: 
                {(Lit_Other "^") ("(") (/) ("|") (Lit_Other "[") (Lit_Other "^") (/) (Lit_Other "]") 
                  (Lit_Other "+") (Lit_Other "$") (")")
                }
            )
        )
        (Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (LhsName name:ZIP_COUNT)
              op: Equal
              rhs: {(DQ ($ VSub_Name "$PWD") (/) ($ VSub_Name "$ZIP_COUNT"))}
              spids: [398]
            )
          ]
          spids: [398]
        )
      ]
      op_id: Op_DPipe
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:IJAR_SRCDIR)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(dirname)} {(${ VSub_Name IJAR)})])
                left_token: <Left_CommandSub "$(">
                spids: [407 413]
              )
            }
          spids: [406]
        )
      ]
      spids: [406]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:A_JAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/A.jar)}
          spids: [415]
        )
      ]
      spids: [415]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:A_INTERFACE_JAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/A-interface.jar)}
          spids: [419]
        )
      ]
      spids: [419]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:A_ZIP_JAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/A_zip.jar)}
          spids: [423]
        )
      ]
      spids: [423]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:A_ZIP_INTERFACE_JAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/A_zip-interface.jar)}
          spids: [427]
        )
      ]
      spids: [427]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:W_JAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/W.jar)}
          spids: [431]
        )
      ]
      spids: [431]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:BOTTLES_JAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/bottles.jar)}
          spids: [435]
        )
      ]
      spids: [435]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:JAR_WRONG_CENTRAL_DIR)
          op: Equal
          rhs: {($ VSub_Name "$IJAR_SRCDIR") (/test/libwrongcentraldir.jar)}
          spids: [439]
        )
      ]
      spids: [439]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:IJAR_WRONG_CENTRAL_DIR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/wrongcentraldir_interface.jar)}
          spids: [443]
        )
      ]
      spids: [443]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OBJECT_JAVA)
          op: Equal
          rhs: {($ VSub_Name "$IJAR_SRCDIR") (/test/Object.java)}
          spids: [447]
        )
      ]
      spids: [447]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OBJECT_JAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/object.jar)}
          spids: [451]
        )
      ]
      spids: [451]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:OBJECT_IJAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/object_interface.jar)}
          spids: [455]
        )
      ]
      spids: [455]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TYPEANN2_JAR)
          op: Equal
          rhs: {($ VSub_Name "$IJAR_SRCDIR") (/test/libtypeannotations2.jar)}
          spids: [459]
        )
      ]
      spids: [459]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TYPEANN2_IJAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/typeannotations2_interface.jar)}
          spids: [463]
        )
      ]
      spids: [463]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:TYPEANN2_JAVA)
          op: Equal
          rhs: {($ VSub_Name "$IJAR_SRCDIR") (/test/TypeAnnotationTest2.java)}
          spids: [467]
        )
      ]
      spids: [467]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:INVOKEDYNAMIC_JAR)
          op: Equal
          rhs: {($ VSub_Name "$IJAR_SRCDIR") (/test/libinvokedynamic.jar)}
          spids: [471]
        )
      ]
      spids: [471]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:INVOKEDYNAMIC_IJAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/invokedynamic_interface.jar)}
          spids: [475]
        )
      ]
      spids: [475]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:METHODPARAM_JAR)
          op: Equal
          rhs: {($ VSub_Name "$IJAR_SRCDIR") (/test/libmethodparameters.jar)}
          spids: [479]
        )
      ]
      spids: [479]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:METHODPARAM_IJAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/methodparameters_interface.jar)}
          spids: [483]
        )
      ]
      spids: [483]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SOURCEDEBUGEXT_JAR)
          op: Equal
          rhs: {($ VSub_Name "$IJAR_SRCDIR") (/test/source_debug_extension.jar)}
          spids: [487]
        )
      ]
      spids: [487]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:SOURCEDEBUGEXT_IJAR)
          op: Equal
          rhs: {($ VSub_Name "$TEST_TMPDIR") (/source_debug_extension.jar)}
          spids: [491]
        )
      ]
      spids: [491]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CENTRAL_DIR_LARGEST_REGULAR)
          op: Equal
          rhs: {($ VSub_Name "$IJAR_SRCDIR") (/test/largest_regular.jar)}
          spids: [495]
        )
      ]
      spids: [495]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CENTRAL_DIR_SMALLEST_ZIP64)
          op: Equal
          rhs: {($ VSub_Name "$IJAR_SRCDIR") (/test/smallest_zip64.jar)}
          spids: [499]
        )
      ]
      spids: [499]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CENTRAL_DIR_ZIP64)
          op: Equal
          rhs: {($ VSub_Name "$IJAR_SRCDIR") (/test/definitely_zip64.jar)}
          spids: [503]
        )
      ]
      spids: [503]
    )
    (FuncDef
      name: set_file_length
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {(perl)} {(-e)} 
                  {(SQ <"open(FH, \">>$ARGV[0]\") && truncate(FH, $ARGV[1]) or fail $!">)} {(DQ ($ VSub_At "$@"))}
                )
                (AndOr
                  children: [
                    (DBracket
                      expr: 
                        (BoolBinary
                          op_id: BoolBinary_GlobDEqual
                          left: 
                            {
                              (DQ 
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [(C {(statfmt)} {($ VSub_Number "$1")})]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [551 555]
                                )
                              )
                            }
                          right: {(DQ ($ VSub_Number "$2"))}
                        )
                    )
                    (C {(fail)} {(DQ ("set_file_length failed"))})
                  ]
                  op_id: Op_DPipe
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [530]
        )
      spids: [524 529]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:expected_output) op:Equal rhs:{(DQ )} spids:[587])]
      spids: [587]
    )
    (FuncDef
      name: check_consistent_file_contents
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:actual)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(cat)} {($ VSub_Number "$1")})
                                    (C {(${ VSub_Name MD5SUM)})
                                    (C {(awk)} {(SQ <"{ print $1; }">)})
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [604 622]
                        )
                      )
                    }
                  spids: [602]
                )
              ]
              spids: [600]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:filename)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(echo)} {($ VSub_Number "$1")})
                                    (C {(${ VSub_Name MD5SUM)})
                                    (C {(awk)} {(SQ <"{ print $1; }">)})
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [630 648]
                        )
                      )
                    }
                  spids: [628]
                )
              ]
              spids: [626]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:expected)
                  op: Equal
                  rhs: {(DQ ($ VSub_Name "$actual"))}
                  spids: [654]
                )
              ]
              spids: [652]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (Subshell
                          child: 
                            (Pipeline
                              children: [
                                (C {(echo)} {(DQ (${ VSub_Name expected_output))})
                                (C {(grep)} {(-q)} {(DQ ("^") (${ VSub_Name filename) (" "))})
                              ]
                              negated: False
                            )
                          spids: [662 684]
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (AndOr
                      children: [
                        (Pipeline
                          children: [
                            (C {(echo)} {(DQ (${ VSub_Name expected_output))})
                            (C {(grep)} {(-q)} 
                              {
                                (DQ ("^") (${ VSub_Name filename) (" ") (${ VSub_Name actual) 
                                  (Lit_Other "$")
                                )
                              }
                            )
                          ]
                          negated: False
                        )
                        (BraceGroup
                          children: [
                            (C {(ls)} {(-l)} {(DQ ($ VSub_Number "$1"))})
                            (C {(fail)} {(DQ ("output file contents differ"))})
                          ]
                          spids: [718]
                        )
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [-1 687]
                )
              ]
              else_action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:expected_output)
                      op: Equal
                      rhs: 
                        {
                          (DQ ($ VSub_Name "$expected_output") ($ VSub_Name "$filename") (" ") 
                            ($ VSub_Name "$actual") ("\n")
                          )
                        }
                      spids: [743]
                    )
                  ]
                  spids: [743]
                )
              ]
              spids: [740 753]
            )
          ]
          spids: [597]
        )
      spids: [591 596]
    )
    (FuncDef
      name: set_up
      body: 
        (BraceGroup
          children: [(C {(mkdir)} {(-p)} {($ VSub_Name "$TEST_TMPDIR") (/classes)})]
          spids: [764]
        )
      spids: [758 763]
    )
    (FuncDef
      name: tear_down
      body: 
        (BraceGroup
          children: [(C {(rm)} {(-fr)} {($ VSub_Name "$TEST_TMPDIR") (/classes)})]
          spids: [783]
        )
      spids: [777 782]
    )
    (FuncDef
      name: test_output_bigger_than_input
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {($ VSub_Name "$JAVAC")} {(-g)} {(-d)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} 
                  {($ VSub_Name "$IJAR_SRCDIR") (/test/WellCompressed) (Lit_Other "*") (.java)}
                )
                (C {(fail)} {(DQ ("javac failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$JAR")} {(cf)} {($ VSub_Name "$W_JAR")} {(-C)} 
                  {($ VSub_Name "$TEST_TMPDIR") (/classes)} {(.)}
                )
                (C {(fail)} {(DQ ("jar failed"))})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:W_INTERFACE_JAR)
                  op: Equal
                  rhs: {($ VSub_Name "$TEST_TMPDIR") (/W-interface.jar)}
                  spids: [861]
                )
              ]
              spids: [861]
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$W_JAR")} {($ VSub_Name "$W_INTERFACE_JAR")})
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:W_JAR_SIZE)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(statfmt)} {($ VSub_Name "$W_JAR")})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [886 890]
                      )
                    }
                  spids: [885]
                )
              ]
              spids: [885]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:W_INTERFACE_JAR_SIZE)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(statfmt)} {($ VSub_Name "$W_INTERFACE_JAR")})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [894 898]
                      )
                    }
                  spids: [893]
                )
              ]
              spids: [893]
            )
            (AndOr
              children: [
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_gt
                      left: {($ VSub_Name "$W_INTERFACE_JAR_SIZE")}
                      right: {($ VSub_Name "$W_JAR_SIZE")}
                    )
                )
                (C {(fail)} {(DQ ("interface jar should be bigger"))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [805]
        )
      spids: [799 804]
    )
    (FuncDef
      name: test_class_more_64k
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BOTTLES_JAVA)
                  op: Equal
                  rhs: {($ VSub_Name "$TEST_TMPDIR") (/BottlesOnTheWall.java)}
                  spids: [939]
                )
              ]
              spids: [939]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ("public class BottlesOnTheWall {"))}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$BOTTLES_JAVA")}
                  spids: [950]
                )
              ]
            )
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(seq)} {(1)} {(16384)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [961 967]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ ("  public int getBottleOnTheWall") (${ VSub_Name i) ("() { return ") 
                            (${ VSub_Name i) ("; }")
                          )
                        }
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_DGreat
                          fd: -1
                          arg_word: {($ VSub_Name "$BOTTLES_JAVA")}
                          spids: [987]
                        )
                      ]
                    )
                  ]
                  spids: [970 992]
                )
              spids: [960 968]
            )
            (SimpleCommand
              words: [{(echo)} {(DQ ("}"))}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: -1
                  arg_word: {($ VSub_Name "$BOTTLES_JAVA")}
                  spids: [1002]
                )
              ]
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$JAVAC")} {(-g)} {(-d)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} 
                  {($ VSub_Name "$BOTTLES_JAVA")}
                )
                (C {(fail)} {(DQ ("javac failed"))})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BOTTLES_INTERFACE_JAR)
                  op: Equal
                  rhs: {($ VSub_Name "$TEST_TMPDIR") (/bottles-interface.jar)}
                  spids: [1028]
                )
              ]
              spids: [1028]
            )
            (ForEach
              iter_name: flag0
              iter_words: [{(SQ )} {(SQ <0>)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (C {($ VSub_Name "$JAR")} {(c) (DQ (${ VSub_Name flag0)) (f)} 
                          {($ VSub_Name "$BOTTLES_JAR")} {(-C)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} {(.)}
                        )
                        (C {(fail)} {(DQ ("jar failed"))})
                      ]
                      op_id: Op_DPipe
                    )
                    (AndOr
                      children: [
                        (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$BOTTLES_JAR")} 
                          {($ VSub_Name "$BOTTLES_INTERFACE_JAR")}
                        )
                        (C {(fail)} {(DQ ("ijar failed"))})
                      ]
                      op_id: Op_DPipe
                    )
                    (C {(check_consistent_file_contents)} {($ VSub_Name "$BOTTLES_INTERFACE_JAR")})
                  ]
                  spids: [1052 1103]
                )
              spids: [1043 1050]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:BOTTLES_INTERFACE_INTERFACE_JAR)
                  op: Equal
                  rhs: {($ VSub_Name "$TEST_TMPDIR") (/bottles-interface-interface.jar)}
                  spids: [1115]
                )
              ]
              spids: [1115]
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$BOTTLES_INTERFACE_JAR")} 
                  {($ VSub_Name "$BOTTLES_INTERFACE_INTERFACE_JAR")}
                )
                (C {(fail)} {(DQ ("ijar cannot produce class files with body longer than 64K"))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [928]
        )
      spids: [922 927]
    )
    (FuncDef
      name: test_ijar_output
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {($ VSub_Name "$JAVAC")} {(-g)} {(-d)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} 
                  {($ VSub_Name "$IJAR_SRCDIR") (/test/A.java)}
                )
                (C {(fail)} {(DQ ("javac failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$JAR")} {(cf)} {($ VSub_Name "$A_JAR")} {(-C)} 
                  {($ VSub_Name "$TEST_TMPDIR") (/classes)} {(.)}
                )
                (C {(fail)} {(DQ ("jar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$A_JAR")} {($ VSub_Name "$A_INTERFACE_JAR")})
                (C {(fail)} {(DQ ("ijar failed."))})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:expected) op:Equal rhs:{(5)} spids:[1236])]
              spids: [1236]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {($ VSub_Name "$JAR")} {(tvf)} {($ VSub_Name "$A_INTERFACE_JAR")})
                                  (C {(wc)} {(-l)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1241 1253]
                      )
                    }
                  spids: [1240]
                )
              ]
              spids: [1240]
            )
            (C {(check_eq)} {($ VSub_Name "$expected")} {($ VSub_Name "$lines")} 
              {(DQ ("Interface jar should have ") ($ VSub_Name "$expected") (" entries!"))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {($ VSub_Name "$JAVAP")} {(-private)} {(-classpath)} 
                                    {($ VSub_Name "$A_JAR")} {(A)}
                                  )
                                  (C {(grep)} {(priv)})
                                  (C {(wc)} {(-l)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1275 1297]
                      )
                    }
                  spids: [1274]
                )
              ]
              spids: [1274]
            )
            (C {(check_eq)} {(2)} {($ VSub_Name "$lines")} 
              {(DQ ("Input jar should have 2 private members!"))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {($ VSub_Name "$JAVAP")} {(-private)} {(-classpath)} 
                                    {($ VSub_Name "$A_INTERFACE_JAR")} {(A)}
                                  )
                                  (C {(grep)} {(priv)})
                                  (C {(wc)} {(-l)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1312 1334]
                      )
                    }
                  spids: [1311]
                )
              ]
              spids: [1311]
            )
            (C {(check_eq)} {(0)} {($ VSub_Name "$lines")} 
              {(DQ ("Interface jar should have no private members!"))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {($ VSub_Name "$JAVAP")} {(-private)} {(-classpath)} 
                                    {($ VSub_Name "$A_INTERFACE_JAR")} {(A)}
                                  )
                                  (C {(grep)} {(clinit)})
                                  (C {(wc)} {(-l)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1349 1371]
                      )
                    }
                  spids: [1348]
                )
              ]
              spids: [1348]
            )
            (C {(check_eq)} {(0)} {($ VSub_Name "$lines")} 
              {(DQ ("Interface jar should have no class initializers!"))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {($ VSub_Name "$JAVAP")} {(-c)} {(-private)} {(-classpath)} 
                                    {($ VSub_Name "$A_JAR")} {(A)}
                                  )
                                  (C {(grep)} {(Code) (Lit_Other ":")})
                                  (C {(wc)} {(-l)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1392 1417]
                      )
                    }
                  spids: [1391]
                )
              ]
              spids: [1391]
            )
            (C {(check_eq)} {(5)} {($ VSub_Name "$lines")} 
              {(DQ ("Input jar should have 5 method bodies!"))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {($ VSub_Name "$JAVAP")} {(-c)} {(-private)} {(-classpath)} 
                                    {($ VSub_Name "$A_INTERFACE_JAR")} {(A)}
                                  )
                                  (C {(grep)} {(Code) (Lit_Other ":")})
                                  (C {(wc)} {(-l)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [1432 1457]
                      )
                    }
                  spids: [1431]
                )
              ]
              spids: [1431]
            )
            (C {(check_eq)} {(0)} {($ VSub_Name "$lines")} 
              {(DQ ("Interface jar should have no method bodies!"))}
            )
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {($ VSub_Name "$JAVAP")} {(-c)} {(-private)} {(-classpath)} 
                      {($ VSub_Name "$A_JAR")} {(A)}
                    )
                    (C {(grep)} {(-sq)} {(foofoofoofoo)})
                  ]
                  negated: False
                )
                (C {(fail)} {(DQ ("Input jar should have code constants!"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {($ VSub_Name "$JAVAP")} {(-c)} {(-private)} {(-classpath)} 
                      {($ VSub_Name "$A_INTERFACE_JAR")} {(A)}
                    )
                    (C {(grep)} {(-sq)} {(foofoofoofoo)})
                  ]
                  negated: False
                )
                (C {(fail)} {(DQ ("Interface jar should have no code constants!"))})
              ]
              op_id: Op_DAmp
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [
                    {($ VSub_Name "$JAVAC")}
                    {(-Xlint)}
                    {(-classpath)}
                    {($ VSub_Name "$A_INTERFACE_JAR")}
                    {(-g)}
                    {(-d)}
                    {($ VSub_Name "$TEST_TMPDIR") (/classes)}
                    {($ VSub_Name "$IJAR_SRCDIR") (/test/B.java)}
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 2
                      arg_word: {($ VSub_Name "$TEST_log")}
                      spids: [1566]
                    )
                  ]
                )
                (C {(fail)} {(DQ ("Can't compile B!"))})
              ]
              op_id: Op_DPipe
            )
            (C {(expect_log)} {(SQ <"deprecatedMethod.*in A has been deprecated">)} 
              {(DQ ("ijar has lost @Deprecated annotation!"))}
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$JAVA")} {(-classpath)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} {(B)})
                (C {(exit)} {(1)})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:A_INTERFACE_INTERFACE_JAR)
                  op: Equal
                  rhs: {($ VSub_Name "$TEST_TMPDIR") (/A-interface-interface.jar)}
                  spids: [1622]
                )
              ]
              spids: [1622]
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$A_INTERFACE_JAR")} 
                  {($ VSub_Name "$A_INTERFACE_INTERFACE_JAR")}
                )
                (C {(fail)} {(DQ ("ijar failed."))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {(cmp)} {($ VSub_Name "$A_INTERFACE_JAR")} 
                  {($ VSub_Name "$A_INTERFACE_INTERFACE_JAR")}
                )
                (C {(fail)} {(DQ ("ijar transformation is not idempotent"))})
              ]
              op_id: Op_DPipe
            )
            (C {(check_eq)} {(0)} 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (Pipeline
                          children: [
                            (C {($ VSub_Name "$JAR")} {(tf)} {($ VSub_Name "$A_INTERFACE_JAR")})
                            (C {(grep)} {(-v)} 
                              {(EscapedLiteralPart token:<Lit_EscapedChar "\\\\">) (.class) 
                                (Lit_Other "$")
                              }
                            )
                            (C {(wc)} {(-l)})
                          ]
                          negated: False
                        )
                      ]
                    )
                  left_token: <Left_CommandSub "$(">
                  spids: [1668 1690]
                )
              } {(DQ ("Interface jar should contain only .class files!"))}
            )
            (C {(check_eq)} {(0)} 
              {
                (CommandSubPart
                  command_list: 
                    (CommandList
                      children: [
                        (Pipeline
                          children: [
                            (SimpleCommand
                              words: [{($ VSub_Name "$JAR")} {(tvf)} {($ VSub_Name "$A_INTERFACE_JAR")}]
                              more_env: [(env_pair name:TZ val:{(UTC)} spids:[1710])]
                            )
                            (C {(grep)} {(-v)} {(SQ <"Fri Nov 30 00:00:00 UTC 1979">)})
                            (C {(wc)} {(-l)})
                          ]
                          negated: False
                        )
                      ]
                    )
                  left_token: <Left_CommandSub "$(">
                  spids: [1709 1735]
                )
              } {(DQ ("Interface jar contained non-zero timestamps!"))}
            )
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (C {($ VSub_Name "$JAVAP")} {(-classpath)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} 
                      {(-c)} {(B)}
                    )
                    (C {(grep)} {(-sq)} {(ldc2_w.) (Lit_Other "*") (123)})
                  ]
                  negated: False
                )
                (C {(fail)} {(DQ ("ConstantValue not propagated to class B!"))})
              ]
              op_id: Op_DPipe
            )
            (C {(rm)} {(-fr)} {($ VSub_Name "$TEST_TMPDIR") (/classes)})
            (AndOr
              children: [
                (C {(mkdir)} {(-p)} {($ VSub_Name "$TEST_TMPDIR") (/classes)})
                (C {(fail)} {(DQ ("mkdir ") ($ VSub_Name "$TEST_TMPDIR") ("/classes failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$JAVAC")} {(-g)} {(-d)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} 
                  {($ VSub_Name "$IJAR_SRCDIR") (/test/A.java)}
                )
                (C {(fail)} {(DQ ("javac failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$JAR")} {(cf)} {($ VSub_Name "$A_JAR")} 
                  {($ VSub_Name "$TEST_TMPDIR") (/classes/A.class)}
                )
                (C {(fail)} {(DQ ("jar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$ZIP")} {($ VSub_Name "$A_ZIP_JAR")} 
                  {($ VSub_Name "$TEST_TMPDIR") (/classes/A.class)}
                )
                (C {(fail)} {(DQ ("zip failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$A_JAR")} {($ VSub_Name "$A_INTERFACE_JAR")})
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$A_ZIP_JAR")} 
                  {($ VSub_Name "$A_ZIP_INTERFACE_JAR")}
                )
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {(cmp)} {($ VSub_Name "$A_INTERFACE_JAR")} {($ VSub_Name "$A_ZIP_INTERFACE_JAR")})
                (C {(fail)} {(DQ ("ijars from jar and zip are different"))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [1144]
        )
      spids: [1138 1143]
    )
    (FuncDef
      name: do_test_large_file
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {($ VSub_Name "$JAVAC")} {(-g)} {(-d)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} 
                  {($ VSub_Name "$IJAR_SRCDIR") (/test/A.java)}
                )
                (C {(fail)} {(DQ ("javac failed"))})
              ]
              op_id: Op_DPipe
            )
            (ForEach
              iter_name: flag0
              iter_words: [{(SQ )} {(SQ <0>)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (C {($ VSub_Name "$JAR")} {(c) (DQ (${ VSub_Name flag0)) (f)} 
                          {($ VSub_Name "$A_JAR")} {(-C)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} {(.)}
                        )
                        (C {(fail)} {(DQ ("jar failed"))})
                      ]
                      op_id: Op_DPipe
                    )
                    (AndOr
                      children: [
                        (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$A_JAR")} 
                          {($ VSub_Name "$A_INTERFACE_JAR")}
                        )
                        (C {(fail)} {(DQ ("ijar failed."))})
                      ]
                      op_id: Op_DPipe
                    )
                    (C {(check_consistent_file_contents)} {($ VSub_Name "$A_INTERFACE_JAR")})
                  ]
                  spids: [1977 2028]
                )
              spids: [1968 1975]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:extra_args) op:Equal rhs:{(DQ )} spids:[2036])]
              spids: [2036]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_n
                              child: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Number 1>
                                      suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(SQ )})
                                      spids: [2048 2051]
                                    )
                                  )
                                }
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (ForEach
                      iter_name: file
                      iter_words: [
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [
                                  (C {(find)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} {(-name)} 
                                    {(SQ <"*.class">)}
                                  )
                                ]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [2066 2077]
                          )
                        }
                      ]
                      do_arg_iter: False
                      body: 
                        (DoGroup
                          children: [
                            (C {(set_file_length)} {(DQ ($ VSub_Name "$file"))} 
                              {(DQ ($ VSub_Number "$1"))}
                            )
                          ]
                          spids: [2080 2094]
                        )
                      spids: [2065 2078]
                    )
                  ]
                  spids: [-1 2057]
                )
              ]
              spids: [-1 2097]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_n
                              child: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      token: <VSub_Number 2>
                                      suffix_op: (StringUnary op_id:VTest_Hyphen arg_word:{(SQ )})
                                      spids: [2107 2110]
                                    )
                                  )
                                }
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(set_file_length)} {($ VSub_Name "$TEST_TMPDIR") (/zeroes.data)} 
                      {(DQ ($ VSub_Number "$2"))}
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:extra_args)
                          op: Equal
                          rhs: {(DQ ("-C ") ($ VSub_Name "$TEST_TMPDIR") (" zeroes.data"))}
                          spids: [2129]
                        )
                      ]
                      spids: [2129]
                    )
                  ]
                  spids: [-1 2116]
                )
              ]
              spids: [-1 2137]
            )
            (ForEach
              iter_name: flag0
              iter_words: [{(SQ )} {(SQ <0>)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (AndOr
                      children: [
                        (C {($ VSub_Name "$JAR")} {(c) (DQ (${ VSub_Name flag0)) (f)} 
                          {($ VSub_Name "$A_JAR")} {($ VSub_Name "$extra_args")} {(-C)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} {(.)}
                        )
                        (C {(fail)} {(DQ ("jar failed"))})
                      ]
                      op_id: Op_DPipe
                    )
                    (AndOr
                      children: [
                        (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$A_JAR")} 
                          {($ VSub_Name "$A_INTERFACE_JAR")}
                        )
                        (C {(fail)} {(DQ ("ijar failed."))})
                      ]
                      op_id: Op_DPipe
                    )
                    (C {(check_consistent_file_contents)} {($ VSub_Name "$A_INTERFACE_JAR")})
                  ]
                  spids: [2155 2208]
                )
              spids: [2146 2153]
            )
          ]
          spids: [1929]
        )
      spids: [1923 1928]
    )
    (FuncDef
      name: test_large_files
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: size
              iter_words: [
                {
                  (ArithSubPart
                    anode: 
                      (ArithBinary
                        op_id: Arith_Star
                        left: (ArithWord w:{(Lit_Digits 1024)})
                        right: (ArithWord w:{(Lit_Digits 1024)})
                      )
                    spids: [2236 2241]
                  )
                }
                {
                  (ArithSubPart
                    anode: 
                      (ArithBinary
                        op_id: Arith_Star
                        left: 
                          (ArithBinary
                            op_id: Arith_Star
                            left: (ArithWord w:{(Lit_Digits 15)})
                            right: (ArithWord w:{(Lit_Digits 1024)})
                          )
                        right: (ArithWord w:{(Lit_Digits 1024)})
                      )
                    spids: [2243 2250]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [(C {(do_test_large_file)} {($ VSub_Name "$size")})]
                  spids: [2253 2261]
                )
              spids: [2235 2251]
            )
          ]
          spids: [2219]
        )
      spids: [2213 2218]
    )
    (FuncDef
      name: test_z_2gb_plus_data_file
      body: 
        (BraceGroup
          children: [
            (C {(do_test_large_file)} {(SQ )} 
              {
                (ArithSubPart
                  anode: 
                    (ArithBinary
                      op_id: Arith_Star
                      left: 
                        (ArithBinary
                          op_id: Arith_Star
                          left: 
                            (ArithBinary
                              op_id: Arith_Star
                              left: (ArithWord w:{(Lit_Digits 22)})
                              right: (ArithWord w:{(Lit_Digits 102)})
                            )
                          right: (ArithWord w:{(Lit_Digits 1024)})
                        )
                      right: (ArithWord w:{(Lit_Digits 1024)})
                    )
                  spids: [2299 2308]
                )
              }
            )
          ]
          spids: [2275]
        )
      spids: [2269 2274]
    )
    (FuncDef
      name: test_upper_bound_up_2gb
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:DIR)
                  op: Equal
                  rhs: {($ VSub_Name "$TEST_TMPDIR") (/ManyLargeClasses)}
                  spids: [2325]
                )
              ]
              spids: [2325]
            )
            (C {(mkdir)} {(-p)} {($ VSub_Name "$DIR") (/classes)})
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(seq)} {(200)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [2344 2348]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (SimpleCommand
                      words: [
                        {(printf)}
                        {
                          (DQ ("class C") (${ VSub_Name i) (" {}") 
                            (EscapedLiteralPart
                              token: <Lit_EscapedChar "\\n">
                            )
                          )
                        }
                      ]
                      redirects: [
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {($ VSub_Name "$DIR") (/C) (${ VSub_Name i) (.java)}
                          spids: [2365]
                        )
                      ]
                    )
                  ]
                  spids: [2351 2375]
                )
              spids: [2343 2349]
            )
            (Subshell
              child: 
                (AndOr
                  children: [
                    (C {(cd)} {($ VSub_Name "$DIR")})
                    (C {($ VSub_Name "$JAVAC")} {(-d)} {(classes)} {(Lit_Other "*") (.java)})
                  ]
                  op_id: Op_DAmp
                )
              spids: [2378 2393]
            )
            (ForEach
              iter_name: i
              iter_words: [
                {
                  (CommandSubPart
                    command_list: (CommandList children:[(C {(seq)} {(200)})])
                    left_token: <Left_CommandSub "$(">
                    spids: [2402 2406]
                  )
                }
              ]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (C {(set_file_length)} 
                      {($ VSub_Name "$DIR") (/classes/C) (${ VSub_Name i) (.class)} 
                      {
                        (ArithSubPart
                          anode: 
                            (ArithBinary
                              op_id: Arith_Star
                              left: 
                                (ArithBinary
                                  op_id: Arith_Star
                                  left: (ArithWord w:{(Lit_Digits 15)})
                                  right: (ArithWord w:{(Lit_Digits 1024)})
                                )
                              right: (ArithWord w:{(Lit_Digits 1024)})
                            )
                          spids: [2421 2428]
                        )
                      }
                    )
                  ]
                  spids: [2409 2431]
                )
              spids: [2401 2407]
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$JAR")} {(cf)} {($ VSub_Name "$DIR") (/ManyLargeClasses.jar)} {(-C)} 
                  {($ VSub_Name "$DIR") (/classes)} {(.)}
                )
                (C {(fail)} {(DQ ("jar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$DIR") (/ManyLargeClasses.jar)} 
                  {($ VSub_Name "$DIR") (/ManyLargeClasses.ijar)}
                )
                (C {(fail)} {(DQ ("ijar failed."))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [2322]
        )
      spids: [2316 2321]
    )
    (FuncDef
      name: test_empty_jar
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {($ VSub_Name "$TEST_TMPDIR") (/empty)}
                  spids: [2489]
                )
              ]
            )
            (SimpleCommand
              words: [
                {($ VSub_Name "$ZIP")}
                {($ VSub_Name "$TEST_TMPDIR") (/noclasses.jar)}
                {($ VSub_Name "$TEST_TMPDIR") (/empty)}
              ]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[2502])
                (Redir op_id:Redir_GreatAnd fd:2 arg_word:{(1)} spids:[2505])
              ]
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$TEST_TMPDIR") (/noclasses.jar)})
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (Pipeline
                  children: [
                    (SimpleCommand
                      words: [
                        {($ VSub_Name "$UNZIP")}
                        {(-qql)}
                        {($ VSub_Name "$TEST_TMPDIR") (/noclasses-interface.jar)}
                      ]
                      redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[2530])]
                    )
                    (C {(grep)} {(-q)} {(.)})
                  ]
                  negated: False
                )
                (C {(fail)} {(DQ ("noclasses-interface.jar is completely empty!"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$JAVAC")} {(-classpath)} 
                  {($ VSub_Name "$TEST_TMPDIR") (/noclasses-interface.jar)} {(-d)} {($ VSub_Name "$TEST_TMPDIR") (/classes)} {($ VSub_Name "$IJAR_SRCDIR") (/test/A.java)}
                )
                (C {(fail)} {(DQ ("javac noclasses-interface.jar failed"))})
              ]
              op_id: Op_DPipe
            )
            (C {(rm)} 
              (BracedWordTree
                parts: [
                  ($ VSub_Name "$TEST_TMPDIR")
                  (/)
                  (BracedAltPart
                    words: [{(empty)} {(noclasses.jar)} {(noclasses-interface.jar)}]
                  )
                ]
              )
            )
          ]
          spids: [2482]
        )
      spids: [2476 2481]
    )
    (FuncDef
      name: test_wrong_centraldir
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$JAR_WRONG_CENTRAL_DIR")} 
                  {($ VSub_Name "$IJAR_WRONG_CENTRAL_DIR")}
                )
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:IJAR_FILES)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {($ VSub_Name "$UNZIP")} {(-qql)} 
                                    {($ VSub_Name "$IJAR_WRONG_CENTRAL_DIR")}
                                  )
                                  (C {(wc)} {(-l)})
                                  (C {(xargs)} {(echo)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [2628 2646]
                      )
                    }
                  spids: [2627]
                )
              ]
              spids: [2627]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobNEqual
                              left: {($ VSub_Name "$IJAR_FILES")}
                              right: {(2)}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [(C {(fail)} {(DQ ("ijar removed files"))})]
                  spids: [-1 2662]
                )
              ]
              spids: [-1 2672]
            )
          ]
          spids: [2601]
        )
      spids: [2595 2600]
    )
    (FuncDef
      name: test_type_annotation
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$TYPEANN2_JAR")} 
                  {($ VSub_Name "$TYPEANN2_IJAR")}
                )
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [
                    {($ VSub_Name "$JAVAP")}
                    {(-classpath)}
                    {($ VSub_Name "$TYPEANN2_IJAR")}
                    {(-v)}
                    {(Util)}
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_GreatAnd
                      fd: -1
                      arg_word: {($ VSub_Name "$TEST_log")}
                      spids: [2719]
                    )
                  ]
                )
                (C {(fail)} {(DQ ("javap failed"))})
              ]
              op_id: Op_DPipe
            )
            (C {(expect_log)} {(DQ (RuntimeVisibleTypeAnnotations))} 
              {(DQ ("RuntimeVisibleTypeAnnotations not preserved!"))}
            )
            (C {(cp)} {($ VSub_Name "$TYPEANN2_JAVA")} 
              {($ VSub_Name "$TEST_TMPDIR") (/TypeAnnotationTest2.java)}
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$JAVAC")} 
                  {(-J-Xbootclasspath/p) (Lit_Other ":") ($ VSub_Name "$LANGTOOLS8")} {($ VSub_Name "$TEST_TMPDIR") (/TypeAnnotationTest2.java)} {(-cp)} {($ VSub_Name "$TYPEANN2_IJAR")}
                )
                (C {(fail)} {(DQ ("javac failed"))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [2683]
        )
      spids: [2677 2682]
    )
    (FuncDef
      name: test_invokedynamic
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$INVOKEDYNAMIC_JAR")} 
                  {($ VSub_Name "$INVOKEDYNAMIC_IJAR")}
                )
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {($ VSub_Name "$JAVAP")} {(-c)} {(-private)} {(-classpath)} 
                                    {($ VSub_Name "$INVOKEDYNAMIC_JAR")} {(ClassWithLambda)}
                                  )
                                  (C {(grep)} {(Code) (Lit_Other ":")})
                                  (C {(wc)} {(-l)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [2805 2830]
                      )
                    }
                  spids: [2804]
                )
              ]
              spids: [2804]
            )
            (C {(check_eq)} {(4)} {($ VSub_Name "$lines")} 
              {(DQ ("Input jar should have 4 method bodies!"))}
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:lines)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {($ VSub_Name "$JAVAP")} {(-c)} {(-private)} {(-classpath)} 
                                    {($ VSub_Name "$INVOKEDYNAMIC_IJAR")} {(ClassWithLambda)}
                                  )
                                  (C {(grep)} {(Code) (Lit_Other ":")})
                                  (C {(wc)} {(-l)})
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [2845 2870]
                      )
                    }
                  spids: [2844]
                )
              ]
              spids: [2844]
            )
            (C {(check_eq)} {(0)} {($ VSub_Name "$lines")} 
              {(DQ ("Interface jar should have no method bodies!"))}
            )
          ]
          spids: [2782]
        )
      spids: [2776 2781]
    )
    (FuncDef
      name: test_object_class
      body: 
        (BraceGroup
          children: [
            (C {(mkdir)} {(-p)} {($ VSub_Name "$TEST_TMPDIR") (/java/lang)})
            (C {(cp)} {($ VSub_Name "$OBJECT_JAVA")} {($ VSub_Name "$TEST_TMPDIR") (/java/lang/.)})
            (AndOr
              children: [
                (C {($ VSub_Name "$JAVAC")} {($ VSub_Name "$TEST_TMPDIR") (/java/lang/Object.java)})
                (C {(fail)} {(DQ ("javac failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$JAR")} {(cf)} {($ VSub_Name "$OBJECT_JAR")} {(-C)} 
                  {($ VSub_Name "$TEST_TMPDIR")} {(java/lang/Object.class)}
                )
                (C {(fail)} {(DQ ("jar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$OBJECT_JAR")} {($ VSub_Name "$OBJECT_IJAR")})
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [2892]
        )
      spids: [2886 2891]
    )
    (FuncDef
      name: test_corrupted_end_of_centraldir
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CORRUPTED_JAR)
                  op: Equal
                  rhs: {($ VSub_Name "$TEST_TMPDIR") (/corrupted.jar)}
                  spids: [2985]
                )
              ]
              spids: [2985]
            )
            (C {(cp)} {($ VSub_Name "$JAR_WRONG_CENTRAL_DIR")} {($ VSub_Name "$CORRUPTED_JAR")})
            (C {(chmod)} {(Lit_Other "+") (w)} {($ VSub_Name "$CORRUPTED_JAR")})
            (SimpleCommand
              words: [{(echo)}]
              redirects: [
                (Redir
                  op_id: Redir_DGreat
                  fd: -1
                  arg_word: {($ VSub_Name "$CORRUPTED_JAR")}
                  spids: [3012]
                )
              ]
            )
            (C {(echo)} {(DQ ("Abort trap is expected"))})
            (AndOr
              children: [
                (SimpleCommand
                  words: [{($ VSub_Name "$IJAR")} {($ VSub_Name "$CORRUPTED_JAR")}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 2
                      arg_word: {($ VSub_Name "$TEST_log")}
                      spids: [3031]
                    )
                  ]
                )
                (AndOr
                  children: [
                    (C {(fail)} {(DQ ("ijar should have failed"))})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:status)
                          op: Equal
                          rhs: {($ VSub_QMark "$?")}
                          spids: [3045]
                        )
                      ]
                      spids: [3045]
                    )
                  ]
                  op_id: Op_DPipe
                )
              ]
              op_id: Op_DAmp
            )
            (C {(check_ne)} {(0)} {($ VSub_Name "$status")})
            (C {(expect_log)} {(DQ ("missing end of central directory record"))})
            (C {(let)} 
              {
                (DQ ("NEW_SIZE = ") 
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [(C {(statfmt)} {($ VSub_Name "$CORRUPTED_JAR")})]
                      )
                    left_token: <Left_Backtick "`">
                    spids: [3072 3076]
                  ) (" - 2")
                )
              }
            )
            (C {(set_file_length)} {($ VSub_Name "$CORRUPTED_JAR")} {($ VSub_Name "$NEW_SIZE")})
            (AndOr
              children: [
                (SimpleCommand
                  words: [{($ VSub_Name "$IJAR")} {($ VSub_Name "$CORRUPTED_JAR")}]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: 2
                      arg_word: {($ VSub_Name "$TEST_log")}
                      spids: [3092]
                    )
                  ]
                )
                (AndOr
                  children: [
                    (C {(fail)} {(DQ ("ijar should have failed"))})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:status)
                          op: Equal
                          rhs: {($ VSub_QMark "$?")}
                          spids: [3106]
                        )
                      ]
                      spids: [3106]
                    )
                  ]
                  op_id: Op_DPipe
                )
              ]
              op_id: Op_DAmp
            )
            (C {(check_ne)} {(0)} {($ VSub_Name "$status")})
            (C {(expect_log)} {(DQ ("missing end of central directory record"))})
          ]
          spids: [2974]
        )
      spids: [2968 2973]
    )
    (FuncDef
      name: test_inner_class_argument
      body: 
        (BraceGroup
          children: [
            (C {(cd)} {($ VSub_Name "$TEST_TMPDIR")})
            (C {(mkdir)} {(-p)} {(a)} {(b)} {(c)})
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(a/A.java)} spids:[3154])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("package a;\n") ("\n") ("public class A {\n") 
                        ("  public static class A2 {\n") ("    public int n;\n") ("  }\n") ("}\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [3158]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(b/B.java)} spids:[3172])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("package b;\n") ("import a.A;\n") ("\n") ("public class B {\n") 
                        ("  public static void b(A.A2 arg) {\n") ("    System.out.println(arg.n);\n") ("  }\n") ("}\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [3176]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir op_id:Redir_Great fd:-1 arg_word:{(c/C.java)} spids:[3191])
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("package c;\n") ("import b.B;\n") ("\n") ("public class C {\n") 
                        ("  public static void c() {\n") ("    B.b(null);\n") ("  }\n") ("}\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [3195]
                )
              ]
            )
            (C {($ VSub_Name "$JAVAC")} {(a/A.java)} {(b/B.java)})
            (C {($ VSub_Name "$JAR")} {(cf)} {(lib.jar)} 
              (BracedWordTree
                parts: [(BracedAltPart words:[{(a)}{(b)}]) (/) (Lit_Other "*") (.class)]
              )
            )
            (C {($ VSub_Name "$JAVAC")} {(-cp)} {(lib.jar)} {(c/C.java)})
          ]
          spids: [3132]
        )
      spids: [3126 3131]
    )
    (FuncDef
      name: test_inner_class_pruning
      body: 
        (BraceGroup
          children: [
            (C {(cd)} {($ VSub_Name "$TEST_TMPDIR")})
            (C {(mkdir)} {(-p)} {(lib/l)} 
              (BracedWordTree
                parts: [(BracedAltPart words:[{(one)}{(two)}{(three)}]) (/a)]
              )
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(lib/l/L.java)}
                  spids: [3277]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("package l;\n") ("\n") ("public class L {\n") ("  public static class I {\n") 
                        ("    public static class J {\n") ("      public static int number() {\n") ("        return 3;\n") ("      }\n") ("    }\n") 
                        ("    public static int number() {\n") ("      return 2;\n") ("    }\n") ("  }\n") ("}\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [3281]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(one/a/A.java)}
                  spids: [3302]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("package a;\n") ("\n") ("public class A {\n") 
                        ("  public static void message() {\n") ("    System.out.println(") (Right_DoubleQuote "\"") ("hello ") (Right_DoubleQuote "\"") (" + 1);\n") 
                        ("  }\n") ("}\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [3306]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(two/a/A.java)}
                  spids: [3324]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("package a;\n") ("\n") ("import l.L;\n") ("\n") ("public class A {\n") 
                        ("  public static void message() {\n") ("    System.out.println(") (Right_DoubleQuote "\"") ("hello ") (Right_DoubleQuote "\"") 
                        (" + L.I.number());\n") ("  }\n") ("}\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [3328]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (Redir
                  op_id: Redir_Great
                  fd: -1
                  arg_word: {(three/a/A.java)}
                  spids: [3348]
                )
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("package a;\n") ("\n") ("import l.L;\n") ("\n") ("public class A {\n") 
                        ("  public static void message() {\n") ("    System.out.println(") (Right_DoubleQuote "\"") ("hello ") (Right_DoubleQuote "\"") 
                        (" + L.I.J.number());\n") ("  }\n") ("}\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [3352]
                )
              ]
            )
            (C {($ VSub_Name "$JAVAC")} {(lib/l/L.java)})
            (Subshell
              child: 
                (CommandList
                  children: [
                    (Sentence child:(C {(cd)} {(lib)}) terminator:<Op_Semi ";">)
                    (C {($ VSub_Name "$JAR")} {(cf)} {(lib.jar)} {(l/) (Lit_Other "*") (.class)})
                  ]
                )
              spids: [3375 3390]
            )
            (C {($ VSub_Name "$JAVAC")} {(one/a/A.java)})
            (Subshell
              child: 
                (CommandList
                  children: [
                    (Sentence child:(C {(cd)} {(one)}) terminator:<Op_Semi ";">)
                    (C {($ VSub_Name "$JAR")} {(cf)} {(one.jar)} {(a/) (Lit_Other "*") (.class)})
                  ]
                )
              spids: [3398 3413]
            )
            (C {($ VSub_Name "$JAVAC")} {(two/a/A.java)} {(-classpath)} {(lib/lib.jar)})
            (Subshell
              child: 
                (CommandList
                  children: [
                    (Sentence child:(C {(cd)} {(two)}) terminator:<Op_Semi ";">)
                    (C {($ VSub_Name "$JAR")} {(cf)} {(two.jar)} {(a/) (Lit_Other "*") (.class)})
                  ]
                )
              spids: [3425 3440]
            )
            (C {($ VSub_Name "$JAVAC")} {(three/a/A.java)} {(-classpath)} {(lib/lib.jar)})
            (Subshell
              child: 
                (CommandList
                  children: [
                    (Sentence child:(C {(cd)} {(three)}) terminator:<Op_Semi ";">)
                    (C {($ VSub_Name "$JAR")} {(cf)} {(three.jar)} {(a/) (Lit_Other "*") (.class)})
                  ]
                )
              spids: [3452 3467]
            )
            (C {($ VSub_Name "$IJAR")} {(one/one.jar)} {(one/one-ijar.jar)})
            (C {($ VSub_Name "$IJAR")} {(one/one.jar)} {(two/two-ijar.jar)})
            (C {($ VSub_Name "$IJAR")} {(one/one.jar)} {(three/three-ijar.jar)})
            (C {(cmp)} {(one/one-ijar.jar)} {(two/two-ijar.jar)})
            (C {(cmp)} {(one/one-ijar.jar)} {(three/three-ijar.jar)})
          ]
          spids: [3249]
        )
      spids: [3243 3248]
    )
    (FuncDef
      name: test_method_parameters_attribute
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$METHODPARAM_JAR")} 
                  {($ VSub_Name "$METHODPARAM_IJAR")}
                )
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [
                    {($ VSub_Name "$JAVAP")}
                    {(-classpath)}
                    {($ VSub_Name "$METHODPARAM_IJAR")}
                    {(-v)}
                    {(methodparameters.Test)}
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_GreatAnd
                      fd: -1
                      arg_word: {($ VSub_Name "$TEST_log")}
                      spids: [3547]
                    )
                  ]
                )
                (C {(fail)} {(DQ ("javap failed"))})
              ]
              op_id: Op_DPipe
            )
            (C {(expect_log)} {(DQ (MethodParameters))} {(DQ ("MethodParameters not preserved!"))})
          ]
          spids: [3515]
        )
      spids: [3509 3514]
    )
    (FuncDef
      name: test_source_debug_extension_attribute
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [
                    {($ VSub_Name "$IJAR")}
                    {($ VSub_Name "$SOURCEDEBUGEXT_JAR")}
                    {($ VSub_Name "$SOURCEDEBUGEXT_IJAR")}
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_GreatAnd
                      fd: -1
                      arg_word: {($ VSub_Name "$TEST_log")}
                      spids: [3594]
                    )
                  ]
                )
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (C {(expect_not_log)} {(DQ ("skipping unknown attribute"))})
            (AndOr
              children: [
                (SimpleCommand
                  words: [
                    {($ VSub_Name "$JAVAP")}
                    {(-classpath)}
                    {($ VSub_Name "$SOURCEDEBUGEXT_IJAR")}
                    {(-v)}
                    {(sourcedebugextension.Test)}
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_GreatAnd
                      fd: -1
                      arg_word: {($ VSub_Name "$TEST_log")}
                      spids: [3624]
                    )
                  ]
                )
                (C {(fail)} {(DQ ("javap failed"))})
              ]
              op_id: Op_DPipe
            )
            (C {(expect_not_log)} {(DQ (SourceDebugExtension))} 
              {(DQ ("SourceDebugExtension preserved!"))}
            )
          ]
          spids: [3581]
        )
      spids: [3575 3580]
    )
    (FuncDef
      name: test_central_dir_largest_regular
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$CENTRAL_DIR_LARGEST_REGULAR")} 
                  {($ VSub_Name "$TEST_TMPDIR") (/ijar.jar)}
                )
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$ZIP_COUNT")} {($ VSub_Name "$TEST_TMPDIR") (/ijar.jar)} {(65535)})
                (C {(fail)})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [3658]
        )
      spids: [3652 3657]
    )
    (FuncDef
      name: test_central_dir_smallest_zip64
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$CENTRAL_DIR_SMALLEST_ZIP64")} 
                  {($ VSub_Name "$TEST_TMPDIR") (/ijar.jar)}
                )
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$ZIP_COUNT")} {($ VSub_Name "$TEST_TMPDIR") (/ijar.jar)} {(65536)})
                (C {(fail)})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [3697]
        )
      spids: [3691 3696]
    )
    (FuncDef
      name: test_central_dir_zip64
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (C {($ VSub_Name "$IJAR")} {($ VSub_Name "$CENTRAL_DIR_ZIP64")} 
                  {($ VSub_Name "$TEST_TMPDIR") (/ijar.jar)}
                )
                (C {(fail)} {(DQ ("ijar failed"))})
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (C {($ VSub_Name "$ZIP_COUNT")} {($ VSub_Name "$TEST_TMPDIR") (/ijar.jar)} {(70000)})
                (C {(fail)})
              ]
              op_id: Op_DPipe
            )
          ]
          spids: [3736]
        )
      spids: [3730 3735]
    )
    (C {(run_suite)} {(DQ ("ijar tests"))})
  ]
)