(command.CommandList
  children: [
    (command.ShFunction
      name: test_preserve_set_opts
      body: 
        (BraceGroup
          children: [
            (C {<set>} {<-u>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:old_opts)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_Hyphen '$-')}
                  spids: [18]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:_Dbg_dbg_opts_test)
                  op: assign_op.Equal
                  rhs: {(SQ )}
                  spids: [22]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_f
                                  child: {($ Id.VSub_DollarName '$top_builddir') <'/init/opts.sh'>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:libdir)
                          op: assign_op.Equal
                          rhs: {(${ Id.VSub_Name top_builddir)}
                          spids: [55]
                        )
                      ]
                    )
                  ]
                  spids: [39 52]
                )
              ]
              else_action: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:libdir)
                      op: assign_op.Equal
                      rhs: {(${ Id.VSub_Name prefix) <'/share/bashdb'>}
                      spids: [64]
                    )
                  ]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_f
                                  child: {($ Id.VSub_DollarName '$libdir') <'/init/opts.sh'>}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<typeset>} {<Id.Lit_VarLike '_Dbg_debugger_name='> (SQ <bashdb>)})
                    (C {<typeset>} {<Id.Lit_VarLike '_Dbg_release='> (SQ <4.4-0.92>)})
                    (C {<.>} {(${ Id.VSub_Name top_builddir) <'/bashdb-trace'>} {<-L>} 
                      {($ Id.VSub_DollarName '$libdir')}
                    )
                    (C {<assertEquals>} {($ Id.VSub_DollarName '$old_opts')} {($ Id.VSub_Hyphen '$-')})
                  ]
                  spids: [74 87]
                )
              ]
              else_action: [
                (C {<echo>} {(SQ <'Skipping test - building outside of source complications'>)})
              ]
            )
            (command.Subshell
              child: 
                (C {<.>} {(${ Id.VSub_Name top_builddir) <'/bashdb-trace'>} {<-L>} 
                  {($ Id.VSub_DollarName '$libdir') <'/init/opts.sh'>}
                )
            )
            (C {<assertEquals>} {($ Id.VSub_QMark '$?')} {<1>})
            (C {<set>} {<Id.Lit_Other '+'> <u>})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:prefix)
          op: assign_op.Equal
          rhs: {<'/usr/share'>}
          spids: [177]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:top_builddir)
          op: assign_op.Equal
          rhs: {<'/src/external-vcs/sourceforge/bashdb'>}
          spids: [180]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:abs_top_srcdir)
          op: assign_op.Equal
          rhs: {<'/src/external-vcs/sourceforge/bashdb'>}
          spids: [183]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:abs_top_srcdir)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name abs_top_srcdir>
                suffix_op: (suffix_op.Unary tok:<Id.VOp1_DPercent '%%'> arg_word:{<Id.Lit_Slash '/'>})
              ) <'/'>
            }
          spids: [189]
        )
      ]
    )
    (C {<.>} {(${ Id.VSub_Name abs_top_srcdir) <'test/unit/helper.sh'>})
    (C {<.>} {(${ Id.VSub_Name abs_top_srcdir) <'/lib/filecache.sh'>})
    (C {<.>} {(${ Id.VSub_Name abs_top_srcdir) <'/lib/sig.sh'>})
    (C {<.>} {(${ Id.VSub_Name abs_top_srcdir) <'/lib/help.sh'>})
    (C {<.>} {(${ Id.VSub_Name abs_top_srcdir) <'/command/trace.sh'>})
    (C {<set>} {<-->})
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (command.DBracket
          expr: 
            (bool_expr.Binary
              op_id: Id.BoolBinary_GlobDEqual
              left: {($ Id.VSub_Number '$0')}
              right: {(${ Id.VSub_Name BASH_SOURCE)}
            )
        )
        (C {<.>} {(${ Id.VSub_Name shunit_file)})
      ]
    )
  ]
)