(command.CommandList
  children: [
    (command.ShAssignment
      left: <Id.Lit_VarLike 'TMP='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'TMP='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'TMP='> name:TMP)
          op: assign_op.Equal
          rhs: 
            {
              (BracedVarSub
                left: <Id.Left_DollarBrace '${'>
                token: <Id.VSub_Name TMP>
                var_name: TMP
                suffix_op: 
                  (suffix_op.Unary
                    op: <Id.VTest_ColonHyphen _>
                    arg_word: {<Id.Lit_Slash '/'> <tmp>}
                  )
                right: <Id.Right_DollarBrace '}'>
              )
            }
        )
      ]
      redirects: []
    )
    (command.Simple
      blame_tok: <readonly>
      more_env: []
      words: [{<readonly>} {<TMP>}]
      redirects: []
      do_fork: T
    )
    (command.ShFunction
      name_tok: <log>
      name: log
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_Number 0) <': '> ($ Id.VSub_At '@'))}]
              redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <die>
      name: die
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ ($ Id.VSub_Number 0) <' ERROR: '> ($ Id.VSub_At '@'))}]
              redirects: [(Redir op:<Id.Redir_GreatAnd '1>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})]
              do_fork: T
            )
            (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <show_help>
      name: show_help
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'Usage: ./configure [OPTION]\n'>
                        <'\n'>
                        <'Detects system settings before a build of Oil.\n'>
                        <'\n'>
                        <'  --prefix            Prefix for the bin/ directory [/usr/local]\n'>
                        <'  --with-readline     Fail unless readline is available.\n'>
                        <
'  --without-readline  Don\'t compile with readline, even if it\'s available.\n'
                        >
                        <'\t\t      The shell won\'t have any interactive features.\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'FLAG_prefix='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'FLAG_prefix='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FLAG_prefix='> name:FLAG_prefix)
          op: assign_op.Equal
          rhs: {(SQ <'/usr/local'>)}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'FLAG_with_readline='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'FLAG_with_readline='>
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FLAG_with_readline='> name:FLAG_with_readline)
          op: assign_op.Equal
          rhs: {(SQ )}
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      left: <Id.Lit_VarLike 'FLAG_without_readline='>
      pairs: [
        (AssignPair
          left: <Id.Lit_VarLike 'FLAG_without_readline='>
          lhs: 
            (sh_lhs_expr.Name
              left: <Id.Lit_VarLike 'FLAG_without_readline='>
              name: FLAG_without_readline
            )
          op: assign_op.Equal
          rhs: {(SQ )}
        )
      ]
      redirects: []
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <true>
                  more_env: []
                  words: [{<true>}]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      body: 
        (command.DoGroup
          left: <Id.KW_Do do>
          children: [
            (command.Case
              case_kw: <Id.KW_Case case>
              to_match: (case_arg.Word w:{(DQ ($ Id.VSub_Number 1))})
              arms_start: <Id.KW_In in>
              arms: [
                (CaseArm
                  left: <Id.Left_SingleQuote '\''>
                  pattern: (pat.Words words:[{(SQ )}])
                  middle: <Id.Right_CasePat _>
                  action: [(command.ControlFlow keyword:<Id.ControlFlow_Break break>)]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <--help>
                  pattern: (pat.Words words:[{<--help>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <show_help>
                      more_env: []
                      words: [{<show_help>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Exit exit>
                      arg_word: {<0>}
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <--with-readline>
                  pattern: (pat.Words words:[{<--with-readline>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'FLAG_with_readline='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'FLAG_with_readline='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'FLAG_with_readline='>
                              name: FLAG_with_readline
                            )
                          op: assign_op.Equal
                          rhs: {<1>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <--without-readline>
                  pattern: (pat.Words words:[{<--without-readline>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'FLAG_without_readline='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'FLAG_without_readline='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'FLAG_without_readline='>
                              name: FLAG_without_readline
                            )
                          op: assign_op.Equal
                          rhs: {<1>}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <--prefix>
                  pattern: (pat.Words words:[{<--prefix> <Id.Lit_Equals '='> <Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'FLAG_prefix='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'FLAG_prefix='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'FLAG_prefix='>
                              name: FLAG_prefix
                            )
                          op: assign_op.Equal
                          rhs: 
                            {
                              (CommandSub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Simple
                                    blame_tok: <expr>
                                    more_env: []
                                    words: [
                                      {<expr>}
                                      {(DQ ($ Id.VSub_Number 1))}
                                      {<Id.Lit_Colon ':'>}
                                      {(SQ <'--prefix=\\(.*\\)'>)}
                                    ]
                                    redirects: []
                                    do_fork: T
                                  )
                                right: <Id.Eof_RParen _>
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <--prefix>
                  pattern: (pat.Words words:[{<--prefix>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.If
                      if_kw: <Id.KW_If if>
                      arms: [
                        (IfArm
                          keyword: <Id.KW_If if>
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.Simple
                                      blame_tok: <test>
                                      more_env: []
                                      words: [{<test>} {($ Id.VSub_Pound '#')} {<-eq>} {<1>}]
                                      redirects: []
                                      do_fork: T
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          then_kw: <Id.KW_Then then>
                          action: [
                            (command.Simple
                              blame_tok: <die>
                              more_env: []
                              words: [{<die>} {(DQ <'--prefix requires an argument'>)}]
                              redirects: []
                              do_fork: T
                            )
                          ]
                          spids: [269 280]
                        )
                      ]
                      else_action: []
                      fi_kw: <Id.KW_Fi fi>
                      redirects: []
                    )
                    (command.Simple
                      blame_tok: <shift>
                      more_env: []
                      words: [{<shift>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'FLAG_prefix='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'FLAG_prefix='>
                          lhs: 
                            (sh_lhs_expr.Name
                              left: <Id.Lit_VarLike 'FLAG_prefix='>
                              name: FLAG_prefix
                            )
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number 1)}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
                (CaseArm
                  left: <Id.Lit_Star '*'>
                  pattern: (pat.Words words:[{<Id.Lit_Star '*'>}])
                  middle: <Id.Right_CasePat _>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [{<die>} {(DQ <'Invalid argument \''> ($ Id.VSub_Number 1) <'\''>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  right: <Id.Op_DSemi _>
                )
              ]
              arms_end: <Id.KW_Esac esac>
              redirects: []
            )
            (command.Simple
              blame_tok: <shift>
              more_env: []
              words: [{<shift>}]
              redirects: []
              do_fork: T
            )
          ]
          right: <Id.KW_Done done>
        )
      redirects: []
    )
    (command.ShFunction
      name_tok: <cc_quiet>
      name: cc_quiet
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <cc>
              more_env: []
              words: [{<cc>} {(DQ ($ Id.VSub_At '@'))} {<-o>} {<'/dev/null'>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {<'/dev/null'>}
                )
                (Redir op:<Id.Redir_GreatAnd '2>&'> loc:(redir_loc.Fd fd:2) arg:{<1>})
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <cc_or_die>
      name: cc_or_die
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <cc>
                                  more_env: []
                                  words: [{<cc>} {(DQ ($ Id.VSub_At '@'))}]
                                  redirects: [
                                    (Redir
                                      op: <Id.Redir_Great '>'>
                                      loc: (redir_loc.Fd fd:1)
                                      arg: {($ Id.VSub_DollarName TMP) <'/cc.log'>}
                                    )
                                    (Redir
                                      op: <Id.Redir_GreatAnd '2>&'>
                                      loc: (redir_loc.Fd fd:2)
                                      arg: {<1>}
                                    )
                                  ]
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <log>
                      more_env: []
                      words: [{<log>} {(DQ <'Error running \'cc '> ($ Id.VSub_At '@') <'\':'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <cat>
                      more_env: []
                      words: [{<cat>} {($ Id.VSub_DollarName TMP) <'/cc.log'>}]
                      redirects: []
                      do_fork: T
                    )
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [{<die>} {(DQ <'Fatal compile error running feature test'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [366 384]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <cc_statement>
      name: cc_statement
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'pp_var='> (DQ ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'prog='> (DQ ($ Id.VSub_Number 2))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName TMP) <'/cc_statement.c'>}
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [<'int main() {\n'> <'  '> ($ Id.VSub_DollarName prog) <'\n'> <'}\n'>]
                    )
                )
              ]
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <cc_quiet>
                              more_env: []
                              words: [{<cc_quiet>} {($ Id.VSub_DollarName TMP) <'/cc_statement.c'>}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(DQ <'#define '> ($ Id.VSub_DollarName pp_var) <' 1'>)}]
                      redirects: []
                      do_fork: T
                    )
                    (command.ControlFlow
                      keyword: <Id.ControlFlow_Return return>
                      arg_word: {<0>}
                    )
                  ]
                  spids: [462 470]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [(command.ControlFlow keyword:<Id.ControlFlow_Return return> arg_word:{<1>})]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <detect_readline>
      name: detect_readline
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <cc_quiet>
                              more_env: []
                              words: [{<cc_quiet>} {<'build/detect-readline.c'>} {<-l>} {<readline>}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(SQ <'HAVE_READLINE=1'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [510 521]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.If
                  if_kw: <Id.KW_If if>
                  arms: [
                    (IfArm
                      keyword: <Id.KW_If if>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {(DQ ($ Id.VSub_DollarName FLAG_with_readline))}
                                    {<Id.Lit_Equals '='>}
                                    {<1>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.Simple
                          blame_tok: <die>
                          more_env: []
                          words: [
                            {<die>}
                            {
                              (SQ 
                                <
'readline was not detected on the system (--with-readline passed).'
                                >
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                      spids: [534 547]
                    )
                  ]
                  else_action: []
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(SQ <'HAVE_READLINE='>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <detect_and_echo_vars>
      name: detect_and_echo_vars
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <test>
                              more_env: []
                              words: [
                                {<test>}
                                {(DQ ($ Id.VSub_DollarName FLAG_without_readline))}
                                {<Id.Lit_Equals '='>}
                                {<1>}
                              ]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(SQ <'HAVE_READLINE='>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [579 592]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <detect_readline>
                  more_env: []
                  words: [{<detect_readline>}]
                  redirects: []
                  do_fork: T
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(DQ <'PREFIX='> ($ Id.VSub_DollarName FLAG_prefix))}]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <cc_print_expr>
      name: cc_print_expr
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'c_expr='> (DQ ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName TMP) <'/print_expr.c'>}
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'#include <stdio.h>\n'>
                        <'#include <sys/types.h>  /* size_t, pid_t */\n'>
                        <'\n'>
                        <'int main() {\n'>
                        <'  printf('>
                        <Id.Right_DoubleQuote '"'>
                        <'%lu'>
                        <Id.Right_DoubleQuote '"'>
                        <', '>
                        ($ Id.VSub_DollarName c_expr)
                        <');\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <cc_or_die>
              more_env: []
              words: [
                {<cc_or_die>}
                {<-o>}
                {($ Id.VSub_DollarName TMP) <'/print_expr'>}
                {($ Id.VSub_DollarName TMP) <'/print_expr.c'>}
              ]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <Id.VSub_DollarName '$TMP'>
              more_env: []
              words: [{($ Id.VSub_DollarName TMP) <'/print_expr'>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName TMP) <'/print_expr.out'>}
                )
              ]
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <check_sizeof>
      name: check_sizeof
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'pp_var='> (DQ ($ Id.VSub_Number 1))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'c_type='> (DQ ($ Id.VSub_Number 2))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'min_bytes='> (DQ ($ Id.VSub_Number 3))}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cc_print_expr>
              more_env: []
              words: [{<cc_print_expr>} {(DQ <'sizeof('> ($ Id.VSub_DollarName c_type) <')'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<actual_bytes>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'actual_bytes='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'actual_bytes='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'actual_bytes='> name:actual_bytes)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <cat>
                            more_env: []
                            words: [{<cat>} {($ Id.VSub_DollarName TMP) <'/print_expr.out'>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.AndOr
                              children: [
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [{<test>} {<-n>} {(DQ ($ Id.VSub_DollarName min_bytes))}]
                                  redirects: []
                                  do_fork: T
                                )
                                (command.Simple
                                  blame_tok: <test>
                                  more_env: []
                                  words: [
                                    {<test>}
                                    {(DQ ($ Id.VSub_DollarName actual_bytes))}
                                    {<-lt>}
                                    {(DQ ($ Id.VSub_DollarName min_bytes))}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: [<Id.Op_DAmp _>]
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [
                        {<die>}
                        {
                          (DQ <'sizeof('> ($ Id.VSub_DollarName c_type) <') should be at least '> 
                            ($ Id.VSub_DollarName min_bytes) <'; got '> ($ Id.VSub_DollarName actual_bytes)
                          )
                        }
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [781 806]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [
                {<echo>}
                {
                  (DQ <'#define '> ($ Id.VSub_DollarName pp_var) <' '> 
                    ($ Id.VSub_DollarName actual_bytes)
                  )
                }
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <detect_c_language>
      name: detect_c_language
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_INT>} {(SQ <int>)} {<4>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_LONG>} {(SQ <long>)} {<4>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_VOID_P>} {(SQ <'void *'>)} {<4>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_SHORT>} {(SQ <short>)} {<2>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_FLOAT>} {(SQ <float>)} {<4>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_DOUBLE>} {(SQ <double>)} {<8>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_SIZE_T>} {(SQ <size_t>)} {<4>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_FPOS_T>} {(SQ <fpos_t>)} {<4>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_PID_T>} {(SQ <pid_t>)} {<4>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_OFF_T>} {(SQ <off_t>)} {(SQ )}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <check_sizeof>
              more_env: []
              words: [{<check_sizeof>} {<SIZEOF_TIME_T>} {(SQ <time_t>)} {(SQ )}]
              redirects: []
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <cc_statement>
                          more_env: []
                          words: [
                            {<cc_statement>}
                            {<HAVE_LONG_LONG>}
                            {(SQ <'long long x; x = (long long)0;'>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <check_sizeof>
                      more_env: []
                      words: [{<check_sizeof>} {<SIZEOF_LONG_LONG>} {(SQ <'long long'>)} {<8>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [995 1006]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <cc_statement>
                          more_env: []
                          words: [
                            {<cc_statement>}
                            {<HAVE_LONG_DOUBLE>}
                            {(SQ <'long double x; x = (long double)0;'>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <check_sizeof>
                      more_env: []
                      words: [{<check_sizeof>} {<SIZEOF_LONG_DOUBLE>} {(SQ <'long double'>)} {<8>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1023 1034]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Simple
                          blame_tok: <cc_statement>
                          more_env: []
                          words: [{<cc_statement>} {<HAVE_C99_BOOL>} {(SQ <'_Bool x; x = (_Bool)0;'>)}]
                          redirects: []
                          do_fork: T
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <check_sizeof>
                      more_env: []
                      words: [{<check_sizeof>} {<SIZEOF__BOOL>} {(SQ <_Bool>)} {<1>}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1052 1063]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(SQ <'#define HAVE_WCHAR_H 1'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <echo>
              more_env: []
              words: [{<echo>} {(SQ <'#define SIZEOF_WCHAR_T 4'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <cat>
              more_env: []
              words: [{<cat>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName TMP) <'/detect_va_list.c'>}
                )
                (Redir
                  op: <Id.Redir_DLess '<<'>
                  loc: (redir_loc.Fd fd:0)
                  arg: 
                    (redir_param.HereDoc
                      here_begin: {<EOF>}
                      here_end_tok: <Id.Undefined_Tok ''>
                      stdin_parts: [
                        <'#include <stdarg.h>  /* C89 */\n'>
                        <'int main() {\n'>
                        <'  va_list list1, list2;\n'>
                        <'  list1 = list2;\n'>
                        <'}\n'>
                      ]
                    )
                )
              ]
              do_fork: T
            )
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              blame_tok: <cc_quiet>
                              more_env: []
                              words: [{<cc_quiet>} {($ Id.VSub_DollarName TMP) <'/detect_va_list.c'>}]
                              redirects: []
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <echo>
                      more_env: []
                      words: [{<echo>} {(SQ )}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1146 1154]
                )
              ]
              else_kw: <Id.KW_Else else>
              else_action: [
                (command.Simple
                  blame_tok: <echo>
                  more_env: []
                  words: [{<echo>} {(SQ <'#define VA_LIST_IS_ARRAY 1'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <main>
      name: main
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.If
              if_kw: <Id.KW_If if>
              arms: [
                (IfArm
                  keyword: <Id.KW_If if>
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              negated: <Id.KW_Bang '!'>
                              children: [
                                (command.Simple
                                  blame_tok: <cc_quiet>
                                  more_env: []
                                  words: [{<cc_quiet>} {<'build/detect-cc.c'>}]
                                  redirects: []
                                  do_fork: T
                                )
                              ]
                              ops: []
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  then_kw: <Id.KW_Then then>
                  action: [
                    (command.Simple
                      blame_tok: <die>
                      more_env: []
                      words: [{<die>} {(DQ <'Couldn\'t compile a basic C program (cc not installed?)'>)}]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  spids: [1197 1206]
                )
              ]
              else_action: []
              fi_kw: <Id.KW_Fi fi>
              redirects: []
            )
            (command.Simple
              blame_tok: <mkdir>
              more_env: []
              words: [{<mkdir>} {<-p>} {<_build>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'sh_out='> <'_build/detected-config.sh'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<Id.Lit_VarLike 'c_out='> <'_build/detected-config.h'>}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <detect_and_echo_vars>
              more_env: []
              words: [{<detect_and_echo_vars>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName sh_out)}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <detect_c_language>
              more_env: []
              words: [{<detect_c_language>}]
              redirects: [
                (Redir
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName c_out)}
                )
              ]
              do_fork: T
            )
            (command.Simple
              blame_tok: <log>
              more_env: []
              words: [
                {<log>}
                {(DQ <'Wrote '> ($ Id.VSub_DollarName sh_out) <' and '> ($ Id.VSub_DollarName c_out))}
              ]
              redirects: []
              do_fork: T
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.ShFunction
      name_tok: <unittest>
      name: unittest
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (command.Simple
              blame_tok: <cc_print_expr>
              more_env: []
              words: [{<cc_print_expr>} {(SQ <'sizeof(int)'>)}]
              redirects: []
              do_fork: T
            )
            (command.Simple
              blame_tok: <local>
              more_env: []
              words: [{<local>} {<actual>}]
              redirects: []
              do_fork: T
            )
            (command.ShAssignment
              left: <Id.Lit_VarLike 'actual='>
              pairs: [
                (AssignPair
                  left: <Id.Lit_VarLike 'actual='>
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'actual='> name:actual)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (CommandSub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Simple
                            blame_tok: <cat>
                            more_env: []
                            words: [{<cat>} {($ Id.VSub_DollarName TMP) <'/print_expr.out'>}]
                            redirects: []
                            do_fork: T
                          )
                        right: <Id.Eof_RParen _>
                      )
                    }
                )
              ]
              redirects: []
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <test>
                  more_env: []
                  words: [{<test>} {(DQ ($ Id.VSub_DollarName actual))} {<Id.Lit_Equals '='>} {<4>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <die>
                  more_env: []
                  words: [{<die>} {(DQ <'Expected 4, got '> ($ Id.VSub_DollarName actual))}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <check_sizeof>
                  more_env: []
                  words: [{<check_sizeof>} {<SIZEOF_INT>} {(SQ <int>)} {<4>}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <die>
                  more_env: []
                  words: [{<die>} {(DQ <FAILED>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <cc_statement>
                  more_env: []
                  words: [{<cc_statement>} {<HAVE_INT>} {(SQ <'int x = (int)0;'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <die>
                  more_env: []
                  words: [{<die>} {(DQ <FAILED>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DPipe _>]
            )
            (command.AndOr
              children: [
                (command.Simple
                  blame_tok: <cc_statement>
                  more_env: []
                  words: [{<cc_statement>} {<HAVE_FOO>} {(SQ <'foo x = (foo)0;'>)}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <die>
                  more_env: []
                  words: [{<die>} {(DQ <'Expected to fail'>)}]
                  redirects: []
                  do_fork: T
                )
              ]
              ops: [<Id.Op_DAmp _>]
            )
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.Simple
      blame_tok: <main>
      more_env: []
      words: [{<main>} {(DQ ($ Id.VSub_At '@'))}]
      redirects: []
      do_fork: T
    )
  ]
)