// returns: (condition, goto, closing line number) // or null static Triple ctxCaseGoto(L lines, int i) { new Matches m; while (i <= l(lines) && emptyAfterTrim(get(lines, i))) ++i; if (!flexMatch("CASE (*) ACTION", get(lines, i), m, false)) null; S condition = $1; if (!flexMatch("[GOTO] = *", get(lines, i+1), m, false)) null; S target = $1; int closing = indexOfClosingCurlyBracket(lines, i+2); ret triple(condition, target, closing); }