static void tok_unpair(L tok) { int i; while ((i = jfind(tok, " , = unpair")) >= 0) { int idx = indexOf(tok, "unpair", i); int j = findEndOfStatement(tok, idx); S type1 = tok.get(i), var1 = tok.get(i+2); S type2 = tok.get(i+6), var2 = tok.get(i+8); S v = makeVar(); tok.set(i+4, ";"); tok.set(idx-2, ";"); tok.set(i+2, "Pair<" + type1 + "," + type2 + "> " + v + "="); tok.set(j-1, "; " + var1 + " = " + v + ".a; " + var2 + " = " + v + ".b;"); reTok(tok, i, j); } while ((i = jfind(tok, " , <,> = unpair")) >= 0) { int idx = indexOf(tok, "unpair", i); int j = findEndOfStatement(tok, idx); S type1 = tok.get(i), var1 = tok.get(i+2); S type2 = joinSubList(tok, i+5, idx-5), var2 = tok.get(idx-4); S v = makeVar(); tok.set(i+4, ";"); tok.set(idx-2, ";"); tok.set(idx-1, ""); tok.set(idx, "Pair<" + type1 + "," + type2 + "> " + v + "="); tok.set(j-1, "; " + var1 + " = " + v + ".a; " + var2 + " = " + v + ".b;"); reTok(tok, i, j); } }