(CommandList
  children: [
    (C {(Lit_Other ':')} 
      {
        (BracedVarSub
          token: <VSub_Name srcdir>
          suffix_op: (StringUnary op_id:VTest_Equals arg_word:{(.)})
          spids: [54 58]
        )
      }
    )
    (CommandList
      children: [
        (Sentence
          child: (C {(.)} {(DQ ($ VSub_Name '$srcdir') (/init.sh))})
          terminator: <Op_Semi ';'>
        )
        (C {(path_prepend_)} {(.)})
      ]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(0)} spids:[73])]
      spids: [73]
    )
    (FuncDef
      name: test_compare
      body: 
        (BraceGroup
          children: [
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(touch)} {(empty)})
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[90])]
                  spids: [90]
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (SimpleCommand
                  words: [{(echo)} {(xyz)}]
                  redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(KW_In in)})]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[104])]
                  spids: [104]
                )
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (SimpleCommand
                  words: [{(compare)} {(/dev/null)} {(/dev/null)}]
                  redirects: [
                    (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(out)})
                    (Redir op:<Redir_Great '2>'> fd:2 arg_word:{(err)})
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[123])]
                  spids: [123]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(test)} {(-s)} {(out)})
                (C {(fail_)} 
                  {
                    (DQ ('out not empty: ') 
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(cat)} {(out)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [139 143]
                      )
                    )
                  }
                )
              ]
            )
            (Case
              to_match: {($ VSub_Hyphen '$-')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                  spids: [157 160 162 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(test)} {(-s)} {(err)})
                        (C {(fail_)} 
                          {
                            (DQ ('err not empty: ') 
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(cat)} {(err)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [179 183]
                              )
                            )
                          }
                        )
                      ]
                    )
                  ]
                  spids: [164 165 185 16777215]
                )
              ]
              spids: [151 155 187]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (SimpleCommand
                  words: [{(compare)} {(/dev/null)} {(empty)}]
                  redirects: [
                    (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(out)})
                    (Redir op:<Redir_Great '2>'> fd:2 arg_word:{(err)})
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[205])]
                  spids: [205]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(test)} {(-s)} {(out)})
                (C {(fail_)} 
                  {
                    (DQ ('out not empty: ') 
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(cat)} {(out)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [221 225]
                      )
                    )
                  }
                )
              ]
            )
            (Case
              to_match: {($ VSub_Hyphen '$-')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                  spids: [235 238 240 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(test)} {(-s)} {(err)})
                        (C {(fail_)} 
                          {
                            (DQ ('err not empty: ') 
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(cat)} {(err)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [257 261]
                              )
                            )
                          }
                        )
                      ]
                    )
                  ]
                  spids: [242 243 263 16777215]
                )
              ]
              spids: [229 233 265]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (SimpleCommand
                  words: [{(compare)} {(KW_In in)} {(KW_In in)}]
                  redirects: [
                    (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(out)})
                    (Redir op:<Redir_Great '2>'> fd:2 arg_word:{(err)})
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[283])]
                  spids: [283]
                )
              ]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (C {(test)} {(-s)} {(out)})
                (C {(fail_)} 
                  {
                    (DQ ('out not empty: ') 
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(cat)} {(out)})])
                        left_token: <Left_CommandSub '$('>
                        spids: [299 303]
                      )
                    )
                  }
                )
              ]
            )
            (Case
              to_match: {($ VSub_Hyphen '$-')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                  spids: [313 316 318 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(test)} {(-s)} {(err)})
                        (C {(fail_)} 
                          {
                            (DQ ('err not empty: ') 
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(cat)} {(err)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [335 339]
                              )
                            )
                          }
                        )
                      ]
                    )
                  ]
                  spids: [320 321 341 16777215]
                )
              ]
              spids: [307 311 343]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (SimpleCommand
                  words: [{(compare)} {(/dev/null)} {(KW_In in)}]
                  redirects: [
                    (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(out)})
                    (Redir op:<Redir_Great '2>'> fd:2 arg_word:{(err)})
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[361])]
                  spids: [361]
                )
              ]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op: <Redir_DLess '<<'>
                  fd: 16777215
                  here_begin: {(EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
                  here_end_span_id: 379
                  stdin_parts: [
                    ('diff -u /dev/null in\n')
                    ('--- /dev/null\t1970-01-01\n')
                    ('+++ in\t1970-01-01\n')
                    ('+xyz\n')
                  ]
                )
                (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(exp)})
              ]
            )
            (AndOr
              ops: [Op_DPipe]
              children: [
                (C {(compare)} {(exp)} {(out)})
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[389])]
                  spids: [389]
                )
              ]
            )
            (Case
              to_match: {($ VSub_Hyphen '$-')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                  spids: [399 402 404 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(test)} {(-s)} {(err)})
                        (C {(fail_)} 
                          {
                            (DQ ('err not empty: ') 
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(cat)} {(err)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [421 425]
                              )
                            )
                          }
                        )
                      ]
                    )
                  ]
                  spids: [406 407 427 16777215]
                )
              ]
              spids: [393 397 429]
            )
            (AndOr
              ops: [Op_DAmp]
              children: [
                (SimpleCommand
                  words: [{(compare)} {(empty)} {(KW_In in)}]
                  redirects: [
                    (Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(out)})
                    (Redir op:<Redir_Great '2>'> fd:2 arg_word:{(err)})
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[447])]
                  spids: [447]
                )
              ]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (SimpleCommand
                          words: [{(grep)} {(Lit_Other '@')} {(out)}]
                          redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})]
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (SimpleCommand
                          words: [{(sed)} {(SQ <'s/\t.*//;/^@@/d'>)} {(out)}]
                          redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(k)})]
                        )
                        (C {(mv)} {(k)} {(out)})
                      ]
                    )
                    (SimpleCommand
                      words: [{(cat)}]
                      redirects: [
                        (HereDoc
                          op: <Redir_DLess '<<'>
                          fd: 16777215
                          here_begin: {(EscapedLiteralPart token:<Lit_EscapedChar '\\E'>) (OF)}
                          here_end_span_id: 524
                          stdin_parts: [('--- empty\n') ('+++ in\n') ('+xyz\n')]
                        )
                        (Redir
                          op: <Redir_Great '>'>
                          fd: 16777215
                          arg_word: {(exp)}
                        )
                      ]
                    )
                    (AndOr
                      ops: [Op_DPipe]
                      children: [
                        (C {(compare)} {(exp)} {(out)})
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:fail)
                              op: Equal
                              rhs: {(1)}
                              spids: [534]
                            )
                          ]
                          spids: [534]
                        )
                      ]
                    )
                  ]
                  spids: [16777215 467]
                )
              ]
              spids: [16777215 538]
            )
            (Case
              to_match: {($ VSub_Hyphen '$-')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                  spids: [547 550 552 16777215]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (AndOr
                      ops: [Op_DAmp]
                      children: [
                        (C {(test)} {(-s)} {(err)})
                        (C {(fail_)} 
                          {
                            (DQ ('err not empty: ') 
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(cat)} {(err)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [569 573]
                              )
                            )
                          }
                        )
                      ]
                    )
                  ]
                  spids: [554 555 575 16777215]
                )
              ]
              spids: [541 545 577]
            )
          ]
          spids: [81]
        )
      spids: [77 80]
    )
    (C {(test_compare)})
    (C {(Exit)} {($ VSub_Name '$fail')})
  ]
)