(command.CommandList
  children: [
    (C {(Id.KW_Set set)} {(-o)} {(nounset)})
    (C {(Id.KW_Set set)} {(-o)} {(pipefail)})
    (C {(Id.KW_Set set)} {(-o)} {(errexit)})
    (C {(source)} {(test/common.sh)})
    (command.ShFunction
      name: osh-to-oil
      body: 
        (command.BraceGroup
          children: [(C {($ Id.VSub_DollarName '$OSH')} {(--fix)} {(DQ ($ Id.VSub_At '$@'))})]
        )
    )
    (command.ShFunction
      name: osh0-oil3
      body: 
        (command.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: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:97)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:100))}
                  here_end_span_id: 110
                  stdin_parts: [('echo one "$@" two\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:103)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:106))}
                  here_end_span_id: 112
                  stdin_parts: [('echo one @Argv two\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:121)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:124))}
                  here_end_span_id: 134
                  stdin_parts: [('echo one $* "__$*__" $@ two\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:127)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:130))}
                  here_end_span_id: 136
                  stdin_parts: [('echo one $ifsjoin(Argv) "__$ifsjoin(Argv)__" $ifsjoin(Argv) two\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:141)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:144))}
                  here_end_span_id: 154
                  stdin_parts: [('echo $? $#\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:147)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:150))}
                  here_end_span_id: 156
                  stdin_parts: [('echo $Status $Argc\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: unquote-subs
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:169)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:172))}
                  here_end_span_id: 182
                  stdin_parts: [('echo "$1" "$foo"\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:175)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:178))}
                  here_end_span_id: 184
                  stdin_parts: [('echo $1 $foo\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:189)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:192))}
                  here_end_span_id: 202
                  stdin_parts: [('echo "${foo}"\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:195)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:198))}
                  here_end_span_id: 204
                  stdin_parts: [('echo $(foo)\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:209)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:212))}
                  here_end_span_id: 222
                  stdin_parts: [('echo "$(echo hi)"\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:215)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:218))}
                  here_end_span_id: 224
                  stdin_parts: [('echo $[echo hi]\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: special-vars
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:245)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:248))}
                  here_end_span_id: 258
                  stdin_parts: [('echo ${?} ${#} ${@}\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:251)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:254))}
                  here_end_span_id: 260
                  stdin_parts: [('echo $(Status) $(len(Argv)) @Argv\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:274)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:277))}
                  here_end_span_id: 287
                  stdin_parts: [('echo $9 $10 ${10} ${11}\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:280)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:283))}
                  here_end_span_id: 289
                  stdin_parts: [('echo $9 $10 $10 $11   # Rule is changed\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: arg-array
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:323)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:326))}
                  here_end_span_id: 336
                  stdin_parts: [('echo $@ $* "$@" "$*" "__$@__" "__$*__"\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:329)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:332))}
                  here_end_span_id: 338
                  stdin_parts: [('echo $Status $len(Argv) @Argv\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: bracket-ops
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:351)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:354))}
                  here_end_span_id: 364
                  stdin_parts: [('echo ${a[1]} ${a[@]} ${PIPESTATUS[@]} ${BASH_REMATCH[@]}\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:357)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:360))}
                  here_end_span_id: 366
                  stdin_parts: [('echo $a[1] @a $PipeStatus @Match\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: prefix-ops
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:382)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:385))}
                  here_end_span_id: 395
                  stdin_parts: [('echo ${#s} ${#a[@]}\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:388)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:391))}
                  here_end_span_id: 397
                  stdin_parts: [('echo $len(s) $len(a)\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: suffix-ops
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:410)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:413))}
                  here_end_span_id: 423
                  stdin_parts: [('echo ${s:-3} ${s##suffix}\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:416)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:419))}
                  here_end_span_id: 425
                  stdin_parts: [("echo $(s or 3) $s.trimRight('suffix')\n")]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: slice
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:438)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:441))}
                  here_end_span_id: 451
                  stdin_parts: [('echo ${a:1:2} ${a[@]:1:2}\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:444)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:447))}
                  here_end_span_id: 453
                  stdin_parts: [('echo $a[1:3] @a[1:3]\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: patsub
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:472)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:475))}
                  here_end_span_id: 485
                  stdin_parts: [('echo ${s/foo/bar} ${s//foo/bar}\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:478)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:481))}
                  here_end_span_id: 487
                  stdin_parts: [("echo $s.replace('foo', 'bar') $s.replace('foo', 'bar', :ALL)\n")]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: simple-command
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:500)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:503))}
                  here_end_span_id: 513
                  stdin_parts: [('echo hi\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:506)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:509))}
                  here_end_span_id: 515
                  stdin_parts: [('echo hi\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: line-breaks
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:528)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:531))}
                  here_end_span_id: 543
                  stdin_parts: [('echo one \\\n') ('  two three \\\n') ('  four\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:534)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:537))}
                  here_end_span_id: 547
                  stdin_parts: [('echo one \\\n') ('  two three \\\n') ('  four\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: bracket-builtin
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:560)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:563))}
                  here_end_span_id: 573
                  stdin_parts: [('[ ! -z "$foo" ] || die\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:566)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:569))}
                  here_end_span_id: 575
                  stdin_parts: [('test ! -z $foo || die\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:580)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:583))}
                  here_end_span_id: 595
                  stdin_parts: [('if [ "$foo" -eq 3 ]; then\n') ('  echo yes\n') ('fi\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:586)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:589))}
                  here_end_span_id: 599
                  stdin_parts: [('if test $foo -eq 3 {\n') ('  echo yes\n') ('}\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: builtins
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:612)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:615))}
                  here_end_span_id: 625
                  stdin_parts: [('. lib.sh\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:618)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:621))}
                  here_end_span_id: 627
                  stdin_parts: [('source lib.sh\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:632)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:635))}
                  here_end_span_id: 645
                  stdin_parts: [('[ -f lib.sh ] && . lib.sh\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:638)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:641))}
                  here_end_span_id: 647
                  stdin_parts: [('test -f lib.sh && source lib.sh\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:668)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:671))}
                  here_end_span_id: 681
                  stdin_parts: [('set -o errexit\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:674)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:677))}
                  here_end_span_id: 683
                  stdin_parts: [('setoption +errexit\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:688)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:691))}
                  here_end_span_id: 703
                  stdin_parts: [("echo '\\n'\n") ("echo -e '\\n'\n") ("echo -e -n '\\n'\n")]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:694)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:697))}
                  here_end_span_id: 707
                  stdin_parts: [("echo '\\\\n'\n") ("echo '\\n'\n") ("write '\\n'\n")]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:712)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:715))}
                  here_end_span_id: 725
                  stdin_parts: [("eval 'echo $?'\n")]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:718)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:721))}
                  here_end_span_id: 727
                  stdin_parts: [("oshEval('echo $?')  # call into osh!\n")]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:732)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:735))}
                  here_end_span_id: 745
                  stdin_parts: [('exec 1>&2  # stdout to stderr from now on\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:738)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:741))}
                  here_end_span_id: 747
                  stdin_parts: [('redir !1 > !2\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: export-readonly
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:774)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:777))}
                  here_end_span_id: 788
                  stdin_parts: [('export FOO\n') ('export BAR=bar\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:780)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:783))}
                  here_end_span_id: 792
                  stdin_parts: [('setenv FOO\n') ("BAR = 'bar'\n") ('setenv BAR\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:797)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:800))}
                  here_end_span_id: 811
                  stdin_parts: [('readonly FOO\n') ('readonly BAR=bar\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:803)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:806))}
                  here_end_span_id: 814
                  stdin_parts: [('freeze FOO\n') ("BAR = 'bar'\n")]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: redirect
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:827)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:830))}
                  here_end_span_id: 840
                  stdin_parts: [('cat >out.txt <in.txt\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:833)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:836))}
                  here_end_span_id: 842
                  stdin_parts: [('cat >out.txt <in.txt\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:847)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:850))}
                  here_end_span_id: 860
                  stdin_parts: [('cat >out.txt 2> err.txt\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:853)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:856))}
                  here_end_span_id: 862
                  stdin_parts: [('cat >out.txt !2 > err.txt\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:867)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:870))}
                  here_end_span_id: 880
                  stdin_parts: [('echo "error message" >& 2 \n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:873)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:876))}
                  here_end_span_id: 882
                  stdin_parts: [('echo "error message" > !2 \n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:887)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:890))}
                  here_end_span_id: 900
                  stdin_parts: [('echo "error message" 1>&2 \n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:893)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:896))}
                  here_end_span_id: 902
                  stdin_parts: [('echo "error message" !1 > !2 \n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:907)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:910))}
                  here_end_span_id: 920
                  stdin_parts: [('cat >${out} <${in}\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:913)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:916))}
                  here_end_span_id: 922
                  stdin_parts: [('cat >$(out) <$(in)\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: here-doc
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:936)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:939))}
                  here_end_span_id: 951
                  stdin_parts: [('cat <<ONE\n') ('echo $hi\n') ('ONE\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:942)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:945))}
                  here_end_span_id: 955
                  stdin_parts: [('cat << """\n') ('echo $hi\n') ('"""\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:960)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:963))}
                  here_end_span_id: 975
                  stdin_parts: [("cat <<'ONE'\n") ('single quoted\n') ('ONE\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:966)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:969))}
                  here_end_span_id: 979
                  stdin_parts: [("cat << '''\n") ('single quoted\n') ("'''\n")]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: more-env
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:997)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1000))}
                  here_end_span_id: 1012
                  stdin_parts: [('echo 1\n') ('FOO=bar BAR=baz echo 2\n') ('echo 2\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1003)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1006))}
                  here_end_span_id: 1016
                  stdin_parts: [('echo 1\n') ('env FOO=bar BAR=baz echo 2\n') ('echo 2\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1021)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1024))}
                  here_end_span_id: 1034
                  stdin_parts: [('FOO="${bar}" BAR="$(echo hi)" echo 2\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1027)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1030))}
                  here_end_span_id: 1036
                  stdin_parts: [('env FOO=$(bar) BAR=$[echo hi] echo 2\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: assign-common
      body: 
        (command.BraceGroup
          children: [
            (C {(osh-to-oil)} {(--fix)} {(-c)} 
              {(SQ (Token id:Id.Lit_Chars val:'foo=bar spam="$var"' span_id:1058))}
            )
            (C {(osh-to-oil)} {(--fix)} {(-c)} 
              {(SQ (Token id:Id.Lit_Chars val:'readonly foo=bar spam="${var}"' span_id:1069))}
            )
            (C {(osh-to-oil)} {(--fix)} {(-c)} 
              {(SQ (Token id:Id.Lit_Chars val:'export foo=bar spam="${var}/const"' span_id:1080))}
            )
            (C {(osh-to-oil)} {(--fix)} {(-c)} 
              {(SQ (Token id:Id.Lit_Chars val:'f() { foo=bar spam=${var:-default}; }' span_id:1096))}
            )
            (C {(osh-to-oil)} {(--fix)} {(-c)} 
              {
                (SQ 
                  (Token
                    id: Id.Lit_Chars
                    val: 'f() { local foo=bar spam=eggs; foo=mutated; g=new; }'
                    span_id: 1107
                  )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: assign
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1142)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1145))}
                  here_end_span_id: 1155
                  stdin_parts: [('local foo=$(basename $1)\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1148)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1151))}
                  here_end_span_id: 1157
                  stdin_parts: [('var foo = $[basename $1]\n')]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:1159)
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1166)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1169))}
                  here_end_span_id: 1179
                  stdin_parts: [('local one=1 two three=3\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1172)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1175))}
                  here_end_span_id: 1181
                  stdin_parts: [("one = '1', two = '', three = '3'\n")]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1186)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1189))}
                  here_end_span_id: 1200
                  stdin_parts: [('myStr=one\n') ('readonly myConstStr=two\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1192)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1195))}
                  here_end_span_id: 1203
                  stdin_parts: [("var myStr = 'hi'\n") ("myConstStr = 'hi'\n")]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1208)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1211))}
                  here_end_span_id: 1224
                  stdin_parts: [
                    ('f() {\n')
                    ('  local myStr=one\n')
                    ('  readonly myConstStr=two\n')
                    ('}\n')
                  ]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1214)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1217))}
                  here_end_span_id: 1229
                  stdin_parts: [
                    ('proc f {\n')
                    ("  var myStr = 'hi'\n")
                    ("  myConstStr = 'hi'\n")
                    ('}\n')
                  ]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1234)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1237))}
                  here_end_span_id: 1250
                  stdin_parts: [
                    ('f() {\n')
                    ('  local myStr=$1\n')
                    ('  readonly myConstStr=$((1 + 2))\n')
                    ('}\n')
                  ]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1240)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1243))}
                  here_end_span_id: 1255
                  stdin_parts: [
                    ('proc f {\n')
                    ('  var myStr = $1\n')
                    ('  myConstStr = $(1 + 2)\n')
                    ('}\n')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: array-literal
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1268)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1271))}
                  here_end_span_id: 1281
                  stdin_parts: [('a=(1 2 3)\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1274)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1277))}
                  here_end_span_id: 1283
                  stdin_parts: [('var a = [1 2 3]\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: pipeline
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1296)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1299))}
                  here_end_span_id: 1309
                  stdin_parts: [('ls | sort | uniq -c | sort -n -r\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1302)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1305))}
                  here_end_span_id: 1311
                  stdin_parts: [('ls | sort | uniq -c | sort -n -r\n')]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:1371)
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1376)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1379))}
                  here_end_span_id: 1389
                  stdin_parts: [('! echo hi | wc\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1382)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1385))}
                  here_end_span_id: 1391
                  stdin_parts: [('not -- echo hi | wc\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: and-or
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1404)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1407))}
                  here_end_span_id: 1417
                  stdin_parts: [('ls && echo "$@" || die "foo"\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1410)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1413))}
                  here_end_span_id: 1419
                  stdin_parts: [('ls && echo @Argv || die "foo"\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: posix-func
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1432)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1435))}
                  here_end_span_id: 1451
                  stdin_parts: [
                    ('func1() {\n')
                    ('  echo func1\n')
                    ('  func2()\n')
                    ('  {\n')
                    ('    echo func2\n')
                    ('  }\n')
                    ('}\n')
                  ]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1438)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1441))}
                  here_end_span_id: 1459
                  stdin_parts: [
                    ('proc func1 {\n')
                    ('  echo func1\n')
                    ('  proc func2\n')
                    ('  {\n')
                    ('    echo func2\n')
                    ('  }\n')
                    ('}\n')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: subshell-func
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1472)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1475))}
                  here_end_span_id: 1487
                  stdin_parts: [('subshell-func() (\n') ('  echo subshell\n') (')\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1478)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1481))}
                  here_end_span_id: 1493
                  stdin_parts: [
                    ('proc subshell-func {\n')
                    ('  shell { \n')
                    ('    echo subshell\n')
                    ('  }\n')
                    ('}\n')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: ksh-func
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1506)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1509))}
                  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.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1512)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1515))}
                  here_end_span_id: 1533
                  stdin_parts: [
                    ('proc func1 {  # no parens\n')
                    ('  echo func1\n')
                    ('  proc func2\n')
                    ('  {\n')
                    ('    echo func2\n')
                    ('  }\n')
                    ('}\n')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: for-loop
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1546)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1549))}
                  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.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1552)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1555))}
                  here_end_span_id: 1567
                  stdin_parts: [('for x in [a b c \\\n') ('  d e f] {\n') ('  echo $x\n') ('}\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1572)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1575))}
                  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.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1578)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1581))}
                  here_end_span_id: 1595
                  stdin_parts: [('for x in [a b c \\\n') ('  d e f]\n') ('{\n') ('  echo $x\n') ('}\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: empty-for-loop
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1608)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1611))}
                  here_end_span_id: 1624
                  stdin_parts: [('for x in \n') ('do\n') ('  echo $x\n') ('done\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1614)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1617))}
                  here_end_span_id: 1629
                  stdin_parts: [('for x in []\n') ('{\n') ('  echo $x\n') ('}\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: args-for-loop
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1642)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1645))}
                  here_end_span_id: 1657
                  stdin_parts: [('for x; do\n') ('  echo $x\n') ('done\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1648)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1651))}
                  here_end_span_id: 1661
                  stdin_parts: [('for x in @Argv {\n') ('  echo $x\n') ('}\n')]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:1672)
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1684)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1687))}
                  here_end_span_id: 1700
                  stdin_parts: [('for x\n') ('do\n') ('  echo $x\n') ('done\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1690)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1693))}
                  here_end_span_id: 1705
                  stdin_parts: [('for x in @Argv\n') ('{\n') ('  echo $x\n') ('}\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: while-loop
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1718)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1721))}
                  here_end_span_id: 1733
                  stdin_parts: [('while read line; do\n') ('  echo $line\n') ('done\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1724)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1727))}
                  here_end_span_id: 1737
                  stdin_parts: [('while read line {\n') ('  echo $line\n') ('}\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1742)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1745))}
                  here_end_span_id: 1758
                  stdin_parts: [('while read \\\n') ('  line; do\n') ('  echo $line\n') ('done\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1748)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1751))}
                  here_end_span_id: 1763
                  stdin_parts: [('while read \\\n') ('  line {\n') ('  echo $line\n') ('}\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: if_
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1776)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1779))}
                  here_end_span_id: 1791
                  stdin_parts: [('if true; then\n') ('  echo yes\n') ('fi\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1782)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1785))}
                  here_end_span_id: 1795
                  stdin_parts: [('if true {\n') ('  echo yes\n') ('}\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1800)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1803))}
                  here_end_span_id: 1816
                  stdin_parts: [('if true\n') ('then\n') ('  echo yes\n') ('fi\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1806)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1809))}
                  here_end_span_id: 1821
                  stdin_parts: [('if true\n') ('{\n') ('  echo yes\n') ('}\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1826)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1829))}
                  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.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1832)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1835))}
                  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')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: case_
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1870)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1873))}
                  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.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1876)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1879))}
                  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')
                  ]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1904)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1907))}
                  here_end_span_id: 1921
                  stdin_parts: [
                    ('case "$var" in\n')
                    ('  *)\n')
                    ('    echo foo\n')
                    ('    echo bar  # no dsemi\n')
                    ('esac\n')
                  ]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1910)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1913))}
                  here_end_span_id: 1928
                  stdin_parts: [
                    ('matchstr $var {\n')
                    ('  * {\n')
                    ('    echo foo\n')
                    ('    echo bar  # no dsemi\n')
                    ('    }\n')
                    ('}\n')
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: subshell
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1941)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1944))}
                  here_end_span_id: 1954
                  stdin_parts: [('(echo hi;)\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1947)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1950))}
                  here_end_span_id: 1956
                  stdin_parts: [('shell {echo hi;}\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1961)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1964))}
                  here_end_span_id: 1974
                  stdin_parts: [('(echo hi)\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1967)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1970))}
                  here_end_span_id: 1976
                  stdin_parts: [('shell {echo hi}\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:1981)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:1984))}
                  here_end_span_id: 1994
                  stdin_parts: [('(echo hi; echo bye)\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:1987)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:1990))}
                  here_end_span_id: 1996
                  stdin_parts: [('shell {echo hi; echo bye}\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2001)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2004))}
                  here_end_span_id: 2014
                  stdin_parts: [('( (echo hi; echo bye ) )\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2007)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2010))}
                  here_end_span_id: 2016
                  stdin_parts: [('shell { shell {echo hi; echo bye } }\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: brace-group
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2029)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2032))}
                  here_end_span_id: 2042
                  stdin_parts: [('{ echo hi; }\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2035)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2038))}
                  here_end_span_id: 2044
                  stdin_parts: [('do { echo hi; }\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2049)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2052))}
                  here_end_span_id: 2062
                  stdin_parts: [('{ echo hi; echo bye; }\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2055)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2058))}
                  here_end_span_id: 2064
                  stdin_parts: [('do { echo hi; echo bye; }\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: fork
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2077)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2080))}
                  here_end_span_id: 2090
                  stdin_parts: [('sleep 1&\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2083)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2086))}
                  here_end_span_id: 2092
                  stdin_parts: [('fork sleep 1\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: var-sub
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2105)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2108))}
                  here_end_span_id: 2118
                  stdin_parts: [('echo $foo\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2111)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2114))}
                  here_end_span_id: 2120
                  stdin_parts: [('echo $foo\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2125)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2128))}
                  here_end_span_id: 2138
                  stdin_parts: [('echo $foo ${bar} "__${bar}__"\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2131)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2134))}
                  here_end_span_id: 2140
                  stdin_parts: [('echo $foo $(bar) "__$(bar)__"\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2145)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2148))}
                  here_end_span_id: 2158
                  stdin_parts: [('echo ${foo:-default}\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2151)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2154))}
                  here_end_span_id: 2160
                  stdin_parts: [("echo $(foo or 'default')\n")]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: command-sub
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2173)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2176))}
                  here_end_span_id: 2187
                  stdin_parts: [('echo $(echo hi)\n') ('echo `echo hi`\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2179)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2182))}
                  here_end_span_id: 2190
                  stdin_parts: [('echo $[echo hi]\n') ('echo $[echo hi]\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2195)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2198))}
                  here_end_span_id: 2208
                  stdin_parts: [('echo "__$(echo hi)__"\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2201)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2204))}
                  here_end_span_id: 2210
                  stdin_parts: [('echo "__$[echo hi]__"\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: proc-sub
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2224)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2227))}
                  here_end_span_id: 2237
                  stdin_parts: [('echo <(echo hi) >(echo hi)\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2230)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2233))}
                  here_end_span_id: 2239
                  stdin_parts: [('echo $<[echo hi] $>[echo hi]\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: arith-sub
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2252)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2255))}
                  here_end_span_id: 2265
                  stdin_parts: [('echo __$((  1+ 2 ))__\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2258)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2261))}
                  here_end_span_id: 2267
                  stdin_parts: [('echo __$(  1+ 2 )__\n')]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:2269)
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2279)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2282))}
                  here_end_span_id: 2292
                  stdin_parts: [('echo $[  1+ 2 ]\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2285)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2288))}
                  here_end_span_id: 2294
                  stdin_parts: [('echo $(  1+ 2 )\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: arith-ops
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2339)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2342))}
                  here_end_span_id: 2352
                  stdin_parts: [('echo $(( a > 0 ? 2**3 : 3/2 ))\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2345)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2348))}
                  here_end_span_id: 2354
                  stdin_parts: [('echo $(( 2^3 if a > 0 else 3 div 2 ))\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2359)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2362))}
                  here_end_span_id: 2372
                  stdin_parts: [('echo $(( a << 1 | b & 1 ))\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2365)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2368))}
                  here_end_span_id: 2374
                  stdin_parts: [('echo $(( a << 1 .| b .& 1 ))\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: dbracket
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2390)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2393))}
                  here_end_span_id: 2403
                  stdin_parts: [('[[ -d / ]] && echo "is dir"\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2396)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2399))}
                  here_end_span_id: 2405
                  stdin_parts: [('isDir(\'/\') && echo "is dir"\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: escaped-literal
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2418)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2421))}
                  here_end_span_id: 2431
                  stdin_parts: [('echo \\$  \\  \\n "\\$" "\\n"\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2424)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2427))}
                  here_end_span_id: 2433
                  stdin_parts: [('echo \'$\'  \' \' \'n\' "\\$" "\\n"\n')]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:2436)
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2445)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2448))}
                  here_end_span_id: 2458
                  stdin_parts: [('echo \\$\\ \\$\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2451)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2454))}
                  here_end_span_id: 2460
                  stdin_parts: [("echo '$ $'\n")]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2469)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2472))}
                  here_end_span_id: 2483
                  stdin_parts: [('echo \\\n') ('  hi\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2475)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2478))}
                  here_end_span_id: 2486
                  stdin_parts: [('echo \\\n') ('  hi\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: words
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2507)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2510))}
                  here_end_span_id: 2521
                  stdin_parts: [("echo foo'bar'\n") ("echo foo'bar'$baz\n")]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2513)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2516))}
                  here_end_span_id: 2524
                  stdin_parts: [("echo 'foobar'\n") ('echo "foobar$baz"\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2537)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2540))}
                  here_end_span_id: 2550
                  stdin_parts: [("echo ~/'name with spaces'\n")]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2543)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2546))}
                  here_end_span_id: 2552
                  stdin_parts: [('echo "$HOME/name with spaces"\n')]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: time-block
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2565)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2568))}
                  here_end_span_id: 2578
                  stdin_parts: [('time ls\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2571)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2574))}
                  here_end_span_id: 2580
                  stdin_parts: [('time ls\n')]
                )
              ]
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2585)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2588))}
                  here_end_span_id: 2600
                  stdin_parts: [('time while false; do\n') ('  echo $i\n') ('done\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2591)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2594))}
                  here_end_span_id: 2604
                  stdin_parts: [('time while false {\n') ('  echo $i\n') ('}\n')]
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Return val:return span_id:2607)
            )
            (command.Simple
              words: [{(osh0-oil3)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:2616)
                  fd: -1
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OSH span_id:2619))}
                  here_end_span_id: 2632
                  stdin_parts: [('time {\n') ('  echo one\n') ('  echo two\n') ('}\n')]
                )
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'3<<' span_id:2622)
                  fd: 3
                  here_begin: {(SQ (Token id:Id.Lit_Chars val:OIL span_id:2625))}
                  here_end_span_id: 2637
                  stdin_parts: [('time {\n') ('  echo one\n') ('  echo two\n') ('}\n')]
                )
              ]
            )
          ]
        )
    )
    (C {(readonly)} {(-a)} 
      {(Id.Lit_VarLike 'PASSING=') 
        (sh_array_literal
          left: (Token id:Id.Op_LParen val:'(' span_id:2646)
          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: 
        (command.BraceGroup
          children: [
            (C {(run-all)} 
              {
                (DQ 
                  (braced_var_sub
                    token: (Token id:Id.VSub_Name val:PASSING span_id:2755)
                    bracket_op: (bracket_op.WholeArray op_id:Id.Lit_At)
                  )
                )
              }
            )
          ]
        )
    )
    (command.ShFunction
      name: run-for-release
      body: 
        (command.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 '$@'))})
  ]
)