1 | static void tok_listComprehensions(L<S> tok) {
|
2 | if (!tok.contains("[")) ret;
|
3 | for (int i = 1; i < l(tok); i += 2) try {
|
4 | continue unless eq(tok.get(i), "["); |
5 | int iOp = indexOfAny(tok, i+2, "?", ":", "in", "[", "]"); |
6 | if (iOp < 0) ret; |
7 | if (!eqOneOf(tok.get(iOp), ":", "in")) continue; // not a list comprehension |
8 | if (eqGet(tok, iOp+2, ".")) continue; // "in." (in is a variable name) |
9 | |
10 | Map<Int> bracketMap = getBracketMap(tok); // XXX - optimize |
11 | |
12 | S type = joinSubList(tok, i+2, iOp-3), id = tok.get(iOp-2); |
13 | int j = scanOverExpression(tok, bracketMap, iOp+2, "|"); |
14 | S exp = join(subList(tok, iOp+2, j)); |
15 | j += 2; |
16 | int k = scanOverExpression(tok, bracketMap, j, "]"); |
17 | S where = join(subList(tok, j, k)); |
18 | ++k; |
19 | |
20 | S code = "filter(" + exp + ", func(" + type + " " + id + ") -> Bool { " + where + " })";
|
21 | replaceTokens(tok, i, k, code); |
22 | reTok(tok, i, k); |
23 | } on fail {
|
24 | print("Was processing list comprehension: " + joinSubList(tok, i, i+30) + "...");
|
25 | } |
26 | } |
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1016767 |
| Snippet name: | tok_listComprehensions |
| Eternal ID of this version: | #1016767/6 |
| Text MD5: | b9be9113c399ac181e57082071f19b97 |
| Author: | stefan |
| Category: | javax / transpiling |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2021-07-24 03:03:59 |
| Source code size: | 1054 bytes / 26 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 708 / 739 |
| Version history: | 5 change(s) |
| Referenced in: | [show references] |