(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:out)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_Number '$1'))}
          spids: [3]
        )
      ]
    )
    (C {<shift>})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:in)
          op: assign_op.Equal
          rhs: {(DQ ($ Id.VSub_At '$@'))}
          spids: [10]
        )
      ]
    )
    (command.Pipeline
      children: [
        (command.ForEach
          iter_name: i
          iter_words: [{($ Id.VSub_DollarName '$in')}]
          do_arg_iter: F
          body: 
            (command.DoGroup
              children: [
                (C {<eval>} {($ Id.VSub_DollarName '$CPP')} {($ Id.VSub_DollarName '$LINUXINCLUDE')} 
                  {<-dD>} {<-imacros>} {(DQ ($ Id.VSub_DollarName '$i'))} {<-x>} {<c>} {<'/dev/null'>}
                )
              ]
            )
        )
        (C {<awk>} 
          {
            (SQ <'$1 == "#define" && $2 ~ /__HYPERVISOR_[a-z][a-z_0-9]*/ { v[$3] = $2 }\n'> 
              <'\tEND {   print "/* auto-generated by scripts/xen-hypercall.sh */"\n'> <'\t\tfor (i in v) if (!(v[i] in v))\n'> <'\t\t\tprint "HYPERCALL("substr(v[i], 14)")"}'>
            )
          }
        )
        (command.Simple
          words: [{<sort>} {<-u>}]
          redirects: [
            (redir
              op: <Id.Redir_Great '>'>
              loc: (redir_loc.Fd fd:1)
              arg: {($ Id.VSub_DollarName '$out')}
            )
          ]
          do_fork: T
        )
      ]
      negated: F
    )
  ]
)