(CommandList
  children: [
    (C {(Lit_Other ':')} 
      {
        (BracedVarSub
          token: <VSub_Name srcdir>
          suffix_op: (StringUnary op_id:VTest_Equals arg_word:{(.)})
          spids: [54 58]
        )
      }
    )
    (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
              children: [
                (C {(touch)} {(empty)})
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[90])]
                  spids: [90]
                )
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(echo)} {(xyz)}]
                  redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(KW_In in)} spids:[98])]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[104])]
                  spids: [104]
                )
              ]
              op_id: Op_DPipe
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(compare)} {(/dev/null)} {(/dev/null)}]
                  redirects: [
                    (Redir op_id:Redir_Great fd:-1 arg_word:{(out)} spids:[115])
                    (Redir op_id:Redir_Great fd:2 arg_word:{(err)} spids:[118])
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[123])]
                  spids: [123]
                )
              ]
              op_id: Op_DPipe
            )
            (AndOr
              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]
                      )
                    )
                  }
                )
              ]
              op_id: Op_DAmp
            )
            (Case
              to_match: {($ VSub_Hyphen '$-')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                  spids: [157 160 162 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (AndOr
                      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]
                              )
                            )
                          }
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  spids: [164 165 185 -1]
                )
              ]
              spids: [151 155 187]
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(compare)} {(/dev/null)} {(empty)}]
                  redirects: [
                    (Redir op_id:Redir_Great fd:-1 arg_word:{(out)} spids:[197])
                    (Redir op_id:Redir_Great fd:2 arg_word:{(err)} spids:[200])
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[205])]
                  spids: [205]
                )
              ]
              op_id: Op_DPipe
            )
            (AndOr
              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]
                      )
                    )
                  }
                )
              ]
              op_id: Op_DAmp
            )
            (Case
              to_match: {($ VSub_Hyphen '$-')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                  spids: [235 238 240 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (AndOr
                      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]
                              )
                            )
                          }
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  spids: [242 243 263 -1]
                )
              ]
              spids: [229 233 265]
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(compare)} {(KW_In in)} {(KW_In in)}]
                  redirects: [
                    (Redir op_id:Redir_Great fd:-1 arg_word:{(out)} spids:[275])
                    (Redir op_id:Redir_Great fd:2 arg_word:{(err)} spids:[278])
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[283])]
                  spids: [283]
                )
              ]
              op_id: Op_DPipe
            )
            (AndOr
              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]
                      )
                    )
                  }
                )
              ]
              op_id: Op_DAmp
            )
            (Case
              to_match: {($ VSub_Hyphen '$-')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                  spids: [313 316 318 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (AndOr
                      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]
                              )
                            )
                          }
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  spids: [320 321 341 -1]
                )
              ]
              spids: [307 311 343]
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(compare)} {(/dev/null)} {(KW_In in)}]
                  redirects: [
                    (Redir op_id:Redir_Great fd:-1 arg_word:{(out)} spids:[353])
                    (Redir op_id:Redir_Great fd:2 arg_word:{(err)} spids:[356])
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[361])]
                  spids: [361]
                )
              ]
              op_id: Op_DAmp
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {('diff -u /dev/null in\n') ('--- /dev/null\t1970-01-01\n') 
                      ('+++ in\t1970-01-01\n') ('+xyz\n')
                    }
                  do_expansion: False
                  here_end: EOF
                  was_filled: True
                  spids: [367]
                )
                (Redir op_id:Redir_Great fd:-1 arg_word:{(exp)} spids:[371])
              ]
            )
            (AndOr
              children: [
                (C {(compare)} {(exp)} {(out)})
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[384])]
                  spids: [384]
                )
              ]
              op_id: Op_DPipe
            )
            (Case
              to_match: {($ VSub_Hyphen '$-')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                  spids: [394 397 399 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (AndOr
                      children: [
                        (C {(test)} {(-s)} {(err)})
                        (C {(fail_)} 
                          {
                            (DQ ('err not empty: ') 
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(cat)} {(err)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [416 420]
                              )
                            )
                          }
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  spids: [401 402 422 -1]
                )
              ]
              spids: [388 392 424]
            )
            (AndOr
              children: [
                (SimpleCommand
                  words: [{(compare)} {(empty)} {(KW_In in)}]
                  redirects: [
                    (Redir op_id:Redir_Great fd:-1 arg_word:{(out)} spids:[434])
                    (Redir op_id:Redir_Great fd:2 arg_word:{(err)} spids:[437])
                  ]
                )
                (Assignment
                  keyword: Assign_None
                  pairs: [(assign_pair lhs:(LhsName name:fail) op:Equal rhs:{(1)} spids:[442])]
                  spids: [442]
                )
              ]
              op_id: Op_DAmp
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (SimpleCommand
                          words: [{(grep)} {(Lit_Other '@')} {(out)}]
                          redirects: [
                            (Redir
                              op_id: Redir_Great
                              fd: -1
                              arg_word: {(/dev/null)}
                              spids: [458]
                            )
                          ]
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (AndOr
                      children: [
                        (SimpleCommand
                          words: [{(sed)} {(SQ <'s/\t.*//;/^@@/d'>)} {(out)}]
                          redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(k)} spids:[493])]
                        )
                        (C {(mv)} {(k)} {(out)})
                      ]
                      op_id: Op_DAmp
                    )
                    (SimpleCommand
                      words: [{(cat)}]
                      redirects: [
                        (HereDoc
                          op_id: Redir_DLess
                          fd: -1
                          body: {('--- empty\n') ('+++ in\n') ('+xyz\n')}
                          do_expansion: False
                          here_end: EOF
                          was_filled: True
                          spids: [508]
                        )
                        (Redir
                          op_id: Redir_Great
                          fd: -1
                          arg_word: {(exp)}
                          spids: [512]
                        )
                      ]
                    )
                    (AndOr
                      children: [
                        (C {(compare)} {(exp)} {(out)})
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:fail)
                              op: Equal
                              rhs: {(1)}
                              spids: [525]
                            )
                          ]
                          spids: [525]
                        )
                      ]
                      op_id: Op_DPipe
                    )
                  ]
                  spids: [-1 462]
                )
              ]
              spids: [-1 529]
            )
            (Case
              to_match: {($ VSub_Hyphen '$-')}
              arms: [
                (case_arm
                  pat_list: [{(Lit_Other '*') (x) (Lit_Other '*')}]
                  spids: [538 541 543 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other '*')}]
                  action: [
                    (AndOr
                      children: [
                        (C {(test)} {(-s)} {(err)})
                        (C {(fail_)} 
                          {
                            (DQ ('err not empty: ') 
                              (CommandSubPart
                                command_list: (CommandList children:[(C {(cat)} {(err)})])
                                left_token: <Left_CommandSub '$('>
                                spids: [560 564]
                              )
                            )
                          }
                        )
                      ]
                      op_id: Op_DAmp
                    )
                  ]
                  spids: [545 546 566 -1]
                )
              ]
              spids: [532 536 568]
            )
          ]
          spids: [81]
        )
      spids: [77 80]
    )
    (C {(test_compare)})
    (C {(Exit)} {($ VSub_Name '$fail')})
  ]
)