svoid tok_for_unpair(LS tok) { jreplace(tok, "for (unpair , :", "for (unpair $4 $5, $4 $7 :"); jreplace(tok, "for ( , : unpair", "for (unpair $3 $4, $3 $6 :"); jreplace(tok, "for ( , : unpair", "for (unpair $3 $4, $6 $7 :"); int i = -1; while ((i = jfind(tok, i+1, "for (unpair , :")) >= 0) { S type1 = tok.get(i+6), var1 = tok.get(i+8); S type2 = tok.get(i+12), var2 = tok.get(i+14); int iColon = indexOf(tok, ":", i); int iClosing = findEndOfBracketPart(tok, iColon)-1; int iCurly = iClosing+2; tok_statementToBlock(tok, iCurly); S pairVar = makeVar(); replaceTokens(tok, i+4, iColon-1, tok_toNonPrimitiveTypes("Pair<" + type1 + ", " + type2 + ">") + " " + pairVar); tok.set(iCurly, "{ " + type1 + " " + var1 + " = pairA(" + pairVar + "); " + type2 + " " + var2 + " = pairB(" + pairVar + "); "); reTok(tok, i, iCurly+1); } // typeless version i = -1; while ((i = jfind(tok, i+1, "for (, : unpair")) >= 0) { S var1 = tok.get(i+4); S var2 = tok.get(i+8); int iColon = indexOf(tok, ":", i); int iClosing = findEndOfBracketPart(tok, iColon)-1; int iCurly = iClosing+2; tok_statementToBlock(tok, iCurly); S pairVar = makeVar(); replaceTokens(tok, i+4, iColon+3, "var " + pairVar + ":"); tok.set(iCurly, "{ " + "var " + var1 + " = pairA(" + pairVar + "); " + "var " + var2 + " = pairB(" + pairVar + "); "); reTok(tok, i, iCurly+1); } }