1 1.3 rillig /* $NetBSD: psym_switch_expr.c,v 1.3 2022/04/22 21:21:20 rillig Exp $ */ 2 1.1 rillig 3 1.1 rillig /* 4 1.1 rillig * Tests for the parser symbol psym_switch_expr, which represents the keyword 5 1.1 rillig * 'switch' followed by the controlling expression, now waiting for a 6 1.1 rillig * statement (usually a block) containing the 'case' labels. 7 1.1 rillig */ 8 1.1 rillig 9 1.1 rillig #indent input 10 1.1 rillig // TODO: add input 11 1.1 rillig #indent end 12 1.1 rillig 13 1.1 rillig #indent run-equals-input 14 1.2 rillig 15 1.2 rillig 16 1.2 rillig /* 17 1.2 rillig * In all practical cases, a 'switch (expr)' is followed by a block, but the 18 1.2 rillig * C syntax allows an arbitrary statement. Unless such a statement has a 19 1.2 rillig * label, it is unreachable. 20 1.2 rillig */ 21 1.2 rillig #indent input 22 1.2 rillig void 23 1.2 rillig function(void) 24 1.2 rillig { 25 1.2 rillig switch (expr) 26 1.2 rillig if (cond) { 27 1.2 rillig case 1: return; 28 1.2 rillig case 2: break; 29 1.2 rillig } 30 1.2 rillig } 31 1.2 rillig #indent end 32 1.2 rillig 33 1.2 rillig #indent run 34 1.2 rillig void 35 1.2 rillig function(void) 36 1.2 rillig { 37 1.2 rillig switch (expr) 38 1.2 rillig if (cond) { 39 1.2 rillig case 1: 40 1.2 rillig return; 41 1.2 rillig case 2: 42 1.2 rillig break; 43 1.2 rillig } 44 1.2 rillig } 45 1.2 rillig #indent end 46