static LS findFunctionDefsAtCurlyLevel(int curlyLevel, S s) { ret findFunctionDefsAtCurlyLevel(curlyLevel, javaTok(s)); } static LS findFunctionDefsAtCurlyLevel(int targetCurlyLevel, LS tok) { ifclass IContentsIndexedList2 if (tok cast IContentsIndexedList2) ret findFunctionDefsAtCurlyLevel_indexed(targetCurlyLevel, tok); endif new LS functions; var keywords = findFunctionDefs_keywords(); int n = l(tok); int curlyLevel = 0; new BitSet ignore; for (int i = 1; i < n; i += 2) { if (ignore.get(i)) continue; S t = tok.get(i); // Account for meta-for (don't change curly level) if (eqSubList(tok, i, "meta", "", "-", "", "for")) { var r = tok_findFirstBlock(tok, i); ignore.set(r.start); ignore.set(r.end-1); } curlyLevel += curlyLevel(t); if (curlyLevel == targetCurlyLevel) if (keywords.contains(t)) findFunctionDefs_step(tok, i, functions); } ret functions; }