(command.CommandList children: [ (command.ShAssignment left: <Id.Lit_VarLike 'include_dir='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'include_dir='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'include_dir='> name:include_dir) op: assign_op.Equal rhs: {<'../../include/openssl'>} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'out='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'out='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'out='> name:out) op: assign_op.Equal rhs: {(${ Id.VSub_Name include_dir) <'/lhash_macros.h'>} ) ] redirects: [] ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_Great '>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName out)} ) (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'/* Copyright (c) 2014, Google Inc.\n'> <' *\n'> <' * Permission to use, copy, modify, and/or distribute this software for any\n'> <' * purpose with or without fee is hereby granted, provided that the above\n'> <' * copyright notice and this permission notice appear in all copies.\n'> <' *\n'> <' * THE SOFTWARE IS PROVIDED '> <Id.Right_DoubleQuote '"'> <'AS IS'> <Id.Right_DoubleQuote '"'> <' AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n'> <' * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n'> <' * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY\n'> <' * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n'> < ' * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION\n' > <' * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN\n'> <' * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */\n'> <'\n'> <'#if !defined(IN_LHASH_H)\n'> <'#error '> <Id.Right_DoubleQuote '"'> <'Don\'t include this file directly. Include lhash.h'> <Id.Right_DoubleQuote '"'> <'\n'> <'#endif\n'> <'\n'> ] ) ) ] do_fork: T ) (command.ShFunction name_tok: <output_lhash> name: output_lhash body: (BraceGroup left: <Id.Lit_LBrace '{'> children: [ (command.ShAssignment left: <Id.Lit_VarLike 'type='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'type='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'type='> name:type) op: assign_op.Equal rhs: {($ Id.VSub_Number 1)} ) ] redirects: [] ) (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>}] redirects: [ (Redir op: <Id.Redir_DGreat '>>'> loc: (redir_loc.Fd fd:1) arg: {($ Id.VSub_DollarName out)} ) (Redir op: <Id.Redir_DLess '<<'> loc: (redir_loc.Fd fd:0) arg: (redir_param.HereDoc here_begin: {<EOF>} here_end_tok: <Id.Undefined_Tok ''> stdin_parts: [ <'/* '> (${ Id.VSub_Name type) <' */\n'> <'#define lh_'> (${ Id.VSub_Name type) <'_new(hash, comp)'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'\n'> <'((LHASH_OF('> (${ Id.VSub_Name type) <')*) lh_new(CHECKED_CAST(lhash_hash_func, uint32_t (*) (const '> (${ Id.VSub_Name type) <' *), hash), CHECKED_CAST(lhash_cmp_func, int (*) (const '> (${ Id.VSub_Name type) <' *a, const '> (${ Id.VSub_Name type) <' *b), comp)))\n'> <'\n'> <'#define lh_'> (${ Id.VSub_Name type) <'_free(lh)'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'\n'> <' lh_free(CHECKED_CAST(_LHASH*, LHASH_OF('> (${ Id.VSub_Name type) <')*, lh));\n'> <'\n'> <'#define lh_'> (${ Id.VSub_Name type) <'_num_items(lh)'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'\n'> <' lh_num_items(CHECKED_CAST(_LHASH*, LHASH_OF('> (${ Id.VSub_Name type) <')*, lh))\n'> <'\n'> <'#define lh_'> (${ Id.VSub_Name type) <'_retrieve(lh, data)'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'\n'> <' (('> (${ Id.VSub_Name type) <'*) lh_retrieve(CHECKED_CAST(_LHASH*, LHASH_OF('> (${ Id.VSub_Name type) <')*, lh), CHECKED_CAST(void*, '> (${ Id.VSub_Name type) <'*, data)))\n'> <'\n'> <'#define lh_'> (${ Id.VSub_Name type) <'_insert(lh, old_data, data)'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'\n'> <' lh_insert(CHECKED_CAST(_LHASH*, LHASH_OF('> (${ Id.VSub_Name type) <')*, lh), CHECKED_CAST(void**, '> (${ Id.VSub_Name type) <'**, old_data), CHECKED_CAST(void*, '> (${ Id.VSub_Name type) <'*, data))\n'> <'\n'> <'#define lh_'> (${ Id.VSub_Name type) <'_delete(lh, data)'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'\n'> <' (('> (${ Id.VSub_Name type) <'*) lh_delete(CHECKED_CAST(_LHASH*, LHASH_OF('> (${ Id.VSub_Name type) <')*, lh), CHECKED_CAST(void*, '> (${ Id.VSub_Name type) <'*, data)))\n'> <'\n'> <'#define lh_'> (${ Id.VSub_Name type) <'_doall(lh, func)'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'\n'> <' lh_doall(CHECKED_CAST(_LHASH*, LHASH_OF('> (${ Id.VSub_Name type) <')*, lh), CHECKED_CAST(void (*)(void*), void (*) ('> (${ Id.VSub_Name type) <'*), func));\n'> <'\n'> <'#define lh_'> (${ Id.VSub_Name type) <'_doall_arg(lh, func, arg)'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ch: '\\' ) <'\n'> <' lh_doall_arg(CHECKED_CAST(_LHASH*, LHASH_OF('> (${ Id.VSub_Name type) <')*, lh), CHECKED_CAST(void (*)(void*, void*), void (*) ('> (${ Id.VSub_Name type) <'*, void*), func), arg);\n'> <'\n'> <'\n'> ] ) ) ] do_fork: T ) ] redirects: [] right: <Id.Lit_RBrace '}'> ) ) (command.ShAssignment left: <Id.Lit_VarLike 'lhash_types='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'lhash_types='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'lhash_types='> name:lhash_types) op: assign_op.Equal rhs: { (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <cat> more_env: [] words: [{<cat>} {(${ Id.VSub_Name include_dir) <'/lhash.h'>}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {(SQ <'^ \\* LHASH_OF:'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [{<sed>} {<-e>} {(SQ <'s/.*LHASH_OF://'>)} {<-e>} {(SQ <'s/ .*//'>)}] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) } ) ] redirects: [] ) (command.ForEach keyword: <Id.KW_For for> iter_names: [type] iterable: (for_iter.Words words:[{($ Id.VSub_DollarName lhash_types)}]) semi_tok: <Id.Op_Semi _> body: (command.DoGroup left: <Id.KW_Do do> children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {<Hash>} {<of>} {(${ Id.VSub_Name type)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <output_lhash> more_env: [] words: [{<output_lhash>} {(DQ (${ Id.VSub_Name type))}] redirects: [] do_fork: T ) ] right: <Id.KW_Done done> ) redirects: [] ) (command.Simple blame_tok: <clang-format> more_env: [] words: [{<clang-format>} {<-i>} {($ Id.VSub_DollarName out)}] redirects: [] do_fork: T ) ] )