(command.CommandList
  children: [
    (command.ShFunction
      name: check
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (command.Pipeline
                          children: [
                            (C {<grep>} {<-q>} {(DQ ($ Id.VSub_Number '$2'))} 
                              {(DQ ($ Id.VSub_Number '$1'))}
                            )
                          ]
                          negated: T
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} 
                      {(DQ <'Did not find expected symbol in '> ($ Id.VSub_Number '$1') <':'>)}
                    )
                    (C {<echo>} {(DQ <'   '> ($ Id.VSub_Number '$2'))})
                    (C {<echo>} {(DQ )})
                    (C {<echo>} {(DQ <'Actual output below:'>)})
                    (C {<cat>} {(DQ ($ Id.VSub_Number '$1'))})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [78 95]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: check_missing
      body: 
        (BraceGroup
          children: [
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (C {<grep>} {<-q>} {(DQ ($ Id.VSub_Number '$2'))} {(DQ ($ Id.VSub_Number '$1'))})
                      ]
                    )
                  action: [
                    (C {<echo>} {(DQ <'Found unexpected symbol in '> ($ Id.VSub_Number '$1') <':'>)})
                    (C {<echo>} {(DQ <'   '> ($ Id.VSub_Number '$2'))})
                    (C {<echo>} {(DQ )})
                    (C {<echo>} {(DQ <'Actual output below:'>)})
                    (C {<cat>} {(DQ ($ Id.VSub_Number '$1'))})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [152 167]
                )
              ]
            )
          ]
        )
    )
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V1  *sizeof_headers'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'Base  *globaoeufostuff'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V1  *globaoeufxstuff'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V2  *otherns::stuff'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'Base  *otherns::biz'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V1  *foo'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V1  *bar()'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'Base  *bar1()'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V1  *bar2'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V1  *myns::blah()'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V1  *myns::bip()'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V1  *myns::Stuff::Stuff()'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'Base  *Biz::Biz()'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V2  *blaza1'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V2  *blaza2'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V2  *blaza'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'Base  *bla'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V2  *blaz'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} {(DQ <'V2  *blazb'> <Id.Lit_Dollar '$'>)})
    (C {<check>} {<ver_matching_test.stdout>} 
      {
        (DQ <'V1   *baz(int'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <'*)'> 
          <Id.Lit_Dollar '$'>
        )
      }
    )
    (C {<check_missing>} {<ver_matching_test.stdout>} 
      {
        (DQ <'V1   *baz(int'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <'*, char)'> 
          <Id.Lit_Dollar '$'>
        )
      }
    )
    (C {<check_missing>} {<ver_matching_test.stdout>} 
      {
        (DQ <'V1   *baz(char'> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>) <'*, int)'> 
          <Id.Lit_Dollar '$'>
        )
      }
    )
    (C {<check_missing>} {<ver_matching_test.stdout>} {(DQ <foo1>)})
    (C {<check_missing>} {<ver_matching_test.stdout>} {(DQ <__bss_start>)})
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)