(CommandList
  children: [
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:OUTPUT_DIR)
          op: Equal
          rhs: {(DQ (${ VSub_Name PROJECT_DERIVED_FILE_DIR) (/protos))}
          spids: [9]
        )
      ]
      spids: [7]
    )
    (FuncDef
      name: die
      body: 
        (BraceGroup
          children: [(C {(echo)} {(DQ ("Error: ") ($ VSub_Number "$1"))}) (C {(exit)} {(2)})]
          spids: [28]
        )
      spids: [24 27]
    )
    (Case
      to_match: {(DQ (${ VSub_Name ACTION))}
      arms: [
        (case_arm pat_list:[{(DQ )}] spids:[-16572-1])
        (case_arm
          pat_list: [{(DQ (clean))}]
          action: [(C {(rm)} {(-rf)} {(DQ (${ VSub_Name OUTPUT_DIR))}) (C {(exit)} {(0)})]
          spids: [76 78 97 -1]
        )
        (case_arm
          pat_list: [{(Lit_Other "*")}]
          action: [(C {(die)} {(DQ ("Unknown action requested: ") (${ VSub_Name ACTION))})]
          spids: [100 101 114 -1]
        )
      ]
      spids: [52 60 116]
    )
    (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name OUTPUT_DIR) (/google/protobuf))})
    (C {(cd)} {(DQ (${ VSub_Name SRCROOT) (/..))})
    (AndOr
      children: [
        (DBracket expr:(BoolUnary op_id:BoolUnary_x child:{(src/protoc)}))
        (C {(die)} 
          {
            (DQ 
              (
"Could not find the protoc binary; make sure you have built it (objectivec/DevTools/full_mac_build.sh -h)."
              )
            )
          }
        )
      ]
      op_id: Op_DPipe
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:RUN_PROTOC) op:Equal rhs:{(no)} spids:[180])]
      spids: [180]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (LogicalNot
                      child: (BoolUnary op_id:BoolUnary_d child:{(DQ (${ VSub_Name OUTPUT_DIR))})
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:RUN_PROTOC) op:Equal rhs:{(yes)} spids:[204])]
              spids: [204]
            )
          ]
          spids: [-1 201]
        )
      ]
      else_action: [
        (Assignment
          keyword: Assign_Readonly
          pairs: [
            (assign_pair
              lhs: (LhsName name:NewestInput)
              op: Equal
              rhs: 
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (Pipeline
                            children: [
                              (C {(find)} {(src/google/protobuf/) (Lit_Other "*") (.proto)} 
                                {(objectivec/Tests/) (Lit_Other "*") (.proto)} {(src/.libs)} {(src/) (Lit_Other "*") (.la)} {(src/protoc)} 
                                {(objectivec/DevTools/compile_testing_protos.sh)} {(-type)} {(f)} {(-print0)}
                              )
                              (C {(xargs)} {(-0)} {(stat)} {(-f)} {(DQ ("%m %N"))})
                              (C {(sort)} {(-n)})
                              (C {(tail)} {(-n1)})
                              (C {(cut)} {(-f2-)} {(-d) (DQ (" "))})
                            ]
                            negated: False
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [225 302]
                  )
                }
              spids: [224]
            )
          ]
          spids: [222]
        )
        (Assignment
          keyword: Assign_Readonly
          pairs: [
            (assign_pair
              lhs: (LhsName name:OldestOutput)
              op: Equal
              rhs: 
                {
                  (CommandSubPart
                    command_list: 
                      (CommandList
                        children: [
                          (Pipeline
                            children: [
                              (C {(find)} {(DQ (${ VSub_Name OUTPUT_DIR))} {(-type)} {(f)} {(-name)} 
                                {(DQ ("*pbobjc.[hm]"))} {(-print0)}
                              )
                              (C {(xargs)} {(-0)} {(stat)} {(-f)} {(DQ ("%m %N"))})
                              (C {(sort)} {(-n)} {(-r)})
                              (C {(tail)} {(-n1)})
                              (C {(cut)} {(-f2-)} {(-d) (DQ (" "))})
                            ]
                            negated: False
                          )
                        ]
                      )
                    left_token: <Left_CommandSub "$(">
                    spids: [312 379]
                  )
                }
              spids: [311]
            )
          ]
          spids: [309]
        )
        (If
          arms: [
            (if_arm
              cond: [
                (Sentence
                  child: 
                    (DBracket
                      expr: 
                        (BoolBinary
                          op_id: BoolBinary_nt
                          left: {(DQ (${ VSub_Name NewestInput))}
                          right: {(DQ (${ VSub_Name OldestOutput))}
                        )
                    )
                  terminator: <Op_Semi ";">
                )
              ]
              action: [
                (Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (LhsName name:RUN_PROTOC)
                      op: Equal
                      rhs: {(yes)}
                      spids: [411]
                    )
                  ]
                  spids: [411]
                )
              ]
              spids: [-1 408]
            )
          ]
          spids: [-1 415]
        )
      ]
      spids: [207 417]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobNEqual
                      left: {(DQ (${ VSub_Name RUN_PROTOC))}
                      right: {(DQ (yes))}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(exit)} {(0)})]
          spids: [-1 440]
        )
      ]
      spids: [-1 451]
    )
    (Pipeline
      children: [
        (C {(find)} {(DQ (${ VSub_Name OUTPUT_DIR))} {(-type)} {(f)} {(-name)} {(DQ ("*pbobjc.[hm]"))} 
          {(-print0)}
        )
        (C {(xargs)} {(-0)} {(rm)} {(-rf)})
      ]
      negated: False
    )
    (FuncDef
      name: compile_protos
      body: 
        (BraceGroup
          children: [
            (C {(src/protoc)} 
              {(--objc_out) (Lit_Other "=") (DQ (${ VSub_Name OUTPUT_DIR) (/google/protobuf))} {(--proto_path) (Lit_Other "=") (src/google/protobuf/)} {(--proto_path) (Lit_Other "=") (src)} 
              {(DQ ($ VSub_At "$@"))}
            )
          ]
          spids: [508]
        )
      spids: [504 507]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:CORE_PROTO_FILES)
          op: Equal
          rhs: 
            {
              (ArrayLiteralPart
                words: [
                  {(src/google/protobuf/any_test.proto)}
                  {(src/google/protobuf/unittest_arena.proto)}
                  {(src/google/protobuf/unittest_custom_options.proto)}
                  {(src/google/protobuf/unittest_enormous_descriptor.proto)}
                  {(src/google/protobuf/unittest_embed_optimize_for.proto)}
                  {(src/google/protobuf/unittest_empty.proto)}
                  {(src/google/protobuf/unittest_import.proto)}
                  {(src/google/protobuf/unittest_import_lite.proto)}
                  {(src/google/protobuf/unittest_lite.proto)}
                  {(src/google/protobuf/unittest_mset.proto)}
                  {(src/google/protobuf/unittest_mset_wire_format.proto)}
                  {(src/google/protobuf/unittest_no_arena.proto)}
                  {(src/google/protobuf/unittest_no_arena_import.proto)}
                  {(src/google/protobuf/unittest_no_generic_services.proto)}
                  {(src/google/protobuf/unittest_optimize_for.proto)}
                  {(src/google/protobuf/unittest.proto)}
                  {(src/google/protobuf/unittest_import_public.proto)}
                  {(src/google/protobuf/unittest_import_public_lite.proto)}
                  {(src/google/protobuf/unittest_drop_unknown_fields.proto)}
                  {(src/google/protobuf/unittest_preserve_unknown_enum.proto)}
                  {(src/google/protobuf/map_lite_unittest.proto)}
                  {(src/google/protobuf/map_proto2_unittest.proto)}
                  {(src/google/protobuf/map_unittest.proto)}
                  {(src/google/protobuf/descriptor.proto)}
                ]
              )
            }
          spids: [558]
        )
      ]
      spids: [558]
    )
    (ForEach
      iter_name: a_proto
      iter_words: [
        {
          (DQ 
            (BracedVarSub
              token: <VSub_Name CORE_PROTO_FILES>
              bracket_op: (WholeArray op_id:Lit_At)
              spids: [664 669]
            )
          )
        }
      ]
      do_arg_iter: False
      body: (DoGroup children:[(C {(compile_protos)} {(DQ (${ VSub_Name a_proto))})] spids:[674685])
      spids: [662 672]
    )
    (C {(compile_protos)} {(--proto_path) (Lit_Other "=") (DQ (objectivec/Tests))} 
      {(objectivec/Tests/unittest_cycle.proto)} {(objectivec/Tests/unittest_extension_chain_a.proto)} 
      {(objectivec/Tests/unittest_extension_chain_b.proto)} {(objectivec/Tests/unittest_extension_chain_c.proto)} 
      {(objectivec/Tests/unittest_extension_chain_d.proto)} {(objectivec/Tests/unittest_extension_chain_e.proto)} 
      {(objectivec/Tests/unittest_extension_chain_f.proto)} {(objectivec/Tests/unittest_extension_chain_g.proto)} 
      {(objectivec/Tests/unittest_runtime_proto2.proto)} {(objectivec/Tests/unittest_runtime_proto3.proto)} {(objectivec/Tests/unittest_objc.proto)} 
      {(objectivec/Tests/unittest_objc_startup.proto)}
    )
  ]
)