(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:PATH) op: assign_op.Equal rhs: {(.) (Id.Lit_Other ':') ($ Id.VSub_DollarName '$PATH')} spids: [7] ) ] ) (command.ShFunction name: exceedsDaysInMonth body: (command.BraceGroup children: [ (command.Case to_match: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:35) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(echo)} {($ Id.VSub_Number '$1')}) (C {(tr)} {(SQ (Token id:Id.Lit_Chars val:'[:upper:]' span_id:43))} {(SQ (Token id:Id.Lit_Chars val:'[:lower:]' span_id:47))} ) ] negated: F ) ] ) ) } arms: [ (case_arm pat_list: [{(jan) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(31)} spids: [59] ) ] ) ] spids: [54 57 62 -1] ) (case_arm pat_list: [{(feb) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(28)} spids: [69] ) ] ) ] spids: [64 67 72 -1] ) (case_arm pat_list: [{(mar) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(31)} spids: [80] ) ] ) ] spids: [75 78 83 -1] ) (case_arm pat_list: [{(apr) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(30)} spids: [90] ) ] ) ] spids: [85 88 93 -1] ) (case_arm pat_list: [{(may) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(31)} spids: [101] ) ] ) ] spids: [96 99 104 -1] ) (case_arm pat_list: [{(jun) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(30)} spids: [111] ) ] ) ] spids: [106 109 114 -1] ) (case_arm pat_list: [{(jul) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(31)} spids: [122] ) ] ) ] spids: [117 120 125 -1] ) (case_arm pat_list: [{(aug) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(31)} spids: [132] ) ] ) ] spids: [127 130 135 -1] ) (case_arm pat_list: [{(sep) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(30)} spids: [143] ) ] ) ] spids: [138 141 146 -1] ) (case_arm pat_list: [{(oct) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(31)} spids: [153] ) ] ) ] spids: [148 151 156 -1] ) (case_arm pat_list: [{(nov) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(30)} spids: [164] ) ] ) ] spids: [159 162 167 -1] ) (case_arm pat_list: [{(dec) (Id.Lit_Star '*')}] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:days) op: assign_op.Equal rhs: {(31)} spids: [174] ) ] ) ] spids: [169 172 177 -1] ) (case_arm pat_list: [{(Id.Lit_Star '*')}] action: [ (command.Sentence child: (command.Simple words: [ {(echo)} { (DQ ($ Id.VSub_Number '$0') (': Unknown month name ') ($ Id.VSub_Number '$1') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:192) fd: -1 arg_word: {(2)} ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:194) ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:196) arg_word: {(1)} ) ] spids: [180 182 -1 201] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Number '$2')} {(-lt)} {(1)} {(-o)} {($ Id.VSub_Number '$2')} {(-gt)} {($ Id.VSub_DollarName '$days')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:224) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:229) arg_word: {(1)} ) ] spids: [204 226] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:237) arg_word: {(0)} ) ] ) ] ) ) (command.ShFunction name: isLeapYear body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:year) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [292] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (DQ (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Percent left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:year span_id:302) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 4)}) ) ) ) } {(-ne)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:317) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:322) arg_word: {(1)} ) ] spids: [296 319] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (DQ (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Percent left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:year span_id:336) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 400)}) ) ) ) } {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:351) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:356) arg_word: {(0)} ) ] spids: [330 353] ) (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} { (DQ (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Percent left: (arith_expr.VarRef token: (Token id:Id.Lit_ArithVarLike val:year span_id:370) ) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 100)}) ) ) ) } {(-eq)} {(0)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:385) ) ] action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:390) arg_word: {(1)} ) ] spids: [364 387] ) ] else_action: [ (command.ControlFlow token: (Token id:Id.ControlFlow_Return val:return span_id:398) arg_word: {(0)} ) ] ) ] ) ) ] )