(CommandList
  children: [
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:ScriptDir)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(dirname)} 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {(echo)} {($ VSub_Number "$0")})
                                        (C {(sed)} {(-e)} 
                                          {
                                            (DQ ("s,^") 
                                              (EscapedLiteralPart
                                                token: <Lit_EscapedChar "\\(">
                                              ) ("[^/]") (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (",") 
                                              (CommandSubPart
                                                command_list: (CommandList children:[(C {(pwd)})])
                                                left_token: <Left_CommandSub "$(">
                                                spids: [50 52]
                                              ) (/) (EscapedLiteralPart token:<Lit_EscapedChar "\\1">) (",")
                                            )
                                          }
                                        )
                                      ]
                                      negated: False
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub "$(">
                              spids: [33 57]
                            )
                          )
                        }
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [29 59]
              )
            }
          spids: [28]
        )
      ]
      spids: [26]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:ProtoRootDir)
          op: Equal
          rhs: {(DQ (${ VSub_Name ScriptDir) (/../..))}
          spids: [63]
        )
      ]
      spids: [61]
    )
    (FuncDef
      name: die
      body: 
        (BraceGroup
          children: [(C {(echo)} {(DQ ("Error: ") ($ VSub_Number "$1"))}) (C {(exit)} {(1)})]
          spids: [76]
        )
      spids: [72 75]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:GeneratorSrc)
          op: Equal
          rhs: 
            {
              (DQ (${ VSub_Name ProtoRootDir) 
                (/src/google/protobuf/compiler/objectivec/objectivec_file.cc)
              )
            }
          spids: [96]
        )
      ]
      spids: [94]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:RuntimeSrc)
          op: Equal
          rhs: {(DQ (${ VSub_Name ProtoRootDir) (/objectivec/GPBBootstrap.h))}
          spids: [106]
        )
      ]
      spids: [104]
    )
    (FuncDef
      name: check_constant
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:ConstantName)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [124]
                )
              ]
              spids: [122]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:GeneratorVersion)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(cat)} {(DQ (${ VSub_Name GeneratorSrc))})
                                  (C {(sed)} {(-n)} {(-e)} 
                                    {
                                      (DQ ("s:const int32 ") (${ VSub_Name ConstantName) (" = ") 
                                        (EscapedLiteralPart
                                          token: <Lit_EscapedChar "\\(">
                                        ) ("[0-9]*") (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (";:") 
                                        (EscapedLiteralPart
                                          token: <Lit_EscapedChar "\\1">
                                        ) (":p")
                                      )
                                    }
                                  )
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [138 175]
                      )
                    }
                  spids: [137]
                )
              ]
              spids: [135]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolUnary
                              op_id: BoolUnary_z
                              child: {(DQ (${ VSub_Name GeneratorVersion))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(die)} 
                      {
                        (DQ ("Failed to find ") (${ VSub_Name ConstantName) 
                          (" in the generator source (") (${ VSub_Name GeneratorSrc) (").")
                        )
                      }
                    )
                  ]
                  spids: [-1 194]
                )
              ]
              spids: [-1 212]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:RuntimeVersion)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [
                              (Pipeline
                                children: [
                                  (C {(cat)} {(DQ (${ VSub_Name RuntimeSrc))})
                                  (C {(sed)} {(-n)} {(-e)} 
                                    {
                                      (DQ ("s:#define ") (${ VSub_Name ConstantName) (" ") 
                                        (EscapedLiteralPart
                                          token: <Lit_EscapedChar "\\(">
                                        ) ("[0-9]*") (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (":") 
                                        (EscapedLiteralPart
                                          token: <Lit_EscapedChar "\\1">
                                        ) (":p")
                                      )
                                    }
                                  )
                                ]
                                negated: False
                              )
                            ]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [223 260]
                      )
                    }
                  spids: [222]
                )
              ]
              spids: [220]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: (BoolUnary op_id:BoolUnary_z child:{(DQ (${ VSub_Name RuntimeVersion))})
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(die)} 
                      {
                        (DQ ("Failed to find ") (${ VSub_Name ConstantName) 
                          (" in the runtime source (") (${ VSub_Name RuntimeSrc) (").")
                        )
                      }
                    )
                  ]
                  spids: [-1 279]
                )
              ]
              spids: [-1 297]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobNEqual
                              left: {(DQ (${ VSub_Name GeneratorVersion))}
                              right: {(DQ (${ VSub_Name RuntimeVersion))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(die)} 
                      {
                        (DQ (${ VSub_Name ConstantName) (" values don't match!\n") ("  Generator: ") 
                          (${ VSub_Name GeneratorVersion) (" from ") (${ VSub_Name GeneratorSrc) ("\n") ("    Runtime: ") (${ VSub_Name RuntimeVersion) (" from ") 
                          (${ VSub_Name RuntimeSrc) ("\n")
                        )
                      }
                    )
                  ]
                  spids: [-1 327]
                )
              ]
              spids: [-1 358]
            )
          ]
          spids: [119]
        )
      spids: [115 118]
    )
    (C {(check_constant)} {(GOOGLE_PROTOBUF_OBJC_VERSION)})
  ]
)