(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:DO_OPTIMIZE) op:Equal rhs:{(0)})]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:DO_DARTIUM) op:Equal rhs:{(0)})]
    )
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:TESTS_FAILED) op:Equal rhs:{(0)})]
    )
    (command.ShFunction
      name: usage
      body: 
        (command.BraceGroup
          children: [
            (C {(echo)} 
              {(DQ ('usage: ') ($ VSub_Number '$0') (' [ --help ] [ --optimize ] [ --dartium ] '))}
            )
            (C {(echo)})
            (C {(echo)} {(DQ ('Runs a quick set of tests on runtime, client, and compiler dirs'))})
            (C {(echo)})
            (C {(echo)} {(DQ (' --optimize: Also run dartc and client tests in release mode'))})
            (C {(echo)} {(DQ (' --dartium : Also run dartium/debug tests'))})
            (C {(echo)})
          ]
        )
    )
    (command.ShFunction
      name: doBuild
      body: 
        (command.BraceGroup
          children: [
            (C {(./tools/build.py)} {(--arch)} {($ VSub_Number '$1')} {(--mode)} {($ VSub_Number '$2')})
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_LBracket '[')} {($ VSub_QMark '$?')} {(KW_Bang '!') (Lit_Equals '=')} 
                          {(0)} {(Lit_RBracket ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ ('Build of ') ($ VSub_Number '$1') (' - ') ($ VSub_Number '$2') (' failed'))
                      }
                    )
                    (command.ControlFlow
                      token: <ControlFlow_Exit exit>
                      arg_word: {(1)}
                    )
                  ]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: doTest
      body: 
        (command.BraceGroup
          children: [
            (C {(./tools/test.py)} {(--component)} {($ VSub_Number '$2')} {(--mode)} 
              {($ VSub_Number '$3')}
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RESULT)
                  op: Equal
                  rhs: {($ VSub_QMark '$?')}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_LBracket '[')} {(${ VSub_Name RESULT)} {(KW_Bang '!') (Lit_Equals '=')} 
                          {(0)} {(Lit_RBracket ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:TESTS_FAILED) op:Equal rhs:{(1)})]
                    )
                  ]
                )
              ]
            )
            (command.ControlFlow
              token: <ControlFlow_Return return>
              arg_word: {(${ VSub_Name RESULT)}
            )
          ]
        )
    )
    (command.WhileUntil
      keyword: <KW_While while>
      cond: [
        (command.Sentence
          child: 
            (C {(Lit_LBracket '[')} {(KW_Bang '!')} {(-z)} {(DQ ($ VSub_Number '$1'))} 
              {(Lit_RBracket ']')}
            )
          terminator: <Op_Semi ';'>
        )
      ]
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {($ VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{(DQ (-h))} {(DQ ('-?'))} {(DQ (-help))} {(DQ (--help))}]
                  action: [
                    (C {(usage)})
                    (command.ControlFlow
                      token: <ControlFlow_Exit exit>
                      arg_word: {(1)}
                    )
                  ]
                )
                (case_arm
                  pat_list: [{(DQ (--optimize))}]
                  action: [
                    (command.ShAssignment
                      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:DO_OPTIMIZE) op:Equal rhs:{(1)})]
                    )
                  ]
                )
                (case_arm
                  pat_list: [{(DQ (--dartium))}]
                  action: [
                    (command.ShAssignment
                      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:DO_DARTIUM) op:Equal rhs:{(1)})]
                    )
                  ]
                )
                (case_arm
                  pat_list: [{(Lit_Star '*')}]
                  action: [
                    (C {(echo)} {(DQ ('Unrecognized argument: ') ($ VSub_Number '$1'))})
                    (C {(usage)})
                    (command.ControlFlow
                      token: <ControlFlow_Exit exit>
                      arg_word: {(1)}
                    )
                  ]
                )
              ]
            )
            (C {(shift)})
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Lit_LBracket '[')} {(KW_Bang '!')} {(-d)} {(compiler)} {(-o)} {(KW_Bang '!')} {(-d)} 
                  {(runtime)} {(-o)} {(KW_Bang '!')} {(-d)} {(tests)} {(Lit_RBracket ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} {(DQ ("This doesn't look like the dart source tree."))})
            (C {(echo)} {(DQ ('Change your directory to the dart trunk source'))})
            (command.ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)})
          ]
        )
      ]
    )
    (C {(echo)})
    (C {(echo)} {(DQ ('--- Building release ---'))})
    (C {(doBuild)} {(ia32)} {(release)})
    (C {(echo)})
    (C {(echo)} {(DQ ('--- Building debug ---'))})
    (C {(doBuild)} {(ia32)} {(debug)})
    (C {(echo)})
    (C {(echo)} {(DQ ('=== Runtime tests === '))})
    (C {(echo)} {(DQ (' Debug (Ctrl-C to skip this set of tests)'))})
    (C {(doTest)} {(runtime)} {(vm)} {(debug)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:RUNTIME_RESULT)
          op: Equal
          rhs: {($ VSub_QMark '$?')}
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Lit_LBracket '[')} {(${ VSub_Name RUNTIME_RESULT)} 
                  {(Lit_Equals '=') (Lit_Equals '=')} {(0)} {(Lit_RBracket ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} {(DQ (' Release (Ctrl-C to skip this set of tests)'))})
            (C {(doTest)} {(runtime)} {(vm)} {(release)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RUNTIME_RESULT)
                  op: Equal
                  rhs: {($ VSub_QMark '$?')}
                )
              ]
            )
          ]
        )
      ]
    )
    (C {(echo)})
    (C {(echo)} {(DQ ('=== dartc tests ==='))})
    (C {(echo)} {(DQ (' Debug mode (Ctrl-C to skip this set of tests)'))})
    (C {(doTest)} {(compiler)} {(dartc)} {(debug)})
    (command.ShAssignment
      pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:DARTC_RESULT) op:Equal rhs:{($ VSub_QMark '$?')})]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Lit_LBracket '[')} {(${ VSub_Name DO_OPTIMIZE)} {(Lit_Equals '=') (Lit_Equals '=')} 
                  {(1)} {(Lit_RBracket ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} {(DQ (' Release mode (--optimize)'))})
            (C {(doTest)} {(compiler)} {(dartc)} {(release)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RESULT)
                  op: Equal
                  rhs: {($ VSub_QMark '$?')}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_LBracket '[')} {(${ VSub_Name RESULT)} {(KW_Bang '!') (Lit_Equals '=')} 
                          {(0)} {(Lit_RBracket ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:DARTC_RESULT)
                          op: Equal
                          rhs: {(${ VSub_Name RESULT)}
                        )
                      ]
                    )
                  ]
                )
              ]
            )
          ]
        )
      ]
    )
    (C {(echo)})
    (C {(echo)} {(DQ ('=== Client tests ==='))})
    (C {(echo)} {(DQ (' Chromium  (Ctrl-C to skip this set of tests)'))})
    (C {(doTest)} {(client)} {(chromium)} {(debug)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CLIENT_RESULT)
          op: Equal
          rhs: {($ VSub_QMark '$?')}
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Lit_LBracket '[')} {(${ VSub_Name DO_OPTIMIZE)} {(Lit_Equals '=') (Lit_Equals '=')} 
                  {(1)} {(Lit_RBracket ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} {(DQ (' Chromium Release mode (--optimize)'))})
            (C {(doTest)} {(compiler)} {(chromium)} {(release)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RESULT)
                  op: Equal
                  rhs: {($ VSub_QMark '$?')}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_LBracket '[')} {(${ VSub_Name RESULT)} {(KW_Bang '!') (Lit_Equals '=')} 
                          {(0)} {(Lit_RBracket ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CLIENT_RESULT)
                          op: Equal
                          rhs: {(${ VSub_Name RESULT)}
                        )
                      ]
                    )
                  ]
                )
              ]
            )
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Lit_LBracket '[')} {(${ VSub_Name DO_DARTIUM)} {(Lit_Equals '=') (Lit_Equals '=')} 
                  {(1)} {(Lit_RBracket ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [
            (C {(echo)} {(DQ (' Dartium (Ctrl-C to skip this set of tests)'))})
            (C {(doTest)} {(client)} {(dartium)} {(release)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:RESULT)
                  op: Equal
                  rhs: {($ VSub_QMark '$?')}
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Lit_LBracket '[')} {(${ VSub_Name RESULT)} {(KW_Bang '!') (Lit_Equals '=')} 
                          {(0)} {(Lit_RBracket ']')}
                        )
                      terminator: <Op_Semi ';'>
                    )
                  ]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CLIENT_RESULT)
                          op: Equal
                          rhs: {(${ VSub_Name RESULT)}
                        )
                      ]
                    )
                  ]
                )
              ]
            )
          ]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Lit_LBracket '[')} {(${ VSub_Name RUNTIME_RESULT)} {(KW_Bang '!') (Lit_Equals '=')} 
                  {(0)} {(Lit_RBracket ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(echo)} {(DQ ('*** vm tests failed'))})]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Lit_LBracket '[')} {(${ VSub_Name DARTC_RESULT)} {(KW_Bang '!') (Lit_Equals '=')} 
                  {(0)} {(Lit_RBracket ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(echo)} {(DQ ('*** dartc tests failed'))})]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Lit_LBracket '[')} {(${ VSub_Name CLIENT_RESULT)} {(KW_Bang '!') (Lit_Equals '=')} 
                  {(0)} {(Lit_RBracket ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(echo)} {(DQ ('*** client tests failed'))})]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Lit_LBracket '[')} {(${ VSub_Name TESTS_FAILED)} 
                  {(Lit_Equals '=') (Lit_Equals '=')} {(0)} {(Lit_RBracket ']')}
                )
              terminator: <Op_Semi ';'>
            )
          ]
          action: [(C {(echo)} {(DQ ('All presubmit tests passed!'))})]
        )
      ]
    )
  ]
)