(command.CommandList
  children: [
    (C {<readonly>} 
      {<Id.Lit_VarLike 'ScriptDir='> 
        (command_sub
          left_token: <Id.Left_DollarParen '$('>
          child: 
            (C {<dirname>} 
              {
                (DQ 
                  (command_sub
                    left_token: <Id.Left_DollarParen '$('>
                    child: 
                      (command.Pipeline
                        children: [
                          (C {<echo>} {($ Id.VSub_Number '$0')})
                          (C {<sed>} {<-e>} 
                            {
                              (DQ <'s,^'> <Id.Lit_BadBackslash '\\'> <'([^/]'> 
                                <Id.Lit_BadBackslash '\\'> <'),'> (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {<pwd>})) <'/'> 
                                <Id.Lit_BadBackslash '\\'> <'1,'>
                              )
                            }
                          )
                        ]
                        negated: F
                      )
                  )
                )
              }
            )
        )
      }
    )
    (C {<readonly>} {<Id.Lit_VarLike 'ProtoRootDir='> (DQ (${ Id.VSub_Name ScriptDir) <'/../..'>)})
    (command.ShFunction
      name: die
      body: 
        (BraceGroup
          children: [
            (C {<echo>} {(DQ <'Error: '> ($ Id.VSub_Number '$1'))})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
        )
    )
    (C {<readonly>} 
      {<Id.Lit_VarLike 'GeneratorSrc='> 
        (DQ (${ Id.VSub_Name ProtoRootDir) 
          <'/src/google/protobuf/compiler/objectivec/objectivec_file.cc'>
        )
      }
    )
    (C {<readonly>} 
      {<Id.Lit_VarLike 'RuntimeSrc='> 
        (DQ (${ Id.VSub_Name ProtoRootDir) <'/objectivec/GPBBootstrap.h'>)
      }
    )
    (command.ShFunction
      name: check_constant
      body: 
        (BraceGroup
          children: [
            (C {<local>} {<Id.Lit_VarLike 'ConstantName='> (DQ ($ Id.VSub_Number '$1'))})
            (C {<local>} 
              {<Id.Lit_VarLike 'GeneratorVersion='> 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Pipeline
                      children: [
                        (C {<cat>} {(DQ (${ Id.VSub_Name GeneratorSrc))})
                        (C {<sed>} {<-n>} {<-e>} 
                          {
                            (DQ <'s:const int32 '> (${ Id.VSub_Name ConstantName) <' = '> 
                              <Id.Lit_BadBackslash '\\'> <'([0-9]*'> <Id.Lit_BadBackslash '\\'> <');:'> <Id.Lit_BadBackslash '\\'> <'1:p'>
                            )
                          }
                        )
                      ]
                      negated: F
                    )
                )
              }
            )
            (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_Name GeneratorVersion))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<die>} 
                      {
                        (DQ <'Failed to find '> (${ Id.VSub_Name ConstantName) 
                          <' in the generator source ('> (${ Id.VSub_Name GeneratorSrc) <').'>
                        )
                      }
                    )
                  ]
                  spids: [178 194]
                )
              ]
            )
            (C {<local>} 
              {<Id.Lit_VarLike 'RuntimeVersion='> 
                (command_sub
                  left_token: <Id.Left_DollarParen '$('>
                  child: 
                    (command.Pipeline
                      children: [
                        (C {<cat>} {(DQ (${ Id.VSub_Name RuntimeSrc))})
                        (C {<sed>} {<-n>} {<-e>} 
                          {
                            (DQ <'s:#define '> (${ Id.VSub_Name ConstantName) <' '> 
                              <Id.Lit_BadBackslash '\\'> <'([0-9]*'> <Id.Lit_BadBackslash '\\'> <'):'> <Id.Lit_BadBackslash '\\'> <'1:p'>
                            )
                          }
                        )
                      ]
                      negated: F
                    )
                )
              }
            )
            (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_Name RuntimeVersion))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<die>} 
                      {
                        (DQ <'Failed to find '> (${ Id.VSub_Name ConstantName) 
                          <' in the runtime source ('> (${ Id.VSub_Name RuntimeSrc) <').'>
                        )
                      }
                    )
                  ]
                  spids: [263 279]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.Binary
                                  op_id: Id.BoolBinary_GlobNEqual
                                  left: {(DQ (${ Id.VSub_Name GeneratorVersion))}
                                  right: {(DQ (${ Id.VSub_Name RuntimeVersion))}
                                )
                            )
                          terminator: <Id.Op_Semi _>
                        )
                      ]
                    )
                  action: [
                    (C {<die>} 
                      {
                        (DQ (${ Id.VSub_Name ConstantName) <' values don\'t match!\n'> 
                          <'  Generator: '> (${ Id.VSub_Name GeneratorVersion) <' from '> (${ Id.VSub_Name GeneratorSrc) <'\n'> <'    Runtime: '> 
                          (${ Id.VSub_Name RuntimeVersion) <' from '> (${ Id.VSub_Name RuntimeSrc) <'\n'>
                        )
                      }
                    )
                  ]
                  spids: [305 327]
                )
              ]
            )
          ]
        )
    )
    (C {<check_constant>} {<GOOGLE_PROTOBUF_OBJC_VERSION>})
  ]
)