(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CLANG_REVISION)
          op: assign_op.Equal
          rhs: {<241602>}
          spids: [26]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CLANG_SUB_REVISION)
          op: assign_op.Equal
          rhs: {<3>}
          spids: [33]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PACKAGE_VERSION)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name CLANG_REVISION) <-> (${ Id.VSub_Name CLANG_SUB_REVISION))}
          spids: [37]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:THIS_DIR)
          op: assign_op.Equal
          rhs: 
            {
              (DQ 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: (C {<dirname>} {(DQ (${ Id.VSub_Number 0))})
                )
              )
            }
          spids: [49]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LLVM_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name THIS_DIR) <'/../../../third_party/llvm'>)}
          spids: [62]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LLVM_BUILD_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name LLVM_DIR) <'/../llvm-build/Release+Asserts'>)}
          spids: [70]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:COMPILER_RT_BUILD_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name LLVM_DIR) <'/../llvm-build/compiler-rt'>)}
          spids: [78]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LLVM_BOOTSTRAP_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name LLVM_DIR) <'/../llvm-bootstrap'>)}
          spids: [86]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LLVM_BOOTSTRAP_INSTALL_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name LLVM_DIR) <'/../llvm-bootstrap-install'>)}
          spids: [94]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CLANG_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name LLVM_DIR) <'/tools/clang'>)}
          spids: [102]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:COMPILER_RT_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name LLVM_DIR) <'/compiler-rt'>)}
          spids: [110]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LIBCXX_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name LLVM_DIR) <'/projects/libcxx'>)}
          spids: [118]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LIBCXXABI_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name LLVM_DIR) <'/projects/libcxxabi'>)}
          spids: [126]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ANDROID_NDK_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name THIS_DIR) <'/../../../third_party/android_tools/ndk'>)}
          spids: [134]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:STAMP_FILE)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name LLVM_DIR) <'/../llvm-build/cr_build_revision'>)}
          spids: [142]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CHROMIUM_TOOLS_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name THIS_DIR) <'/..'>)}
          spids: [150]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BINUTILS_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name THIS_DIR) <'/../../../third_party/binutils'>)}
          spids: [158]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ABS_CHROMIUM_TOOLS_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name PWD) <'/'> (${ Id.VSub_Name CHROMIUM_TOOLS_DIR))}
          spids: [167]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ABS_LIBCXX_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name PWD) <'/'> (${ Id.VSub_Name LIBCXX_DIR))}
          spids: [178]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ABS_LIBCXXABI_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name PWD) <'/'> (${ Id.VSub_Name LIBCXXABI_DIR))}
          spids: [189]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ABS_LLVM_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name PWD) <'/'> (${ Id.VSub_Name LLVM_DIR))}
          spids: [200]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ABS_LLVM_BUILD_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name PWD) <'/'> (${ Id.VSub_Name LLVM_BUILD_DIR))}
          spids: [211]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ABS_COMPILER_RT_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name PWD) <'/'> (${ Id.VSub_Name COMPILER_RT_DIR))}
          spids: [222]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ABS_BINUTILS_DIR)
          op: assign_op.Equal
          rhs: {(DQ (${ Id.VSub_Name PWD) <'/'> (${ Id.VSub_Name BINUTILS_DIR))}
          spids: [233]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LLVM_REPO_URL)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name LLVM_URL>
                suffix_op: 
                  (suffix_op.Unary
                    tok: <Id.VTest_ColonHyphen ':-'>
                    arg_word: 
                      {<'https:'> <Id.Lit_Slash '/'> <Id.Lit_Slash '/'> <llvm.org> <Id.Lit_Slash '/'> 
                        <svn> <Id.Lit_Slash '/'> <llvm-project>
                      }
                  )
              )
            }
          spids: [248]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CDS_URL)
          op: assign_op.Equal
          rhs: 
            {<https> <Id.Lit_Colon ':'> <'//commondatastorage.googleapis.com/chromium-browser-clang'>}
          spids: [263]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_z
                          child: {(DQ ($ Id.VSub_DollarName '$GYP_DEFINES'))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GYP_DEFINES)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [285]
                )
              ]
            )
          ]
          spids: [269 282]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_z
                          child: {(DQ ($ Id.VSub_DollarName '$GYP_GENERATORS'))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:GYP_GENERATORS)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [305]
                )
              ]
            )
          ]
          spids: [289 302]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_z
                          child: {(DQ ($ Id.VSub_DollarName '$LLVM_DOWNLOAD_GOLD_PLUGIN'))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:LLVM_DOWNLOAD_GOLD_PLUGIN)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [325]
                )
              ]
            )
          ]
          spids: [309 322]
        )
      ]
    )
    (C {<set>} {<-eu>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: 
                            {
                              (braced_var_sub
                                token: <Id.VSub_Name LLVM_FORCE_HEAD_REVISION>
                                suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{(SQ )})
                              )
                            }
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CLANG_REVISION)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (command.Pipeline
                            children: [
                              (C {<svn>} {<info>} {(DQ ($ Id.VSub_DollarName '$LLVM_REPO_URL'))})
                              (C {<grep>} {(SQ <'Revision:'>)})
                              (C {<awk>} {(SQ <'{ printf $2; }'>)})
                            ]
                            negated: F
                          )
                      )
                    }
                  spids: [367]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PACKAGE_VERSION)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name CLANG_REVISION) <-0>)}
                  spids: [397]
                )
              ]
            )
          ]
          spids: [340 356]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:OS)
          op: assign_op.Equal
          rhs: {(DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<uname>} {<-s>})))}
          spids: [408]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:if_needed)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [421]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:force_local_build)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [423]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:run_tests)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [425]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:bootstrap)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [427]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:with_android)
          op: assign_op.Equal
          rhs: {<yes>}
          spids: [429]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:chrome_tools)
          op: assign_op.Equal
          rhs: {(DQ <'plugins;blink_gc_plugin'>)}
          spids: [432]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:gcc_toolchain)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [437]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:with_patches)
          op: assign_op.Equal
          rhs: {<yes>}
          spids: [439]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobEqual
                          left: {(DQ (${ Id.VSub_Name OS))}
                          right: {(DQ <Darwin>)}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:with_android)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [465]
                )
              ]
            )
          ]
          spids: [443 462]
        )
      ]
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: 
                (command.DBracket
                  expr: (bool_expr.Binary op_id:Id.Op_Great left:{($ Id.VSub_Pound '$#')} right:{<0>})
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {($ Id.VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{<--bootstrap>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:bootstrap)
                          op: assign_op.Equal
                          rhs: {<yes>}
                          spids: [497]
                        )
                      ]
                    )
                  ]
                  spids: [493 494 501 -1]
                )
                (case_arm
                  pat_list: [{<--if-needed>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:if_needed)
                          op: assign_op.Equal
                          rhs: {<yes>}
                          spids: [508]
                        )
                      ]
                    )
                  ]
                  spids: [504 505 512 -1]
                )
                (case_arm
                  pat_list: [{<--force-local-build>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:force_local_build)
                          op: assign_op.Equal
                          rhs: {<yes>}
                          spids: [519]
                        )
                      ]
                    )
                  ]
                  spids: [515 516 523 -1]
                )
                (case_arm
                  pat_list: [{<--print-revision>}]
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Unary
                                          op_id: Id.BoolUnary_n
                                          child: 
                                            {
                                              (braced_var_sub
                                                token: <Id.VSub_Name LLVM_FORCE_HEAD_REVISION>
                                                suffix_op: 
                                                  (suffix_op.Unary
                                                    tok: <Id.VTest_ColonHyphen ':-'>
                                                    arg_word: {(SQ )}
                                                  )
                                              )
                                            }
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.Pipeline
                              children: [
                                (C {<svn>} {<info>} {(DQ ($ Id.VSub_DollarName '$LLVM_DIR'))})
                                (C {<grep>} {(SQ <'Revision:'>)})
                                (C {<awk>} {(SQ <'{ printf $2; }'>)})
                              ]
                              negated: F
                            )
                          ]
                          spids: [530 546]
                        )
                      ]
                      else_action: [(C {<echo>} {($ Id.VSub_DollarName '$PACKAGE_VERSION')})]
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<0>}
                    )
                  ]
                  spids: [526 527 590 -1]
                )
                (case_arm
                  pat_list: [{<--run-tests>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:run_tests)
                          op: assign_op.Equal
                          rhs: {<yes>}
                          spids: [597]
                        )
                      ]
                    )
                  ]
                  spids: [593 594 601 -1]
                )
                (case_arm
                  pat_list: [{<--without-android>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:with_android)
                          op: assign_op.Equal
                          rhs: (word.Empty)
                          spids: [608]
                        )
                      ]
                    )
                  ]
                  spids: [604 605 611 -1]
                )
                (case_arm
                  pat_list: [{<--without-patches>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:with_patches)
                          op: assign_op.Equal
                          rhs: (word.Empty)
                          spids: [618]
                        )
                      ]
                    )
                  ]
                  spids: [614 615 621 -1]
                )
                (case_arm
                  pat_list: [{<--with-chrome-tools>}]
                  action: [
                    (C {<shift>})
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {($ Id.VSub_Pound '$#')}
                                          right: {<0>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<echo>} {(DQ <'--with-chrome-tools requires an argument.'>)})
                            (command.ControlFlow
                              token: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [631 644]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:chrome_tools)
                          op: assign_op.Equal
                          rhs: {($ Id.VSub_Number '$1')}
                          spids: [662]
                        )
                      ]
                    )
                  ]
                  spids: [624 625 666 -1]
                )
                (case_arm
                  pat_list: [{<--gcc-toolchain>}]
                  action: [
                    (C {<shift>})
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.BoolBinary_GlobDEqual
                                          left: {($ Id.VSub_Pound '$#')}
                                          right: {<0>}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C {<echo>} {(DQ <'--gcc-toolchain requires an argument.'>)})
                            (command.ControlFlow
                              token: <Id.ControlFlow_Exit exit>
                              arg_word: {<1>}
                            )
                          ]
                          spids: [676 689]
                        )
                      ]
                    )
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Unary
                                          op_id: Id.BoolUnary_x
                                          child: {(DQ ($ Id.VSub_Number '$1') <'/bin/gcc'>)}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:gcc_toolchain)
                                  op: assign_op.Equal
                                  rhs: {($ Id.VSub_Number '$1')}
                                  spids: [724]
                                )
                              ]
                            )
                          ]
                          spids: [707 721]
                        )
                      ]
                      else_action: [
                        (C {<echo>} 
                          {(DQ <'Invalid --gcc-toolchain: \''> ($ Id.VSub_Number '$1') <'\'.'>)}
                        )
                        (C {<echo>} 
                          {
                            (DQ <'\''> ($ Id.VSub_Number '$1') 
                              <'/bin/gcc\' does not appear to be valid.'>
                            )
                          }
                        )
                        (command.ControlFlow
                          token: <Id.ControlFlow_Exit exit>
                          arg_word: {<1>}
                        )
                      ]
                    )
                  ]
                  spids: [669 670 757 -1]
                )
                (case_arm
                  pat_list: [{<--help>}]
                  action: [
                    (C {<echo>} 
                      {
                        (DQ <'usage: '> ($ Id.VSub_Number '$0') 
                          <' [--force-local-build] [--if-needed] [--run-tests] '>
                        )
                      }
                    )
                    (C {<echo>} {(DQ <'--bootstrap: First build clang with CC, then with itself.'>)})
                    (C {<echo>} 
                      {(DQ <'--force-local-build: Don\'t try to download prebuilt binaries.'>)}
                    )
                    (C {<echo>} 
                      {(DQ <'--if-needed: Download clang only if the script thinks it is needed.'>)}
                    )
                    (C {<echo>} {(DQ <'--run-tests: Run tests after building. Only for local builds.'>)})
                    (C {<echo>} {(DQ <'--print-revision: Print current clang revision and exit.'>)})
                    (C {<echo>} {(DQ <'--without-android: Don\'t build ASan Android runtime library.'>)})
                    (C {<echo>} {(DQ <'--with-chrome-tools: Select which chrome tools to build.'>)} 
                      {(DQ <'Defaults to plugins;blink_gc_plugin.'>)}
                    )
                    (C {<echo>} {(DQ <'    Example: --with-chrome-tools plugins;empty-string'>)})
                    (C {<echo>} {(DQ <'--gcc-toolchain: Set the prefix for which GCC version should'>)})
                    (C {<echo>} {(DQ <'    be used for building. For example, to use gcc in'>)})
                    (C {<echo>} {(DQ <'    /opt/foo/bin/gcc, use \'--gcc-toolchain \'/opt/foo'>)})
                    (C {<echo>} {(DQ <'--without-patches: Don\'t apply local patches.'>)})
                    (C {<echo>})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [761 762 872 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (C {<echo>} {(DQ <'Unknown argument: \''> ($ Id.VSub_Number '$1') <'\'.'>)})
                    (C {<echo>} {(DQ <'Use --help for help.'>)})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [875 876 900 -1]
                )
              ]
            )
            (C {<shift>})
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: 
                            {
                              (braced_var_sub
                                token: <Id.VSub_Name LLVM_FORCE_HEAD_REVISION>
                                suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{(SQ )})
                              )
                            }
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:force_local_build)
                  op: assign_op.Equal
                  rhs: {<yes>}
                  spids: [930]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:with_patches)
                  op: assign_op.Equal
                  rhs: (word.Empty)
                  spids: [939]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Pipeline
                              children: [
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_EqualTilde
                                      left: {(DQ ($ Id.VSub_DollarName '$GYP_DEFINES'))}
                                      right: 
                                        {<Id.Lit_Other .> <Id.Lit_Other '*'> <OS> <Id.Lit_Other '='> 
                                          <android> <Id.Lit_Other .> <Id.Lit_Other '*'>
                                        }
                                    )
                                )
                              ]
                              negated: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:with_android)
                          op: assign_op.Equal
                          rhs: (word.Empty)
                          spids: [973]
                        )
                      ]
                    )
                  ]
                  spids: [943 966]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:LLVM_BUILD_TOOLS_DIR)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name ABS_LLVM_DIR) <'/../llvm-build-tools'>)}
                  spids: [980]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobDEqual
                                      left: {(DQ (${ Id.VSub_Name OS))}
                                      right: {(DQ <Linux>)}
                                    )
                                )
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_z
                                      child: {(DQ (${ Id.VSub_Name gcc_toolchain))}
                                    )
                                )
                              ]
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.Op_Less
                                          left: 
                                            {
                                              (command_sub
                                                left_token: <Id.Left_DollarParen '$('>
                                                child: (C {<gcc>} {<-dumpversion>})
                                              )
                                            }
                                          right: {(DQ <4.7.0>)}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.DBracket
                                              expr: 
                                                (bool_expr.LogicalNot
                                                  child: 
                                                    (bool_expr.Unary
                                                      op_id: Id.BoolUnary_e
                                                      child: 
                                                        {
                                                          (DQ (${ Id.VSub_Name LLVM_BUILD_TOOLS_DIR) 
                                                            <'/gcc482'>
                                                          )
                                                        }
                                                    )
                                                )
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<echo>} {(DQ <'Downloading pre-built GCC 4.8.2...'>)})
                                    (C {<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name LLVM_BUILD_TOOLS_DIR))})
                                    (command.Pipeline
                                      children: [
                                        (C {<curl>} {<--fail>} {<-L>} 
                                          {(DQ (${ Id.VSub_Name CDS_URL) <'/tools/gcc482.tgz'>)}
                                        )
                                        (C {<tar>} {<zxf>} {<->} {<-C>} 
                                          {(DQ (${ Id.VSub_Name LLVM_BUILD_TOOLS_DIR))}
                                        )
                                      ]
                                      negated: F
                                    )
                                    (C {<echo>} {<Done>})
                                  ]
                                  spids: [1052 1070]
                                )
                              ]
                            )
                            (command.ShAssignment
                              pairs: [
                                (assign_pair
                                  lhs: (sh_lhs_expr.Name name:gcc_toolchain)
                                  op: assign_op.Equal
                                  rhs: {(DQ (${ Id.VSub_Name LLVM_BUILD_TOOLS_DIR) <'/gcc482'>)}
                                  spids: [1131]
                                )
                              ]
                            )
                          ]
                          spids: [1026 1045]
                        )
                      ]
                      else_action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:gcc_toolchain)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (command_sub
                                      left_token: <Id.Left_DollarParen '$('>
                                      child: 
                                        (C {<dirname>} 
                                          {
                                            (command_sub
                                              left_token: <Id.Left_DollarParen '$('>
                                              child: 
                                                (C {<dirname>} 
                                                  {
                                                    (command_sub
                                                      left_token: <Id.Left_DollarParen '$('>
                                                      child: (C {<which>} {<gcc>})
                                                    )
                                                  }
                                                )
                                            )
                                          }
                                        )
                                    )
                                  )
                                }
                              spids: [1147]
                            )
                          ]
                        )
                      ]
                    )
                  ]
                  spids: [990 1023]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.LogicalOr
                                  left: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobDEqual
                                      left: {(DQ (${ Id.VSub_Name OS))}
                                      right: {(DQ <Linux>)}
                                    )
                                  right: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobDEqual
                                      left: {(DQ (${ Id.VSub_Name OS))}
                                      right: {(DQ <Darwin>)}
                                    )
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Binary
                                          op_id: Id.Op_Less
                                          left: 
                                            {
                                              (command_sub
                                                left_token: <Id.Left_DollarParen '$('>
                                                child: 
                                                  (command.Pipeline
                                                    children: [
                                                      (C {<cmake>} {<--version>})
                                                      (C {<grep>} {<-Eo>} {(SQ <'[0-9.]+'>)})
                                                    ]
                                                    negated: F
                                                  )
                                              )
                                            }
                                          right: {(DQ <3.0>)}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (command.If
                              arms: [
                                (if_arm
                                  cond: 
                                    (condition.Shell
                                      commands: [
                                        (command.Sentence
                                          child: 
                                            (command.DBracket
                                              expr: 
                                                (bool_expr.LogicalNot
                                                  child: 
                                                    (bool_expr.Unary
                                                      op_id: Id.BoolUnary_e
                                                      child: 
                                                        {
                                                          (DQ (${ Id.VSub_Name LLVM_BUILD_TOOLS_DIR) 
                                                            <'/cmake310'>
                                                          )
                                                        }
                                                    )
                                                )
                                            )
                                          terminator: <Id.Op_Semi _>
                                        )
                                      ]
                                    )
                                  action: [
                                    (C {<echo>} {(DQ <'Downloading pre-built CMake 3.10...'>)})
                                    (C {<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name LLVM_BUILD_TOOLS_DIR))})
                                    (command.Pipeline
                                      children: [
                                        (C {<curl>} {<--fail>} {<-L>} 
                                          {
                                            (DQ (${ Id.VSub_Name CDS_URL) <'/tools/cmake310_'> 
                                              (${ Id.VSub_Name OS) <.tgz>
                                            )
                                          }
                                        )
                                        (C {<tar>} {<zxf>} {<->} {<-C>} 
                                          {(DQ (${ Id.VSub_Name LLVM_BUILD_TOOLS_DIR))}
                                        )
                                      ]
                                      negated: F
                                    )
                                    (C {<echo>} {<Done>})
                                  ]
                                  spids: [1244 1262]
                                )
                              ]
                            )
                            (C {<export>} 
                              {<Id.Lit_VarLike 'PATH='> 
                                (DQ (${ Id.VSub_Name LLVM_BUILD_TOOLS_DIR) <'/cmake310/bin:'> 
                                  (${ Id.VSub_Name PATH)
                                )
                              }
                            )
                          ]
                          spids: [1208 1237]
                        )
                      ]
                    )
                  ]
                  spids: [1172 1205]
                )
              ]
            )
            (C {<echo>} 
              {(DQ <'LLVM_FORCE_HEAD_REVISION was set; using r'> (${ Id.VSub_Name CLANG_REVISION))}
            )
          ]
          spids: [911 927]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: {(DQ ($ Id.VSub_DollarName '$if_needed'))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ (${ Id.VSub_Name OS))}
                                  right: {(DQ <Darwin>)}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<true>})]
                  spids: [1376 1395]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobDEqual
                                  left: {(DQ (${ Id.VSub_Name OS))}
                                  right: {(DQ <Linux>)}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<true>})]
                  spids: [1405 1424]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_EqualTilde
                                  left: {(DQ ($ Id.VSub_DollarName '$GYP_DEFINES'))}
                                  right: 
                                    {<Id.Lit_Other .> <Id.Lit_Other '*'> <Id.Lit_Other '('> <clang> 
                                      <Id.Lit_Other '|'> <tsan> <Id.Lit_Other '|'> <asan> <Id.Lit_Other '|'> <lsan> <Id.Lit_Other '|'> <msan> <Id.Lit_Other ')'> 
                                      <Id.Lit_Other '='> <1> <Id.Lit_Other .> <Id.Lit_Other '*'>
                                    }
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<true>})]
                  spids: [1434 1465]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_d
                                  child: {(DQ (${ Id.VSub_Name LLVM_BUILD_DIR))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<true>})]
                  spids: [1475 1490]
                )
              ]
              else_action: [(command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})]
            )
          ]
          spids: [1360 1373]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_f
                          child: {(DQ (${ Id.VSub_Name STAMP_FILE))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:PREVIOUSLY_BUILT_REVISON)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<cat>} {(DQ (${ Id.VSub_Name STAMP_FILE))})
                      )
                    }
                  spids: [1543]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.AndOr
                              ops: [Id.Op_DAmp]
                              children: [
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_z
                                      child: {(DQ ($ Id.VSub_DollarName '$force_local_build'))}
                                    )
                                )
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobEqual
                                      left: {(DQ (${ Id.VSub_Name PREVIOUSLY_BUILT_REVISON))}
                                      right: {(DQ (${ Id.VSub_Name PACKAGE_VERSION))}
                                    )
                                )
                              ]
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} {(DQ <'Clang already at '> (${ Id.VSub_Name PACKAGE_VERSION))})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<0>}
                    )
                  ]
                  spids: [1555 1592]
                )
              ]
            )
          ]
          spids: [1525 1540]
        )
      ]
    )
    (C {<rm>} {<-f>} {(DQ (${ Id.VSub_Name STAMP_FILE))})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_z
                          child: {(DQ ($ Id.VSub_DollarName '$force_local_build'))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CDS_FILE)
                  op: assign_op.Equal
                  rhs: {(DQ <clang-> (${ Id.VSub_Name PACKAGE_VERSION) <.tgz>)}
                  spids: [1653]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CDS_OUT_DIR)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<mktemp>} {<-d>} {<-t>} {<clang_download.XXXXXX>})
                      )
                    }
                  spids: [1663]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CDS_OUTPUT)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name CDS_OUT_DIR) <'/'> (${ Id.VSub_Name CDS_FILE))}
                  spids: [1675]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name OS))} {<Id.Lit_Equals '='>} 
                              {(DQ <Linux>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CDS_FULL_URL)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ (${ Id.VSub_Name CDS_URL) <'/Linux_x64/'> (${ Id.VSub_Name CDS_FILE))
                            }
                          spids: [1709]
                        )
                      ]
                    )
                  ]
                  spids: [1687 1706]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name OS))} {<Id.Lit_Equals '='>} 
                              {(DQ <Darwin>)} {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CDS_FULL_URL)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name CDS_URL) <'/Mac/'> (${ Id.VSub_Name CDS_FILE))}
                          spids: [1743]
                        )
                      ]
                    )
                  ]
                  spids: [1721 1740]
                )
              ]
            )
            (C {<echo>} {<Trying>} {<to>} {<download>} {<prebuilt>} {<clang>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              words: [{<which>} {<curl>}]
                              redirects: [
                                (redir
                                  op: <Id.Redir_Great '>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<'/dev/null'>}
                                )
                              ]
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {<curl>} {<-L>} {<--fail>} {(DQ (${ Id.VSub_Name CDS_FULL_URL))} {<-o>} 
                          {(DQ (${ Id.VSub_Name CDS_OUTPUT))}
                        )
                        (C {<rm>} {<-rf>} {(DQ (${ Id.VSub_Name CDS_OUT_DIR))})
                      ]
                    )
                  ]
                  spids: [1771 1782]
                )
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.Simple
                              words: [{<which>} {<wget>}]
                              redirects: [
                                (redir
                                  op: <Id.Redir_Great '>'>
                                  loc: (redir_loc.Fd fd:1)
                                  arg: {<'/dev/null'>}
                                )
                              ]
                              do_fork: T
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DPipe]
                      children: [
                        (C {<wget>} {(DQ (${ Id.VSub_Name CDS_FULL_URL))} {<-O>} 
                          {(DQ (${ Id.VSub_Name CDS_OUTPUT))}
                        )
                        (C {<rm>} {<-rf>} {(DQ (${ Id.VSub_Name CDS_OUT_DIR))})
                      ]
                    )
                  ]
                  spids: [1820 1831]
                )
              ]
              else_action: [
                (C {<echo>} {(DQ <'Neither curl nor wget found. Please install one of these.'>)})
                (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (C {<Id.Lit_LBracket '['>} {<-f>} {(DQ (${ Id.VSub_Name CDS_OUTPUT))} 
                              {<Id.Lit_RBracket ']'>}
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<rm>} {<-rf>} {(DQ (${ Id.VSub_Name LLVM_BUILD_DIR))})
                    (C {<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name LLVM_BUILD_DIR))})
                    (C {<tar>} {<-xzf>} {(DQ (${ Id.VSub_Name CDS_OUTPUT))} {<-C>} 
                      {(DQ (${ Id.VSub_Name LLVM_BUILD_DIR))}
                    )
                    (C {<echo>} {<clang>} {(DQ (${ Id.VSub_Name PACKAGE_VERSION))} {<unpacked>})
                    (command.Simple
                      words: [{<echo>} {(DQ (${ Id.VSub_Name PACKAGE_VERSION))}]
                      redirects: [
                        (redir
                          op: <Id.Redir_Great '>'>
                          loc: (redir_loc.Fd fd:1)
                          arg: {(DQ (${ Id.VSub_Name STAMP_FILE))}
                        )
                      ]
                      do_fork: T
                    )
                    (C {<rm>} {<-rf>} {(DQ (${ Id.VSub_Name CDS_OUT_DIR))})
                    (command.If
                      arms: [
                        (if_arm
                          cond: 
                            (condition.Shell
                              commands: [
                                (command.Sentence
                                  child: 
                                    (command.DBracket
                                      expr: 
                                        (bool_expr.Unary
                                          op_id: Id.BoolUnary_n
                                          child: {(DQ (${ Id.VSub_Name LLVM_DOWNLOAD_GOLD_PLUGIN))}
                                        )
                                    )
                                  terminator: <Id.Op_Semi _>
                                )
                              ]
                            )
                          action: [
                            (C 
                              {(${ Id.VSub_Name THIS_DIR) <'/../../../build/download_gold_plugin.py'>}
                            )
                          ]
                          spids: [1989 2004]
                        )
                      ]
                    )
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<0>}
                    )
                  ]
                  spids: [1881 1896]
                )
              ]
              else_action: [
                (C {<echo>} {<Did>} {<not>} {<find>} {<prebuilt>} {<clang>} 
                  {(DQ (${ Id.VSub_Name PACKAGE_VERSION)) <Id.Lit_Comma ','>} {<building>}
                )
              ]
            )
          ]
          spids: [1629 1642]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (command.DBracket
                          expr: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_n
                              child: {(DQ (${ Id.VSub_Name with_android))}
                            )
                        )
                        (command.Pipeline
                          children: [
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_d
                                  child: {(DQ (${ Id.VSub_Name ANDROID_NDK_DIR))}
                                )
                            )
                          ]
                          negated: T
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'Android NDK not found at '> (${ Id.VSub_Name ANDROID_NDK_DIR))})
            (C {<echo>} {(DQ <'The Android NDK is needed to build a Clang whose -fsanitize=address'>)})
            (C {<echo>} {(DQ <'works on Android. See '>)})
            (C {<echo>} 
              {(DQ <'http://code.google.com/p/chromium/wiki/AndroidBuildInstructions for how'>)}
            )
            (C {<echo>} {(DQ <'to install the NDK, or pass --without-android.'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [2051 2082]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [{<which>} {<cmake>}]
                          redirects: [
                            (redir
                              op: <Id.Redir_Great '>'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<'/dev/null'>}
                            )
                          ]
                          do_fork: T
                        )
                      ]
                      negated: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'CMake needed to build clang; please install'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [2133 2146]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Pipeline
                      children: [
                        (command.Simple
                          words: [{<which>} {<ninja>}]
                          redirects: [
                            (redir
                              op: <Id.Redir_Great '>'>
                              loc: (redir_loc.Fd fd:1)
                              arg: {<'/dev/null'>}
                            )
                          ]
                          do_fork: T
                        )
                      ]
                      negated: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {(DQ <'ninja needed to build clang, please install'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [2162 2175]
        )
      ]
    )
    (C {<echo>} {<Reverting>} {<previously>} {<patched>} {<files>})
    (command.ForEach
      iter_name: i
      iter_words: [
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/test/Index/crash-recovery-modules.m'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/unittests/libclang/LibclangTest.cpp'>)}
        {(DQ (${ Id.VSub_Name COMPILER_RT_DIR) <'/lib/asan/asan_rtl.cc'>)}
        {
          (DQ (${ Id.VSub_Name COMPILER_RT_DIR) 
            <'/test/asan/TestCases/Linux/new_array_cookie_test.cc'>
          )
        }
        {(DQ (${ Id.VSub_Name LLVM_DIR) <'/test/DebugInfo/gmlt.ll'>)}
        {(DQ (${ Id.VSub_Name LLVM_DIR) <'/lib/CodeGen/SpillPlacement.cpp'>)}
        {(DQ (${ Id.VSub_Name LLVM_DIR) <'/lib/CodeGen/SpillPlacement.h'>)}
        {(DQ (${ Id.VSub_Name LLVM_DIR) <'/lib/Transforms/Instrumentation/MemorySanitizer.cpp'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/test/Driver/env.c'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/lib/Frontend/InitPreprocessor.cpp'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/test/Frontend/exceptions.c'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/test/Preprocessor/predefined-exceptions.m'>)}
        {(DQ (${ Id.VSub_Name LLVM_DIR) <'/test/Bindings/Go/go.test'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/lib/Parse/ParseExpr.cpp'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/lib/Parse/ParseTemplate.cpp'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/lib/Sema/SemaDeclCXX.cpp'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/lib/Sema/SemaExprCXX.cpp'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/test/SemaCXX/default2.cpp'>)}
        {(DQ (${ Id.VSub_Name CLANG_DIR) <'/test/SemaCXX/typo-correction-delayed.cpp'>)}
        {
          (DQ (${ Id.VSub_Name COMPILER_RT_DIR) 
            <'/lib/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cc'>
          )
        }
        {(DQ (${ Id.VSub_Name COMPILER_RT_DIR) <'/test/tsan/signal_segv_handler.cc'>)}
        {
          (DQ (${ Id.VSub_Name COMPILER_RT_DIR) 
            <'/lib/sanitizer_common/sanitizer_coverage_libcdep.cc'>
          )
        }
        {(DQ (${ Id.VSub_Name COMPILER_RT_DIR) <'/cmake/config-ix.cmake'>)}
        {(DQ (${ Id.VSub_Name COMPILER_RT_DIR) <'/CMakeLists.txt'>)}
        {(DQ (${ Id.VSub_Name COMPILER_RT_DIR) <'/lib/ubsan/ubsan_platform.h'>)}
      ]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.Sentence
              child: 
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_e
                                      child: {(DQ (${ Id.VSub_Name i))}
                                    )
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (C {<rm>} {<-f>} {(DQ (${ Id.VSub_Name i))})
                        (C {<svn>} {<revert>} {(DQ (${ Id.VSub_Name i))})
                      ]
                      spids: [2440 2455]
                    )
                  ]
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
    )
    (C {<echo>} {<Remove>} {<the>} {<Clang>} {<tools>} {<shim>} {<dir>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CHROME_TOOLS_SHIM_DIR)
          op: assign_op.Equal
          rhs: {(${ Id.VSub_Name ABS_LLVM_DIR) <'/tools/chrometools'>}
          spids: [2503]
        )
      ]
    )
    (C {<rm>} {<-rfv>} {(${ Id.VSub_Name CHROME_TOOLS_SHIM_DIR)})
    (C {<echo>} {<Getting>} {<LLVM>} {<r> (DQ (${ Id.VSub_Name CLANG_REVISION))} {<Id.KW_In in>} 
      {(DQ (${ Id.VSub_Name LLVM_DIR))}
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.Pipeline
                      children: [
                        (C {<svn>} {<co>} {<--force>} 
                          {
                            (DQ (${ Id.VSub_Name LLVM_REPO_URL) <'/llvm/trunk@'> 
                              (${ Id.VSub_Name CLANG_REVISION)
                            )
                          } {(DQ (${ Id.VSub_Name LLVM_DIR))}
                        )
                      ]
                      negated: T
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {<Checkout>} {<failed> <Id.Lit_Comma ','>} {<retrying>})
            (C {<rm>} {<-rf>} {(DQ (${ Id.VSub_Name LLVM_DIR))})
            (C {<svn>} {<co>} {<--force>} 
              {(DQ (${ Id.VSub_Name LLVM_REPO_URL) <'/llvm/trunk@'> (${ Id.VSub_Name CLANG_REVISION))} {(DQ (${ Id.VSub_Name LLVM_DIR))}
            )
          ]
          spids: [2539 2568]
        )
      ]
    )
    (C {<echo>} {<Getting>} {<clang>} {<r> (DQ (${ Id.VSub_Name CLANG_REVISION))} {<Id.KW_In in>} 
      {(DQ (${ Id.VSub_Name CLANG_DIR))}
    )
    (C {<svn>} {<co>} {<--force>} 
      {(DQ (${ Id.VSub_Name LLVM_REPO_URL) <'/cfe/trunk@'> (${ Id.VSub_Name CLANG_REVISION))} {(DQ (${ Id.VSub_Name CLANG_DIR))}
    )
    (C {<rm>} {<-rf>} {(DQ (${ Id.VSub_Name LLVM_DIR) <'/projects/compiler-rt'>)})
    (C {<echo>} {<Getting>} {<compiler-rt>} {<r> (DQ (${ Id.VSub_Name CLANG_REVISION))} {<Id.KW_In in>} 
      {(DQ (${ Id.VSub_Name COMPILER_RT_DIR))}
    )
    (C {<svn>} {<co>} {<--force>} 
      {(DQ (${ Id.VSub_Name LLVM_REPO_URL) <'/compiler-rt/trunk@'> (${ Id.VSub_Name CLANG_REVISION))} {(DQ (${ Id.VSub_Name COMPILER_RT_DIR))}
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name OS))} {<Id.Lit_Equals '='>} 
                      {(DQ <Darwin>)} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {<Getting>} {<libc> <Id.Lit_Other '+'> <Id.Lit_Other '+'>} 
              {<r> (DQ (${ Id.VSub_Name CLANG_REVISION))} {<Id.KW_In in>} {(DQ (${ Id.VSub_Name LIBCXX_DIR))}
            )
            (C {<svn>} {<co>} {<--force>} 
              {
                (DQ (${ Id.VSub_Name LLVM_REPO_URL) <'/libcxx/trunk@'> (${ Id.VSub_Name CLANG_REVISION))
              } {(DQ (${ Id.VSub_Name LIBCXX_DIR))}
            )
          ]
          spids: [2731 2750]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name OS))} {<Id.Lit_Equals '='>} 
                      {(DQ <Darwin>)} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<echo>} {<Getting>} {<libc> <Id.Lit_Other '+'> <Id.Lit_Other '+'> <abi>} 
              {<r> (DQ (${ Id.VSub_Name CLANG_REVISION))} {<Id.KW_In in>} {(DQ (${ Id.VSub_Name LIBCXXABI_DIR))}
            )
            (C {<svn>} {<co>} {<--force>} 
              {
                (DQ (${ Id.VSub_Name LLVM_REPO_URL) <'/libcxxabi/trunk@'> 
                  (${ Id.VSub_Name CLANG_REVISION)
                )
              } {(DQ (${ Id.VSub_Name LIBCXXABI_DIR))}
            )
          ]
          spids: [2810 2829]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: {(DQ ($ Id.VSub_DollarName '$with_patches'))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<pushd>} {(DQ (${ Id.VSub_Name CLANG_DIR))})
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{<cat>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_DLess '<<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: 
                        (redir_param.HereDoc
                          here_begin: {(SQ <EOF>)}
                          here_end_span_id: 2934
                          stdin_parts: [
                            <'--- test/Index/crash-recovery-modules.m\t(revision 202554)\n'>
                            <'+++ test/Index/crash-recovery-modules.m\t(working copy)\n'>
                            <'@@ -12,6 +12,8 @@\n'>
                            <' \n'>
                            <' // REQUIRES: crash-recovery\n'>
                            <' // REQUIRES: shell\n'>
                            <'+// XFAIL: *\n'>
                            <'+//    (PR11974)\n'>
                            <' \n'>
                            <' @import Crash;\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (C {<patch>} {<-p0>})
              ]
              negated: F
            )
            (C {<popd>})
            (C {<pushd>} {(DQ (${ Id.VSub_Name CLANG_DIR))})
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{<cat>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_DLess '<<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: 
                        (redir_param.HereDoc
                          here_begin: {(SQ <EOF>)}
                          here_end_span_id: 2971
                          stdin_parts: [
                            <'--- unittests/libclang/LibclangTest.cpp (revision 215949)\n'>
                            <'+++ unittests/libclang/LibclangTest.cpp (working copy)\n'>
                            <'@@ -431,7 +431,7 @@\n'>
                            <'   EXPECT_EQ(0U, clang_getNumDiagnostics(ClangTU));\n'>
                            <' }\n'>
                            <'\n'>
                            <'-TEST_F(LibclangReparseTest, ReparseWithModule) {\n'>
                            <'+TEST_F(LibclangReparseTest, DISABLED_ReparseWithModule) {\n'>
                            <
'   const char *HeaderTop = "#ifndef H\\n#define H\\nstruct Foo { int bar;";\n'
                            >
                            <'   const char *HeaderBottom = "\\n};\\n#endif\\n";\n'>
                            <
'   const char *MFile = "#include \\"HeaderFile.h\\"\\nint main() {"\n'
                            >
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (C {<patch>} {<-p0>})
              ]
              negated: F
            )
            (C {<popd>})
            (C {<pushd>} {(DQ (${ Id.VSub_Name LLVM_DIR))})
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{<cat>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_DLess '<<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: 
                        (redir_param.HereDoc
                          here_begin: {(SQ <EOF>)}
                          here_end_span_id: 3012
                          stdin_parts: [
                            <'--- test/Bindings/Go/go.test    (revision 223109)\n'>
                            <'+++ test/Bindings/Go/go.test    (working copy)\n'>
                            <'@@ -1,3 +1,3 @@\n'>
                            <'-; RUN: llvm-go test llvm.org/llvm/bindings/go/llvm\n'>
                            <'+; RUN: true\n'>
                            <' \n'>
                            <' ; REQUIRES: shell\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (C {<patch>} {<-p0>})
              ]
              negated: F
            )
            (C {<popd>})
            (C {<pushd>} {(DQ (${ Id.VSub_Name COMPILER_RT_DIR))})
            (command.Pipeline
              children: [
                (command.Simple
                  words: [{<cat>}]
                  redirects: [
                    (redir
                      op: <Id.Redir_DLess '<<'>
                      loc: (redir_loc.Fd fd:0)
                      arg: 
                        (redir_param.HereDoc
                          here_begin: {(SQ <EOF>)}
                          here_end_span_id: 3062
                          stdin_parts: [
                            <'Index: CMakeLists.txt\n'>
                            <
'===================================================================\n'
                            >
                            <'--- CMakeLists.txt\t(revision 241602)\n'>
                            <'+++ CMakeLists.txt\t(working copy)\n'>
                            <'@@ -305,6 +305,7 @@\n'>
                            <'       list(APPEND SANITIZER_COMMON_SUPPORTED_OS iossim)\n'>
                            <'     endif()\n'>
                            <'   endif()\n'>
                            <'+  set(SANITIZER_MIN_OSX_VERSION "10.7")\n'>
                            <'   if(SANITIZER_MIN_OSX_VERSION VERSION_LESS "10.7")\n'>
                            <
'     message(FATAL_ERROR "Too old OS X version: ${SANITIZER_MIN_OSX_VERSION}")\n'
                            >
                            <'   endif()\n'>
                          ]
                        )
                    )
                  ]
                  do_fork: T
                )
                (C {<patch>} {<-p0>})
              ]
              negated: F
            )
            (C {<popd>})
          ]
          spids: [2884 2897]
        )
      ]
    )
    (C {<set>} {<-x>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CC)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name CC>
                suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<cc>})
              )
            }
          spids: [3086]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CXX)
          op: assign_op.Equal
          rhs: 
            {
              (braced_var_sub
                token: <Id.VSub_Name CXX>
                suffix_op: 
                  (suffix_op.Unary
                    tok: <Id.VTest_ColonHyphen ':-'>
                    arg_word: {<c> <Id.Lit_Other '+'> <Id.Lit_Other '+'>}
                  )
              )
            }
          spids: [3093]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: {(DQ (${ Id.VSub_Name gcc_toolchain))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CC)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$gcc_toolchain') <'/bin/gcc'>)}
                  spids: [3125]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CXX)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_DollarName '$gcc_toolchain') <'/bin/g++'>)}
                  spids: [3132]
                )
              ]
            )
            (C {<export>} 
              {<Id.Lit_VarLike 'LD_LIBRARY_PATH='> 
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (C {<dirname>} 
                        {
                          (command_sub
                            left_token: <Id.Left_DollarParen '$('>
                            child: 
                              (C {(${ Id.VSub_Name CXX)} 
                                {<-print-file-name> <Id.Lit_Equals '='> <libstdc> <Id.Lit_Other '+'> 
                                  <Id.Lit_Other '+'> <.so.6>
                                }
                              )
                          )
                        }
                      )
                  )
                )
              }
            )
          ]
          spids: [3103 3118]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CFLAGS)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [3172]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CXXFLAGS)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [3176]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LDFLAGS)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [3180]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:deployment_target)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [3206]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name OS))} {<Id.Lit_Equals '='>} 
                      {(DQ <Darwin>)} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CFLAGS)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ <'-isysroot '> 
                        (command_sub
                          left_token: <Id.Left_DollarParen '$('>
                          child: (C {<xcrun>} {<--show-sdk-path>})
                        )
                      )
                    }
                  spids: [3241]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CXXFLAGS)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ <'-stdlib=libc++ -nostdinc++ -I'> (${ Id.VSub_Name ABS_LIBCXX_DIR) 
                        <'/include '> (${ Id.VSub_Name CFLAGS)
                      )
                    }
                  spids: [3252]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_n
                                  child: {(DQ (${ Id.VSub_Name bootstrap))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:deployment_target)
                          op: assign_op.Equal
                          rhs: {<10.6>}
                          spids: [3284]
                        )
                      ]
                    )
                  ]
                  spids: [3266 3281]
                )
              ]
            )
          ]
          spids: [3211 3230]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: {(DQ (${ Id.VSub_Name bootstrap))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:ABS_INSTALL_DIR)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name PWD) <'/'> (${ Id.VSub_Name LLVM_BOOTSTRAP_INSTALL_DIR))}
                  spids: [3314]
                )
              ]
            )
            (C {<echo>} {(DQ <'Building bootstrap compiler'>)})
            (C {<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name LLVM_BOOTSTRAP_DIR))})
            (C {<pushd>} {(DQ (${ Id.VSub_Name LLVM_BOOTSTRAP_DIR))})
            (C {<cmake>} {<-GNinja>} {<-DCMAKE_BUILD_TYPE> <Id.Lit_Equals '='> <Release>} 
              {<-DLLVM_ENABLE_ASSERTIONS> <Id.Lit_Equals '='> <ON>} {<-DLLVM_TARGETS_TO_BUILD> <Id.Lit_Equals '='> <host>} 
              {<-DLLVM_ENABLE_THREADS> <Id.Lit_Equals '='> <OFF>} {<-DCMAKE_INSTALL_PREFIX> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name ABS_INSTALL_DIR))} 
              {<-DCMAKE_C_COMPILER> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name CC))} {<-DCMAKE_CXX_COMPILER> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name CXX))} 
              {<-DCMAKE_C_FLAGS> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name CFLAGS))} {<-DCMAKE_CXX_FLAGS> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name CXXFLAGS))} {<'../llvm'>}
            )
            (C {<ninja>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_n
                                  child: {(DQ (${ Id.VSub_Name run_tests))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [(C {<ninja>} {<check-all>})]
                  spids: [3441 3456]
                )
              ]
            )
            (C {<ninja>} {<install>})
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_n
                                  child: {(DQ (${ Id.VSub_Name gcc_toolchain))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<cp>} {<-v>} 
                      {
                        (DQ 
                          (command_sub
                            left_token: <Id.Left_DollarParen '$('>
                            child: 
                              (C {(${ Id.VSub_Name CXX)} 
                                {<-print-file-name> <Id.Lit_Equals '='> <libstdc> <Id.Lit_Other '+'> 
                                  <Id.Lit_Other '+'> <.so.6>
                                }
                              )
                          )
                        )
                      } {(DQ (${ Id.VSub_Name ABS_INSTALL_DIR) <'/lib/'>)}
                    )
                  ]
                  spids: [3473 3488]
                )
              ]
            )
            (C {<popd>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CC)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name ABS_INSTALL_DIR) <'/bin/clang'>)}
                  spids: [3535]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CXX)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name ABS_INSTALL_DIR) <'/bin/clang++'>)}
                  spids: [3544]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_n
                                  child: {(DQ (${ Id.VSub_Name gcc_toolchain))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CFLAGS)
                          op: assign_op.Equal
                          rhs: {(DQ <'--gcc-toolchain='> (${ Id.VSub_Name gcc_toolchain))}
                          spids: [3580]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CXXFLAGS)
                          op: assign_op.Equal
                          rhs: {(DQ <'--gcc-toolchain='> (${ Id.VSub_Name gcc_toolchain))}
                          spids: [3589]
                        )
                      ]
                    )
                  ]
                  spids: [3554 3569]
                )
              ]
            )
            (C {<echo>} {(DQ <'Building final compiler'>)})
          ]
          spids: [3296 3311]
        )
      ]
    )
    (C {<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name LLVM_BUILD_DIR))})
    (C {<pushd>} {(DQ (${ Id.VSub_Name LLVM_BUILD_DIR))})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name OS))} {<Id.Lit_Equals '='>} 
                      {(DQ <Darwin>)} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<rm>} {<-rf>} {<libcxxbuild>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:LIBCXXFLAGS)
                  op: assign_op.Equal
                  rhs: {(DQ <'-O3 -std=c++11 -fstrict-aliasing'>)}
                  spids: [3671]
                )
              ]
            )
            (C {<mkdir>} {<-p>} {<'libcxxbuild/libcxx'>})
            (C {<pushd>} {<'libcxxbuild/libcxx'>})
            (C 
              {
                (braced_var_sub
                  token: <Id.VSub_Name CXX>
                  suffix_op: 
                    (suffix_op.Unary
                      tok: <Id.VTest_ColonHyphen ':-'>
                      arg_word: {<c> <Id.Lit_Other '+'> <Id.Lit_Other '+'>}
                    )
                )
              } {<-c>} {(${ Id.VSub_Name CXXFLAGS)} {(${ Id.VSub_Name LIBCXXFLAGS)} 
              {(DQ (${ Id.VSub_Name ABS_LIBCXX_DIR)) <'/src/'> <Id.Lit_Star '*'> <.cpp>}
            )
            (C {<popd>})
            (C {<mkdir>} {<-p>} {<'libcxxbuild/libcxxabi'>})
            (C {<pushd>} {<'libcxxbuild/libcxxabi'>})
            (C 
              {
                (braced_var_sub
                  token: <Id.VSub_Name CXX>
                  suffix_op: 
                    (suffix_op.Unary
                      tok: <Id.VTest_ColonHyphen ':-'>
                      arg_word: {<c> <Id.Lit_Other '+'> <Id.Lit_Other '+'>}
                    )
                )
              } {<-c>} {(${ Id.VSub_Name CXXFLAGS)} {(${ Id.VSub_Name LIBCXXFLAGS)} 
              {(DQ (${ Id.VSub_Name ABS_LIBCXXABI_DIR)) <'/src/'> <Id.Lit_Star '*'> <.cpp>} {<-I> (DQ (${ Id.VSub_Name ABS_LIBCXXABI_DIR) <'/include'>)}
            )
            (C {<popd>})
            (C {<pushd>} {<libcxxbuild>})
            (C 
              {
                (braced_var_sub
                  token: <Id.VSub_Name CC>
                  suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<cc>})
                )
              } {<'libcxx/'> <Id.Lit_Star '*'> <.o>} {<'libcxxabi/'> <Id.Lit_Star '*'> <.o>} {<-o>} 
              {<libc> <Id.Lit_Other '+'> <Id.Lit_Other '+'> <.1.dylib>} {<-dynamiclib>} {<-nodefaultlibs>} {<-current_version>} {<1>} {<-compatibility_version>} {<1>} {<-lSystem>} 
              {<-install_name>} {<Id.Lit_Splice '@executable_path'> <'/libc'> <Id.Lit_Other '+'> <Id.Lit_Other '+'> <.dylib>} 
              {<-Wl> <Id.Lit_Comma ','> <-unexported_symbols_list> <Id.Lit_Comma ','> 
                (${ Id.VSub_Name ABS_LIBCXX_DIR) <'/lib/libc'> <Id.Lit_Other '+'> <Id.Lit_Other '+'> <unexp.exp>
              } 
              {<-Wl> <Id.Lit_Comma ','> <-force_symbols_not_weak_list> <Id.Lit_Comma ','> 
                (${ Id.VSub_Name ABS_LIBCXX_DIR) <'/lib/notweak.exp'>
              } 
              {<-Wl> <Id.Lit_Comma ','> <-force_symbols_weak_list> <Id.Lit_Comma ','> 
                (${ Id.VSub_Name ABS_LIBCXX_DIR) <'/lib/weak.exp'>
              }
            )
            (C {<ln>} {<-sf>} {<libc> <Id.Lit_Other '+'> <Id.Lit_Other '+'> <.1.dylib>} 
              {<libc> <Id.Lit_Other '+'> <Id.Lit_Other '+'> <.dylib>}
            )
            (C {<popd>})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:LDFLAGS)
                  op: assign_op.PlusEqual
                  rhs: {(DQ <'-stdlib=libc++ -L'> (${ Id.VSub_Name PWD) <'/libcxxbuild'>)}
                  spids: [3889]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Unary
                                  op_id: Id.BoolUnary_n
                                  child: {(DQ (${ Id.VSub_Name bootstrap))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<rm>} {<-rf>} {(DQ (${ Id.VSub_Name ABS_LIBCXX_DIR))})
                    (C {<rm>} {<-rf>} {(DQ (${ Id.VSub_Name ABS_LIBCXXABI_DIR))})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:CXXFLAGS)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ <'-stdlib=libc++ -nostdinc++ -I'> (${ Id.VSub_Name ABS_INSTALL_DIR) 
                                <'/include/c++/v1 '> (${ Id.VSub_Name CFLAGS)
                              )
                            }
                          spids: [3956]
                        )
                      ]
                    )
                  ]
                  spids: [3900 3915]
                )
              ]
            )
          ]
          spids: [3642 3661]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BINUTILS_INCDIR)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [3977]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name OS))} {<Id.Lit_Equals '='>} 
                      {(DQ <Linux>)} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:BINUTILS_INCDIR)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name ABS_BINUTILS_DIR) <'/Linux_x64/Release/include'>)}
                  spids: [4003]
                )
              ]
            )
          ]
          spids: [3981 4000]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: 
                            {
                              (braced_var_sub
                                token: <Id.VSub_Name LLVM_FORCE_HEAD_REVISION>
                                suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{(SQ )})
                              )
                            }
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CFLAGS)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name CFLAGS) <' -DLLVM_FORCE_HEAD_REVISION'>)}
                  spids: [4040]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:CXXFLAGS)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Name CXXFLAGS) <' -DLLVM_FORCE_HEAD_REVISION'>)}
                  spids: [4049]
                )
              ]
            )
          ]
          spids: [4021 4037]
        )
      ]
    )
    (C {<mkdir>} {<-v>} {(${ Id.VSub_Name CHROME_TOOLS_SHIM_DIR)})
    (command.Simple
      words: [{<cat>}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(${ Id.VSub_Name CHROME_TOOLS_SHIM_DIR) <'/CMakeLists.txt'>}
        )
        (redir
          op: <Id.Redir_DLess '<<'>
          loc: (redir_loc.Fd fd:0)
          arg: 
            (redir_param.HereDoc
              here_begin: {<EOF>}
              here_end_span_id: 4109
              stdin_parts: [
                <
'# Since tools/clang isn\'t actually a subdirectory, use the two argument version\n'
                >
                <'# to specify where build artifacts go. CMake doesn\'t allow reusing the same\n'>
                <
'# binary dir for multiple source dirs, so the build artifacts have to go into a\n'
                >
                <'# subdirectory...\n'>
                <'add_subdirectory('>
                (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                <'{CHROMIUM_TOOLS_SRC} '>
                (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>)
                <'{CMAKE_CURRENT_BINARY_DIR}/a)\n'>
              ]
            )
        )
      ]
      do_fork: T
    )
    (C {<rm>} {<-fv>} {<CMakeCache.txt>})
    (command.Simple
      words: [
        {<cmake>}
        {<-GNinja>}
        {<-DCMAKE_BUILD_TYPE> <Id.Lit_Equals '='> <Release>}
        {<-DLLVM_ENABLE_ASSERTIONS> <Id.Lit_Equals '='> <ON>}
        {<-DLLVM_ENABLE_THREADS> <Id.Lit_Equals '='> <OFF>}
        {<-DLLVM_BINUTILS_INCDIR> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name BINUTILS_INCDIR))}
        {<-DCMAKE_C_COMPILER> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name CC))}
        {<-DCMAKE_CXX_COMPILER> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name CXX))}
        {<-DCMAKE_C_FLAGS> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name CFLAGS))}
        {<-DCMAKE_CXX_FLAGS> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name CXXFLAGS))}
        {<-DCMAKE_EXE_LINKER_FLAGS> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name LDFLAGS))}
        {<-DCMAKE_SHARED_LINKER_FLAGS> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name LDFLAGS))}
        {<-DCMAKE_MODULE_LINKER_FLAGS> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name LDFLAGS))}
        {<-DCMAKE_INSTALL_PREFIX> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name ABS_LLVM_BUILD_DIR))}
        {<-DCHROMIUM_TOOLS_SRC> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name ABS_CHROMIUM_TOOLS_DIR))}
        {<-DCHROMIUM_TOOLS> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name chrome_tools))}
        {(DQ (${ Id.VSub_Name ABS_LLVM_DIR))}
      ]
      more_env: [
        (env_pair
          name: MACOSX_DEPLOYMENT_TARGET
          val: {(${ Id.VSub_Name deployment_target)}
          spids: [4116]
        )
      ]
      do_fork: T
    )
    (C {<env>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: {(DQ (${ Id.VSub_Name gcc_toolchain))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {<mkdir>} {<-p>} {<lib>})
            (C {<cp>} {<-v>} 
              {
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (C {(${ Id.VSub_Name CXX)} {(${ Id.VSub_Name CXXFLAGS)} 
                        {<-print-file-name> <Id.Lit_Equals '='> <libstdc> <Id.Lit_Other '+'> 
                          <Id.Lit_Other '+'> <.so.6>
                        }
                      )
                  )
                )
              } {<'lib/'>}
            )
          ]
          spids: [4264 4279]
        )
      ]
    )
    (C {<ninja>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: {(DQ (${ Id.VSub_Name chrome_tools))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<ninja>} {<cr-install>})]
          spids: [4326 4341]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:STRIP_FLAGS)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [4351]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name OS))} {<Id.Lit_Equals '='>} 
                      {(DQ <Darwin>)} {<Id.Lit_RBracket ']'>}
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:STRIP_FLAGS)
                  op: assign_op.Equal
                  rhs: {<-x>}
                  spids: [4379]
                )
              ]
            )
            (C {<cp>} {<'libcxxbuild/libc'> <Id.Lit_Other '+'> <Id.Lit_Other '+'> <.1.dylib>} {<'bin/'>})
          ]
          spids: [4353 4372]
        )
      ]
    )
    (C {<strip>} {(${ Id.VSub_Name STRIP_FLAGS)} {<'bin/clang'>})
    (C {<popd>})
    (C {<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name COMPILER_RT_BUILD_DIR))})
    (C {<pushd>} {(DQ (${ Id.VSub_Name COMPILER_RT_BUILD_DIR))})
    (C {<rm>} {<-fv>} {<CMakeCache.txt>})
    (command.Simple
      words: [
        {<cmake>}
        {<-GNinja>}
        {<-DCMAKE_BUILD_TYPE> <Id.Lit_Equals '='> <Release>}
        {<-DLLVM_ENABLE_ASSERTIONS> <Id.Lit_Equals '='> <ON>}
        {<-DLLVM_ENABLE_THREADS> <Id.Lit_Equals '='> <OFF>}
        {<-DCMAKE_C_COMPILER> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name CC))}
        {<-DCMAKE_CXX_COMPILER> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name CXX))}
        {<-DLLVM_CONFIG_PATH> <Id.Lit_Equals '='> 
          (DQ (${ Id.VSub_Name ABS_LLVM_BUILD_DIR) <'/bin/llvm-config'>)
        }
        {(DQ (${ Id.VSub_Name ABS_COMPILER_RT_DIR))}
      ]
      more_env: [
        (env_pair
          name: MACOSX_DEPLOYMENT_TARGET
          val: {(${ Id.VSub_Name deployment_target)}
          spids: [4434]
        )
      ]
      do_fork: T
    )
    (C {<ninja>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CLANG_VERSION)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Pipeline
                    children: [
                      (C {(DQ (${ Id.VSub_Name ABS_LLVM_BUILD_DIR) <'/bin/clang'>)} {<--version>})
                      (C {<sed>} {<-ne>} {(SQ <'s/clang version \\([0-9]\\.[0-9]\\.[0-9]\\).*/\\1/p'>)})
                    ]
                    negated: F
                  )
              )
            }
          spids: [4510]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:ABS_LLVM_CLANG_LIB_DIR)
          op: assign_op.Equal
          rhs: 
            {
              (DQ (${ Id.VSub_Name ABS_LLVM_BUILD_DIR) <'/lib/clang/'> (${ Id.VSub_Name CLANG_VERSION))
            }
          spids: [4534]
        )
      ]
    )
    (command.Pipeline
      children: [
        (C {<tar>} {<-c>} {<Id.Lit_Star '*'> <blacklist.txt>})
        (C {<tar>} {<-C>} {(${ Id.VSub_Name ABS_LLVM_CLANG_LIB_DIR)} {<-xv>})
      ]
      negated: F
    )
    (command.Pipeline
      children: [
        (C {<tar>} {<-c>} {<'include/sanitizer'>})
        (C {<tar>} {<-C>} {(${ Id.VSub_Name ABS_LLVM_CLANG_LIB_DIR)} {<-xv>})
      ]
      negated: F
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Binary
                          op_id: Id.BoolBinary_GlobEqual
                          left: {(DQ (${ Id.VSub_Name OS))}
                          right: {(DQ <Darwin>)}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (command.Pipeline
              children: [
                (C {<tar>} {<-c>} {<'lib/darwin'>})
                (C {<tar>} {<-C>} {(${ Id.VSub_Name ABS_LLVM_CLANG_LIB_DIR)} {<-xv>})
              ]
              negated: F
            )
          ]
          spids: [4582 4601]
        )
      ]
      else_action: [
        (command.Pipeline
          children: [
            (C {<tar>} {<-c>} {<'lib/linux'>})
            (C {<tar>} {<-C>} {(${ Id.VSub_Name ABS_LLVM_CLANG_LIB_DIR)} {<-xv>})
          ]
          negated: F
        )
      ]
    )
    (C {<popd>})
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: {(DQ (${ Id.VSub_Name with_android))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [
            (C {(${ Id.VSub_Name ANDROID_NDK_DIR) <'/build/tools/make-standalone-toolchain.sh'>} 
              {<--platform> <Id.Lit_Equals '='> <android-19>} {<--install-dir> <Id.Lit_Equals '='> (DQ (${ Id.VSub_Name LLVM_BUILD_DIR) <'/android-toolchain'>)} 
              {<--system> <Id.Lit_Equals '='> <linux-x86_64>} {<--stl> <Id.Lit_Equals '='> <stlport>} {<--toolchain> <Id.Lit_Equals '='> <arm-linux-androideabi-4.9>}
            )
            (C {<rm>} {<-v>} 
              {(DQ (${ Id.VSub_Name LLVM_BUILD_DIR)) <'/android-toolchain/include/c'> 
                <Id.Lit_Other '+'> <Id.Lit_Other '+'> <'/'> <Id.Lit_Star '*'> <'/unwind.h'>
              }
            )
            (C {<mkdir>} {<-p>} {(${ Id.VSub_Name LLVM_BUILD_DIR) <'/android'>})
            (C {<pushd>} {(${ Id.VSub_Name LLVM_BUILD_DIR) <'/android'>})
            (C {<rm>} {<-fv>} {<CMakeCache.txt>})
            (command.Simple
              words: [
                {<cmake>}
                {<-GNinja>}
                {<-DCMAKE_BUILD_TYPE> <Id.Lit_Equals '='> <Release>}
                {<-DLLVM_ENABLE_ASSERTIONS> <Id.Lit_Equals '='> <ON>}
                {<-DLLVM_ENABLE_THREADS> <Id.Lit_Equals '='> <OFF>}
                {<-DCMAKE_C_COMPILER> <Id.Lit_Equals '='> (${ Id.VSub_Name PWD) <'/../bin/clang'>}
                {<-DCMAKE_CXX_COMPILER> <Id.Lit_Equals '='> (${ Id.VSub_Name PWD) <'/../bin/clang'> 
                  <Id.Lit_Other '+'> <Id.Lit_Other '+'>
                }
                {<-DLLVM_CONFIG_PATH> <Id.Lit_Equals '='> (${ Id.VSub_Name PWD) <'/../bin/llvm-config'>}
                {<-DCMAKE_C_FLAGS> <Id.Lit_Equals '='> 
                  (DQ <'--target=arm-linux-androideabi --sysroot='> (${ Id.VSub_Name PWD) 
                    <'/../android-toolchain/sysroot -B'> (${ Id.VSub_Name PWD) <'/../android-toolchain'>
                  )
                }
                {<-DCMAKE_CXX_FLAGS> <Id.Lit_Equals '='> 
                  (DQ <'--target=arm-linux-androideabi --sysroot='> (${ Id.VSub_Name PWD) 
                    <'/../android-toolchain/sysroot -B'> (${ Id.VSub_Name PWD) <'/../android-toolchain'>
                  )
                }
                {<-DANDROID> <Id.Lit_Equals '='> <1>}
                {(DQ (${ Id.VSub_Name ABS_COMPILER_RT_DIR))}
              ]
              more_env: [
                (env_pair
                  name: MACOSX_DEPLOYMENT_TARGET
                  val: {(${ Id.VSub_Name deployment_target)}
                  spids: [4768]
                )
              ]
              do_fork: T
            )
            (C {<ninja>} {<libclang_rt.asan-arm-android.so>})
            (C {<cp>} 
              {
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: (C {<find>} {<-name>} {<libclang_rt.asan-arm-android.so>})
                  )
                )
              } {(DQ (${ Id.VSub_Name ABS_LLVM_CLANG_LIB_DIR) <'/lib/linux/'>)}
            )
            (C {<popd>})
          ]
          spids: [4649 4664]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.LogicalOr
                          left: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_n
                              child: {(DQ ($ Id.VSub_DollarName '$run_tests'))}
                            )
                          right: 
                            (bool_expr.Unary
                              op_id: Id.BoolUnary_n
                              child: 
                                {
                                  (DQ 
                                    (braced_var_sub
                                      token: <Id.VSub_Name LLVM_FORCE_HEAD_REVISION>
                                      suffix_op: 
                                        (suffix_op.Unary
                                          tok: <Id.VTest_ColonHyphen ':-'>
                                          arg_word: {<'\'\''>}
                                        )
                                    )
                                  )
                                }
                            )
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<ninja>} {<-C>} {(DQ (${ Id.VSub_Name LLVM_BUILD_DIR))} {<cr-check-all>})]
          spids: [4906 4931]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: 
            (condition.Shell
              commands: [
                (command.Sentence
                  child: 
                    (command.DBracket
                      expr: 
                        (bool_expr.Unary
                          op_id: Id.BoolUnary_n
                          child: {(DQ ($ Id.VSub_DollarName '$run_tests'))}
                        )
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
          action: [(C {<ninja>} {<-C>} {(DQ (${ Id.VSub_Name LLVM_BUILD_DIR))} {<check-all>})]
          spids: [4952 4965]
        )
      ]
    )
    (command.Simple
      words: [{<echo>} {(DQ (${ Id.VSub_Name PACKAGE_VERSION))}]
      redirects: [
        (redir
          op: <Id.Redir_Great '>'>
          loc: (redir_loc.Fd fd:1)
          arg: {(DQ (${ Id.VSub_Name STAMP_FILE))}
        )
      ]
      do_fork: T
    )
  ]
)