(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:include_dir) op: assign_op.Equal rhs: {<'../../include/openssl'>} spids: [4] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:out) op: assign_op.Equal rhs: {(${ Id.VSub_Name include_dir) <'/lhash_macros.h'>} spids: [7] ) ] ) (command.Simple 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_span_id: 51 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: output_lhash body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:type) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [61] ) ] ) (command.Simple 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_span_id: 231 stdin_parts: [ <'/* '> (${ Id.VSub_Name type) <' */\n'> <'#define lh_'> (${ Id.VSub_Name type) <'_new(hash, comp)'> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\\\'> ) <'\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 '\\\\'> ) <'\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 '\\\\'> ) <'\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 '\\\\'> ) <'\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 '\\\\'> ) <'\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 '\\\\'> ) <'\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 '\\\\'> ) <'\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 '\\\\'> ) <'\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 ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:lhash_types) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<cat>} {(${ Id.VSub_Name include_dir) <'/lhash.h'>}) (C {<grep>} {(SQ <'^ \\* LHASH_OF:'>)}) (C {<sed>} {<-e>} {(SQ <'s/.*LHASH_OF://'>)} {<-e>} {(SQ <'s/ .*//'>)}) ] negated: F ) ) } spids: [235] ) ] ) (command.ForEach iter_name: type iter_words: [{($ Id.VSub_DollarName '$lhash_types')}] do_arg_iter: F body: (command.DoGroup children: [ (C {<echo>} {<Hash>} {<of>} {(${ Id.VSub_Name type)}) (C {<output_lhash>} {(DQ (${ Id.VSub_Name type))}) ] ) ) (C {<clang-format>} {<-i>} {($ Id.VSub_DollarName '$out')}) ] )