svoid tok_swappableFunctions(LS tok) { int i; while ((i = jfind(tok, "swappable (")) >= 0) { S returnType = tok.get(i+2), name = tok.get(i+4); int iCurly = indexOf(tok, i, "{"); LPairS args = tok_typesAndNamesOfParams(subList(tok, i+7, iCurly-2)); S args2 = joinWithComma(pairsB(args)); S typeParams = joinWithComma(itemPlusList(returnType, pairsA(args))); // TODO: modifiers, primitives etc. S base = name + "_base"; replaceTokens_reTok(tok, i, iCurly+1, "transient IF\*l(args)*/<\*typeParams*/> \*name*/;\n" + "\*returnType*/ \*name*/() { ret \*name*/ != null ? \*name*/.get(\*args2*/) : \*base*/(\*args2*/); }\n" + "\*returnType*/ \*base*/() {"); } }