(List (= scope= flags=0 words=[] bindings=[('xfail_list', {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub 0]]})]] [LIT_CHARS /../xfail_list.txt]})]) (If (DBracket {B2 BINARY_STRING_LESS {[VarSub #]} {[LIT_CHARS 1]}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "usage: "][VarSub 0][LIT_CHARS " /full/path/to/test args"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 121]}) ) ) (FunctionDef cleanup [] (List (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub tpid]]} {[DQ [LIT_CHARS 0]]}}) (Com {[LIT_CHARS kill]} {[DQ [VarSub tpid]]}) ) (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub wpid]]} {[DQ [LIT_CHARS 0]]}}) (Com {[LIT_CHARS kill]} {[LIT_CHARS -INT]} {[DQ [VarSub wpid]]}) ) ) ) (FunctionDef interrupted [] (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Interrupted: exiting"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS cleanup]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 122]}) ) ) (Com {[LIT_CHARS trap]} {[LIT_CHARS interrupted]} {[LIT_CHARS SIGINT]}) (FunctionDef timeout [] (List (Com {[LIT_CHARS echo]} {[DQ [VarSub @]]} {[DQ [LIT_CHARS " (TIMEOUT) FAIL"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (= scope= flags=0 words=[] bindings=[('wpid', {[LIT_CHARS 0]})]) (Com {[LIT_CHARS cleanup]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 123]}) ) ) (Com {[LIT_CHARS trap]} {[LIT_CHARS timeout]} {[LIT_CHARS SIGUSR2]}) (= scope= flags=0 words=[] bindings=[('tpid', {[LIT_CHARS 0]})]) (= scope= flags=0 words=[] bindings=[('wpid', {[LIT_CHARS 0]})]) (Fork (Com {[DQ [VarSub @]]}) ) (= scope= flags=0 words=[] bindings=[('tpid', {[VarSub !]})]) (Fork (Subshell (List (Com {[LIT_CHARS sleep]} {[LIT_CHARS 15]}) (Com {[LIT_CHARS kill]} {[LIT_CHARS -USR2]} {[VarSub $]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 2), > ) ) ) ) (= scope= flags=0 words=[] bindings=[('wpid', {[VarSub !]})]) (Com {[LIT_CHARS wait]} {[VarSub tpid]}) (= scope= flags=0 words=[] bindings=[('ret', {[VarSub ?]})]) (= scope= flags=0 words=[] bindings=[('tpid', {[LIT_CHARS 0]})]) (Com {[LIT_CHARS cleanup]}) (= scope= flags=2 words=[] bindings=[('prog', {[DQ [VarSub 1]]})]) (= scope= flags=2 words=[] bindings=[('tst', {[VarSub prog transform_ops=[VS_UNARY_POUND {[VarSub prog transform_ops=[VS_UNARY_PERCENT {[LIT_SLASH /] [LIT_CHARS "*"] [LIT_SLASH /] [LIT_CHARS "*"]}]] [LIT_SLASH /]}]]})]) (Com {[LIT_CHARS grep]} {[LIT_CHARS -x]} {[DQ [VarSub tst]]} {[DQ [VarSub xfail_list]]} < (FilenameRedirectNode filename={[LIT_CHARS /dev/null]} "> 1), (DescriptorRedirectNode target={[LIT_CHARS 1]} &"> 2), > more_env=[('LANG', {[LIT_CHARS C]})] ) (= scope= flags=2 words=[] bindings=[('must_pass', {[VarSub ?]})]) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub ret]]} {[DQ [LIT_CHARS 0]]}}) (List (If (DBracket {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub must_pass]]} {[DQ [LIT_CHARS 0]]}}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub @]]} {[LIT_CHARS PASS]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub @]]} {[LIT_CHARS XPASS]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 120]}) ) (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub ret]]} {[DQ [LIT_CHARS 115]]}}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) (ElseTrue) (List (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub must_pass]]} {[DQ [LIT_CHARS 0]]}}) (List (Com {[LIT_CHARS echo]} {[DQ [VarSub @]]} {[LIT_CHARS XFAIL]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub @]]} {[LIT_CHARS FAIL]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[VarSub ret]}) ) ) )