(command.CommandList
  children: [
    (C {<set>} {<-o>} {<nounset>})
    (C {<set>} {<-o>} {<pipefail>})
    (C {<set>} {<-o>} {<errexit>})
    (C {<source>} {<'test/common.sh'>})
    (command.ShFunction
      name: osh-to-oil
      body: 
        (BraceGroup
          children: [(C {($ Id.VSub_DollarName '$OSH')} {<--fix>} {(DQ ($ Id.VSub_At '$@'))})]
        )
    )
    (command.ShFunction
      name: osh0-oil3
      body: 
        (BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DPipe]
              children: [
                (command.Pipeline
                  children: [
                    (C {<osh-to-oil>} {(DQ ($ Id.VSub_At '$@'))})
                    (C {<diff>} {<-u>} {<'/dev/fd/3'>} {<->})
                  ]
                  negated: F
                )
                (C {<fail>})
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: args-vars
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 110
                      stdin_parts: [<'echo one "$@" two\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 112
                      stdin_parts: [<'echo one @Argv two\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 134
                      stdin_parts: [<'echo one $* "__$*__" $@ two\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 136
                      stdin_parts: [
                        <'echo one $ifsjoin(Argv) "__$ifsjoin(Argv)__" $ifsjoin(Argv) two\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 154
                      stdin_parts: [<'echo $? $#\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 156
                      stdin_parts: [<'echo $Status $Argc\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: unquote-subs
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 182
                      stdin_parts: [<'echo "$1" "$foo"\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 184
                      stdin_parts: [<'echo $1 $foo\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 202
                      stdin_parts: [<'echo "${foo}"\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 204
                      stdin_parts: [<'echo $(foo)\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 222
                      stdin_parts: [<'echo "$(echo hi)"\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 224
                      stdin_parts: [<'echo $[echo hi]\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: special-vars
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 258
                      stdin_parts: [<'echo ${?} ${#} ${@}\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 260
                      stdin_parts: [<'echo $(Status) $(len(Argv)) @Argv\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 287
                      stdin_parts: [<'echo $9 $10 ${10} ${11}\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 289
                      stdin_parts: [<'echo $9 $10 $10 $11   # Rule is changed\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: arg-array
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 336
                      stdin_parts: [<'echo $@ $* "$@" "$*" "__$@__" "__$*__"\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 338
                      stdin_parts: [<'echo $Status $len(Argv) @Argv\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: bracket-ops
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 364
                      stdin_parts: [<'echo ${a[1]} ${a[@]} ${PIPESTATUS[@]} ${BASH_REMATCH[@]}\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 366
                      stdin_parts: [<'echo $a[1] @a $PipeStatus @Match\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: prefix-ops
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 395
                      stdin_parts: [<'echo ${#s} ${#a[@]}\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 397
                      stdin_parts: [<'echo $len(s) $len(a)\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: suffix-ops
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 423
                      stdin_parts: [<'echo ${s:-3} ${s##suffix}\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 425
                      stdin_parts: [<'echo $(s or 3) $s.trimRight(\'suffix\')\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: slice
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 451
                      stdin_parts: [<'echo ${a:1:2} ${a[@]:1:2}\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 453
                      stdin_parts: [<'echo $a[1:3] @a[1:3]\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: patsub
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 485
                      stdin_parts: [<'echo ${s/foo/bar} ${s//foo/bar}\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 487
                      stdin_parts: [
                        <'echo $s.replace(\'foo\', \'bar\') $s.replace(\'foo\', \'bar\', :ALL)\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: simple-command
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 513
                      stdin_parts: [<'echo hi\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 515
                      stdin_parts: [<'echo hi\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: line-breaks
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 543
                      stdin_parts: [<'echo one \\\n'> <'  two three \\\n'> <'  four\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 547
                      stdin_parts: [<'echo one \\\n'> <'  two three \\\n'> <'  four\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: bracket-builtin
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 573
                      stdin_parts: [<'[ ! -z "$foo" ] || die\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 575
                      stdin_parts: [<'test ! -z $foo || die\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 595
                      stdin_parts: [<'if [ "$foo" -eq 3 ]; then\n'> <'  echo yes\n'> <'fi\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 599
                      stdin_parts: [<'if test $foo -eq 3 {\n'> <'  echo yes\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: builtins
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 625
                      stdin_parts: [<'. lib.sh\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 627
                      stdin_parts: [<'source lib.sh\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 645
                      stdin_parts: [<'[ -f lib.sh ] && . lib.sh\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 647
                      stdin_parts: [<'test -f lib.sh && source lib.sh\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 681
                      stdin_parts: [<'set -o errexit\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 683
                      stdin_parts: [<'setoption +errexit\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 703
                      stdin_parts: [<'echo \'\\n\'\n'> <'echo -e \'\\n\'\n'> <'echo -e -n \'\\n\'\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 707
                      stdin_parts: [<'echo \'\\\\n\'\n'> <'echo \'\\n\'\n'> <'write \'\\n\'\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 725
                      stdin_parts: [<'eval \'echo $?\'\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 727
                      stdin_parts: [<'oshEval(\'echo $?\')  # call into osh!\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 745
                      stdin_parts: [<'exec 1>&2  # stdout to stderr from now on\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 747
                      stdin_parts: [<'redir !1 > !2\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: export-readonly
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 788
                      stdin_parts: [<'export FOO\n'> <'export BAR=bar\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 792
                      stdin_parts: [<'setenv FOO\n'> <'BAR = \'bar\'\n'> <'setenv BAR\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 811
                      stdin_parts: [<'readonly FOO\n'> <'readonly BAR=bar\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 814
                      stdin_parts: [<'freeze FOO\n'> <'BAR = \'bar\'\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: redirect
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 840
                      stdin_parts: [<'cat >out.txt <in.txt\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 842
                      stdin_parts: [<'cat >out.txt <in.txt\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 860
                      stdin_parts: [<'cat >out.txt 2> err.txt\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 862
                      stdin_parts: [<'cat >out.txt !2 > err.txt\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 880
                      stdin_parts: [<'echo "error message" >& 2 \n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 882
                      stdin_parts: [<'echo "error message" > !2 \n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 900
                      stdin_parts: [<'echo "error message" 1>&2 \n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 902
                      stdin_parts: [<'echo "error message" !1 > !2 \n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 920
                      stdin_parts: [<'cat >${out} <${in}\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 922
                      stdin_parts: [<'cat >$(out) <$(in)\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: here-doc
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 951
                      stdin_parts: [<'cat <<ONE\n'> <'echo $hi\n'> <'ONE\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 955
                      stdin_parts: [<'cat << """\n'> <'echo $hi\n'> <'"""\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 975
                      stdin_parts: [<'cat <<\'ONE\'\n'> <'single quoted\n'> <'ONE\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 979
                      stdin_parts: [<'cat << \'\'\'\n'> <'single quoted\n'> <'\'\'\'\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: more-env
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1012
                      stdin_parts: [<'echo 1\n'> <'FOO=bar BAR=baz echo 2\n'> <'echo 2\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1016
                      stdin_parts: [<'echo 1\n'> <'env FOO=bar BAR=baz echo 2\n'> <'echo 2\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1034
                      stdin_parts: [<'FOO="${bar}" BAR="$(echo hi)" echo 2\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1036
                      stdin_parts: [<'env FOO=$(bar) BAR=$[echo hi] echo 2\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: assign-common
      body: 
        (BraceGroup
          children: [
            (C {<osh-to-oil>} {<--fix>} {<-c>} {(SQ <'foo=bar spam="$var"'>)})
            (C {<osh-to-oil>} {<--fix>} {<-c>} {(SQ <'readonly foo=bar spam="${var}"'>)})
            (C {<osh-to-oil>} {<--fix>} {<-c>} {(SQ <'export foo=bar spam="${var}/const"'>)})
            (C {<osh-to-oil>} {<--fix>} {<-c>} {(SQ <'f() { foo=bar spam=${var:-default}; }'>)})
            (C {<osh-to-oil>} {<--fix>} {<-c>} 
              {(SQ <'f() { local foo=bar spam=eggs; foo=mutated; g=new; }'>)}
            )
          ]
        )
    )
    (command.ShFunction
      name: assign
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1155
                      stdin_parts: [<'local foo=$(basename $1)\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1157
                      stdin_parts: [<'var foo = $[basename $1]\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return>)
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1179
                      stdin_parts: [<'local one=1 two three=3\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1181
                      stdin_parts: [<'one = \'1\', two = \'\', three = \'3\'\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1200
                      stdin_parts: [<'myStr=one\n'> <'readonly myConstStr=two\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1203
                      stdin_parts: [<'var myStr = \'hi\'\n'> <'myConstStr = \'hi\'\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1224
                      stdin_parts: [
                        <'f() {\n'>
                        <'  local myStr=one\n'>
                        <'  readonly myConstStr=two\n'>
                        <'}\n'>
                      ]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1229
                      stdin_parts: [
                        <'proc f {\n'>
                        <'  var myStr = \'hi\'\n'>
                        <'  myConstStr = \'hi\'\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1250
                      stdin_parts: [
                        <'f() {\n'>
                        <'  local myStr=$1\n'>
                        <'  readonly myConstStr=$((1 + 2))\n'>
                        <'}\n'>
                      ]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1255
                      stdin_parts: [
                        <'proc f {\n'>
                        <'  var myStr = $1\n'>
                        <'  myConstStr = $(1 + 2)\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: array-literal
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1281
                      stdin_parts: [<'a=(1 2 3)\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1283
                      stdin_parts: [<'var a = [1 2 3]\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: pipeline
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1309
                      stdin_parts: [<'ls | sort | uniq -c | sort -n -r\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1311
                      stdin_parts: [<'ls | sort | uniq -c | sort -n -r\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return>)
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1389
                      stdin_parts: [<'! echo hi | wc\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1391
                      stdin_parts: [<'not -- echo hi | wc\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: and-or
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1417
                      stdin_parts: [<'ls && echo "$@" || die "foo"\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1419
                      stdin_parts: [<'ls && echo @Argv || die "foo"\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: posix-func
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1451
                      stdin_parts: [
                        <'func1() {\n'>
                        <'  echo func1\n'>
                        <'  func2()\n'>
                        <'  {\n'>
                        <'    echo func2\n'>
                        <'  }\n'>
                        <'}\n'>
                      ]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1459
                      stdin_parts: [
                        <'proc func1 {\n'>
                        <'  echo func1\n'>
                        <'  proc func2\n'>
                        <'  {\n'>
                        <'    echo func2\n'>
                        <'  }\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: subshell-func
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1487
                      stdin_parts: [<'subshell-func() (\n'> <'  echo subshell\n'> <')\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1493
                      stdin_parts: [
                        <'proc subshell-func {\n'>
                        <'  shell { \n'>
                        <'    echo subshell\n'>
                        <'  }\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: ksh-func
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1525
                      stdin_parts: [
                        <'function func1 {  # no parens\n'>
                        <'  echo func1\n'>
                        <'  function func2()\n'>
                        <'  {\n'>
                        <'    echo func2\n'>
                        <'  }\n'>
                        <'}\n'>
                      ]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1533
                      stdin_parts: [
                        <'proc func1 {  # no parens\n'>
                        <'  echo func1\n'>
                        <'  proc func2\n'>
                        <'  {\n'>
                        <'    echo func2\n'>
                        <'  }\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: for-loop
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1562
                      stdin_parts: [<'for x in a b c \\\n'> <'  d e f; do\n'> <'  echo $x\n'> <'done\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1567
                      stdin_parts: [<'for x in [a b c \\\n'> <'  d e f] {\n'> <'  echo $x\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1589
                      stdin_parts: [
                        <'for x in a b c \\\n'>
                        <'  d e f\n'>
                        <'do\n'>
                        <'  echo $x\n'>
                        <'done\n'>
                      ]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1595
                      stdin_parts: [
                        <'for x in [a b c \\\n'>
                        <'  d e f]\n'>
                        <'{\n'>
                        <'  echo $x\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: empty-for-loop
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1624
                      stdin_parts: [<'for x in \n'> <'do\n'> <'  echo $x\n'> <'done\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1629
                      stdin_parts: [<'for x in []\n'> <'{\n'> <'  echo $x\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: args-for-loop
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1657
                      stdin_parts: [<'for x; do\n'> <'  echo $x\n'> <'done\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1661
                      stdin_parts: [<'for x in @Argv {\n'> <'  echo $x\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return>)
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1700
                      stdin_parts: [<'for x\n'> <'do\n'> <'  echo $x\n'> <'done\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1705
                      stdin_parts: [<'for x in @Argv\n'> <'{\n'> <'  echo $x\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: while-loop
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1733
                      stdin_parts: [<'while read line; do\n'> <'  echo $line\n'> <'done\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1737
                      stdin_parts: [<'while read line {\n'> <'  echo $line\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1758
                      stdin_parts: [<'while read \\\n'> <'  line; do\n'> <'  echo $line\n'> <'done\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1763
                      stdin_parts: [<'while read \\\n'> <'  line {\n'> <'  echo $line\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: if_
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1791
                      stdin_parts: [<'if true; then\n'> <'  echo yes\n'> <'fi\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1795
                      stdin_parts: [<'if true {\n'> <'  echo yes\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1816
                      stdin_parts: [<'if true\n'> <'then\n'> <'  echo yes\n'> <'fi\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1821
                      stdin_parts: [<'if true\n'> <'{\n'> <'  echo yes\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1847
                      stdin_parts: [
                        <'if true; then\n'>
                        <'  echo yes\n'>
                        <'elif false; then\n'>
                        <'  echo elif\n'>
                        <'elif spam; then\n'>
                        <'  echo elif\n'>
                        <'else\n'>
                        <'  echo no\n'>
                        <'fi\n'>
                      ]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1857
                      stdin_parts: [
                        <'if true {\n'>
                        <'  echo yes\n'>
                        <'} elif false {\n'>
                        <'  echo elif\n'>
                        <'} elif spam {\n'>
                        <'  echo elif\n'>
                        <'} else {\n'>
                        <'  echo no\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: case_
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1890
                      stdin_parts: [
                        <'case $var in\n'>
                        <'  foo|bar)\n'>
                        <'    [ -f foo ] && echo file\n'>
                        <'    ;;\n'>
                        <'  *)\n'>
                        <'    echo default\n'>
                        <'    ;;\n'>
                        <'esac\n'>
                      ]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1899
                      stdin_parts: [
                        <'matchstr $var {\n'>
                        <'  foo|bar {\n'>
                        <'    test -f foo && echo file\n'>
                        <'    }\n'>
                        <'  * {\n'>
                        <'    echo default\n'>
                        <'    }\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1921
                      stdin_parts: [
                        <'case "$var" in\n'>
                        <'  *)\n'>
                        <'    echo foo\n'>
                        <'    echo bar  # no dsemi\n'>
                        <'esac\n'>
                      ]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1928
                      stdin_parts: [
                        <'matchstr $var {\n'>
                        <'  * {\n'>
                        <'    echo foo\n'>
                        <'    echo bar  # no dsemi\n'>
                        <'    }\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: subshell
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1954
                      stdin_parts: [<'(echo hi;)\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1956
                      stdin_parts: [<'shell {echo hi;}\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1974
                      stdin_parts: [<'(echo hi)\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1976
                      stdin_parts: [<'shell {echo hi}\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 1994
                      stdin_parts: [<'(echo hi; echo bye)\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 1996
                      stdin_parts: [<'shell {echo hi; echo bye}\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2014
                      stdin_parts: [<'( (echo hi; echo bye ) )\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2016
                      stdin_parts: [<'shell { shell {echo hi; echo bye } }\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: brace-group
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2042
                      stdin_parts: [<'{ echo hi; }\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2044
                      stdin_parts: [<'do { echo hi; }\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2062
                      stdin_parts: [<'{ echo hi; echo bye; }\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2064
                      stdin_parts: [<'do { echo hi; echo bye; }\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: fork
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2090
                      stdin_parts: [<'sleep 1&\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2092
                      stdin_parts: [<'fork sleep 1\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: var-sub
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2118
                      stdin_parts: [<'echo $foo\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2120
                      stdin_parts: [<'echo $foo\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2138
                      stdin_parts: [<'echo $foo ${bar} "__${bar}__"\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2140
                      stdin_parts: [<'echo $foo $(bar) "__$(bar)__"\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2158
                      stdin_parts: [<'echo ${foo:-default}\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2160
                      stdin_parts: [<'echo $(foo or \'default\')\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: command-sub
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2187
                      stdin_parts: [<'echo $(echo hi)\n'> <'echo `echo hi`\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2190
                      stdin_parts: [<'echo $[echo hi]\n'> <'echo $[echo hi]\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2208
                      stdin_parts: [<'echo "__$(echo hi)__"\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2210
                      stdin_parts: [<'echo "__$[echo hi]__"\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: proc-sub
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2237
                      stdin_parts: [<'echo <(echo hi) >(echo hi)\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2239
                      stdin_parts: [<'echo $<[echo hi] $>[echo hi]\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: arith-sub
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2265
                      stdin_parts: [<'echo __$((  1+ 2 ))__\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2267
                      stdin_parts: [<'echo __$(  1+ 2 )__\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return>)
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2292
                      stdin_parts: [<'echo $[  1+ 2 ]\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2294
                      stdin_parts: [<'echo $(  1+ 2 )\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: arith-ops
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2352
                      stdin_parts: [<'echo $(( a > 0 ? 2**3 : 3/2 ))\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2354
                      stdin_parts: [<'echo $(( 2^3 if a > 0 else 3 div 2 ))\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2372
                      stdin_parts: [<'echo $(( a << 1 | b & 1 ))\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2374
                      stdin_parts: [<'echo $(( a << 1 .| b .& 1 ))\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: dbracket
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2403
                      stdin_parts: [<'[[ -d / ]] && echo "is dir"\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2405
                      stdin_parts: [<'isDir(\'/\') && echo "is dir"\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: escaped-literal
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2431
                      stdin_parts: [<'echo \\$  \\  \\n "\\$" "\\n"\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2433
                      stdin_parts: [<'echo \'$\'  \' \' \'n\' "\\$" "\\n"\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return>)
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2458
                      stdin_parts: [<'echo \\$\\ \\$\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2460
                      stdin_parts: [<'echo \'$ $\'\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2483
                      stdin_parts: [<'echo \\\n'> <'  hi\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2486
                      stdin_parts: [<'echo \\\n'> <'  hi\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: words
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2521
                      stdin_parts: [<'echo foo\'bar\'\n'> <'echo foo\'bar\'$baz\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2524
                      stdin_parts: [<'echo \'foobar\'\n'> <'echo "foobar$baz"\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2550
                      stdin_parts: [<'echo ~/\'name with spaces\'\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2552
                      stdin_parts: [<'echo "$HOME/name with spaces"\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (command.ShFunction
      name: time-block
      body: 
        (BraceGroup
          children: [
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2578
                      stdin_parts: [<'time ls\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2580
                      stdin_parts: [<'time ls\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2600
                      stdin_parts: [<'time while false; do\n'> <'  echo $i\n'> <'done\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2604
                      stdin_parts: [<'time while false {\n'> <'  echo $i\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.ControlFlow token:<Id.ControlFlow_Return return>)
            (command.Simple
              words: [{<osh0-oil3>}]
              redirects: [
                (redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OSH>)}
                      here_end_span_id: 2632
                      stdin_parts: [<'time {\n'> <'  echo one\n'> <'  echo two\n'> <'}\n'>]
                    )
                )
                (redir
                  op: <Id.Redir_DLess '3<<'>
                  loc: (redir_loc.Fd fd:3)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {(SQ <OIL>)}
                      here_end_span_id: 2637
                      stdin_parts: [<'time {\n'> <'  echo one\n'> <'  echo two\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
          ]
        )
    )
    (C {<readonly>} {<-a>} 
      {<Id.Lit_VarLike 'PASSING='> 
        (sh_array_literal
          left: <Id.Op_LParen _>
          words: [
            {<simple-command>}
            {<more-env>}
            {<line-breaks>}
            {<redirect>}
            {<pipeline>}
            {<and-or>}
            {<escaped-literal>}
            {<args-vars>}
            {<unquote-subs>}
            {<command-sub>}
            {<arith-sub>}
            {<unquote-subs>}
            {<posix-func>}
            {<ksh-func>}
            {<brace-group>}
            {<subshell>}
            {<while-loop>}
            {<if_>}
            {<case_>}
            {<for-loop>}
            {<empty-for-loop>}
            {<args-for-loop>}
            {<time-block>}
            {<bracket-builtin>}
          ]
        )
      }
    )
    (command.ShFunction
      name: all-passing
      body: 
        (BraceGroup
          children: [
            (C {<run-all>} 
              {
                (DQ 
                  (braced_var_sub
                    token: <Id.VSub_Name PASSING>
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: run-for-release
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'out_dir='> <'_tmp/osh2oil'>})
            (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName '$out_dir')})
            (command.Pipeline
              children: [
                (C {<all-passing>})
                (C {<tee>} {($ Id.VSub_DollarName '$out_dir') <'/log.txt'>})
              ]
              negated: F
            )
            (C {<echo>} {(DQ <'Wrote '> ($ Id.VSub_DollarName '$out_dir') <'/log.txt'>)})
          ]
        )
    )
    (C {(DQ ($ Id.VSub_At '$@'))})
  ]
)