Skip to content

Commit 9b15f6e

Browse files
authored
Consolidate null checks for satisfies in protocol (#588)
* v0.8.126 * Bookkeep null protocol inside of protocol obj
1 parent bdb7ddc commit 9b15f6e

File tree

4 files changed

+80
-164
lines changed

4 files changed

+80
-164
lines changed

examples/wordle/wordle.mjs

Lines changed: 72 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -1,186 +1,101 @@
1-
import { atom, reset_BANG_, range, conj, vec, prn, nth, swap_BANG_, vector, mapv, subvec, inc, str, apply, map_indexed, deref, re_matches } from 'clavascript/core.js'
2-
var board_state = atom([]);
3-
var counter = atom(0);
4-
var attempt = atom(0);
5-
var word_of_the_day = atom("hello");
1+
import * as squint_core from 'squint-cljs/core.js';
2+
var board_state = squint_core.atom([]);
3+
var counter = squint_core.atom(0);
4+
var attempt = squint_core.atom(0);
5+
var word_of_the_day = squint_core.atom("hello");
66
var write_letter = function (cell, letter) {
7-
return cell["textContent"] = letter;
7+
return cell.textContent = letter;
88
;
99
};
1010
var make_cell = function () {
11-
let cell1 = document.createElement("div");
12-
cell1["className"] = "cell";
11+
const cell1 = document.createElement("div");
12+
cell1.className = "cell";
1313
return cell1;
1414
};
1515
var make_board = function (n) {
16-
let board2 = document.createElement("div");
17-
board2["className"] = "board";
18-
let seq__37 = range(n);
19-
let chunk__48 = null;
20-
let count__59 = 0;
21-
let i__610 = 0;
22-
while(true){
23-
if ((i__610 < count__59)) {
24-
let _11 = _nth(chunk__48, i__610);
25-
let cell12 = make_cell();
26-
swap_BANG_(board_state, conj, cell12);
27-
board2.appendChild(cell12);
28-
null;
29-
let G__13 = seq__37;
30-
let G__14 = chunk__48;
31-
let G__15 = count__59;
32-
let G__16 = unchecked_inc(i__610);
33-
seq__37 = G__13;
34-
chunk__48 = G__14;
35-
count__59 = G__15;
36-
i__610 = G__16;
37-
continue;
38-
} else {
39-
let temp__29223__auto__17 = ((seq__37["length"] > 0)) ? (seq__37) : (null);
40-
if (temp__29223__auto__17) {
41-
let seq__318 = temp__29223__auto__17;
42-
if (false) {
43-
let c__29616__auto__19 = chunk_first(seq__318);
44-
let G__20 = chunk_rest(seq__318);
45-
let G__21 = c__29616__auto__19;
46-
let G__22 = count(c__29616__auto__19);
47-
let G__23 = 0;
48-
seq__37 = G__20;
49-
chunk__48 = G__21;
50-
count__59 = G__22;
51-
i__610 = G__23;
52-
continue;
53-
} else {
54-
let _24 = (seq__318[0]);
55-
let cell25 = make_cell();
56-
swap_BANG_(board_state, conj, cell25);
57-
board2.appendChild(cell25);
58-
null;
59-
let G__26 = seq__318.slice(1);
60-
let G__27 = null;
61-
let G__28 = 0;
62-
let G__29 = 0;
63-
seq__37 = G__26;
64-
chunk__48 = G__27;
65-
count__59 = G__28;
66-
i__610 = G__29;
67-
continue;
68-
}}};break;
69-
}
70-
;
71-
return board2;
16+
const board1 = document.createElement("div");
17+
board1.className = "board";
18+
for (let G__2 of squint_core.iterable(squint_core.range(n))) {
19+
const _3 = G__2;
20+
const cell4 = make_cell();
21+
squint_core.swap_BANG_(board_state, squint_core.conj, cell4);
22+
board1.appendChild(cell4)
23+
};
24+
return board1;
7225
};
7326
var get_letter = function (cell) {
74-
return cell["textContent"];
27+
return cell.textContent;
7528
};
7629
var color_cell = function (idx, cell) {
77-
let color30 = function (el, color) {
78-
return el["style"]["backgroundColor"] = color;
30+
const color1 = (function (el, color) {
31+
return el.style.backgroundColor = color;
7932
;
80-
};
81-
let letter31 = get_letter(cell);
82-
if ((letter31 === nth(deref(word_of_the_day), idx))) {
83-
return color30(cell, "green");} else {
84-
if (contains_QMARK_(set(deref(word_of_the_day)), letter31)) {
85-
return color30(cell, "aqua");} else {
33+
});
34+
const letter2 = get_letter(cell);
35+
if ((letter2) === (squint_core.nth(squint_core.deref(word_of_the_day), idx))) {
36+
return color1(cell, "green");} else {
37+
if (squint_core.truth_(squint_core.contains_QMARK_(squint_core.set(squint_core.deref(word_of_the_day)), letter2))) {
38+
return color1(cell, "aqua");} else {
8639
if ("else") {
87-
return color30(cell, "#333333");} else {
40+
return color1(cell, "#333333");} else {
8841
return null;}}}
8942
};
9043
var check_solution = function (cells) {
91-
let seq__3236 = map_indexed(vector, cells);
92-
let chunk__3337 = null;
93-
let count__3438 = 0;
94-
let i__3539 = 0;
95-
while(true){
96-
if ((i__3539 < count__3438)) {
97-
let vec__4043 = _nth(chunk__3337, i__3539);
98-
let idx44 = nth(vec__4043, 0, null);
99-
let cell45 = nth(vec__4043, 1, null);
100-
color_cell(idx44, cell45);
101-
null;
102-
let G__46 = seq__3236;
103-
let G__47 = chunk__3337;
104-
let G__48 = count__3438;
105-
let G__49 = unchecked_inc(i__3539);
106-
seq__3236 = G__46;
107-
chunk__3337 = G__47;
108-
count__3438 = G__48;
109-
i__3539 = G__49;
110-
continue;
111-
} else {
112-
let temp__29223__auto__50 = ((seq__3236["length"] > 0)) ? (seq__3236) : (null);
113-
if (temp__29223__auto__50) {
114-
let seq__3251 = temp__29223__auto__50;
115-
if (false) {
116-
let c__29616__auto__52 = chunk_first(seq__3251);
117-
let G__53 = chunk_rest(seq__3251);
118-
let G__54 = c__29616__auto__52;
119-
let G__55 = count(c__29616__auto__52);
120-
let G__56 = 0;
121-
seq__3236 = G__53;
122-
chunk__3337 = G__54;
123-
count__3438 = G__55;
124-
i__3539 = G__56;
125-
continue;
126-
} else {
127-
let vec__5760 = (seq__3251[0]);
128-
let idx61 = nth(vec__5760, 0, null);
129-
let cell62 = nth(vec__5760, 1, null);
130-
color_cell(idx61, cell62);
131-
null;
132-
let G__63 = seq__3251.slice(1);
133-
let G__64 = null;
134-
let G__65 = 0;
135-
let G__66 = 0;
136-
seq__3236 = G__63;
137-
chunk__3337 = G__64;
138-
count__3438 = G__65;
139-
i__3539 = G__66;
140-
continue;
141-
}}};break;
142-
}
143-
;
144-
prn(str(mapv(get_letter, cells)));
145-
prn(str(vec(deref(word_of_the_day))));
146-
return (apply(str, mapv(get_letter, cells)) === str(deref(word_of_the_day)));
44+
for (let G__1 of squint_core.iterable(squint_core.map_indexed(squint_core.vector, cells))) {
45+
const vec__25 = G__1;
46+
const idx6 = squint_core.nth(vec__25, 0, null);
47+
const cell7 = squint_core.nth(vec__25, 1, null);
48+
color_cell(idx6, cell7)
49+
};
50+
return (squint_core.apply(squint_core.str, squint_core.mapv(get_letter, cells))) === (squint_core.str(squint_core.deref(word_of_the_day)));
14751
};
14852
var user_input = function (key) {
149-
let start67 = (5 * deref(attempt));
150-
let end68 = (5 * (deref(attempt) + 1));
151-
if (re_matches(/[a-z]/, key)&&(deref(counter) < end68)) {
152-
write_letter(nth(deref(board_state), deref(counter)), key);
153-
return swap_BANG_(counter, inc);} else {
154-
if ((key === "backspace")&&(deref(counter) > start67)) {
155-
swap_BANG_(counter, dec);
156-
return write_letter(nth(deref(board_state), deref(counter)), "");} else {
157-
if ((key === "enter")&&(deref(counter) === end68)) {
158-
if (check_solution(subvec(deref(board_state), start67, end68))) {
53+
const start1 = (5) * (squint_core.deref(attempt));
54+
const end2 = (5) * ((squint_core.deref(attempt) + 1));
55+
if (squint_core.truth_((() => {
56+
const and__24178__auto__3 = squint_core.re_matches(/[a-z]/, key);
57+
if (squint_core.truth_(and__24178__auto__3)) {
58+
return (squint_core.deref(counter)) < (end2);} else {
59+
return and__24178__auto__3;}
60+
})())) {
61+
write_letter(squint_core.nth(squint_core.deref(board_state), squint_core.deref(counter)), key);
62+
return squint_core.swap_BANG_(counter, squint_core.inc);} else {
63+
if (squint_core.truth_((() => {
64+
const and__24178__auto__4 = (key) === ("backspace");
65+
if (and__24178__auto__4) {
66+
return (squint_core.deref(counter)) > (start1);} else {
67+
return and__24178__auto__4;}
68+
})())) {
69+
squint_core.swap_BANG_(counter, squint_core.dec);
70+
return write_letter(squint_core.nth(squint_core.deref(board_state), squint_core.deref(counter)), "");} else {
71+
if (squint_core.truth_((() => {
72+
const and__24178__auto__5 = (key) === ("enter");
73+
if (and__24178__auto__5) {
74+
return (squint_core.deref(counter)) === (end2);} else {
75+
return and__24178__auto__5;}
76+
})())) {
77+
if (squint_core.truth_(check_solution(squint_core.subvec(squint_core.deref(board_state), start1, end2)))) {
15978
alert("You won")};
160-
return swap_BANG_(attempt, inc);} else {
79+
return squint_core.swap_BANG_(attempt, squint_core.inc);} else {
16180
return null;}}}
16281
};
163-
if ((typeof listener !== 'undefined')) {
164-
null} else {
165-
var listener = atom(null);
166-
};
82+
var listener = squint_core.atom(null);
16783
var unmount = function () {
168-
document.removeEventListener("keydown", deref(listener));
169-
let app69 = document.getElementById("app");
170-
return app69["innerHTML"] = "";
84+
document.removeEventListener("keydown", squint_core.deref(listener));
85+
const app1 = document.getElementById("app");
86+
return app1.innerHTML = "";
17187
;
17288
};
17389
var mount = function () {
174-
let app70 = document.getElementById("app");
175-
let board71 = make_board(30);
176-
let input_listener72 = function (e) {
177-
return user_input(e["key"].toLowerCase());
178-
};
179-
app70.appendChild(board71);
180-
reset_BANG_(listener, input_listener72);
181-
return document.addEventListener("keydown", input_listener72);
90+
const app1 = document.getElementById("app");
91+
const board2 = make_board(30);
92+
const input_listener3 = (function (e) {
93+
return user_input(e.key.toLowerCase());
94+
});
95+
app1.appendChild(board2);
96+
squint_core.reset_BANG_(listener, input_listener3);
97+
return document.addEventListener("keydown", input_listener3);
18298
};
18399
mount();
184-
null;
185100

186101
export { make_cell, counter, word_of_the_day, board_state, listener, user_input, check_solution, color_cell, attempt, unmount, mount, make_board, write_letter, get_letter }

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "squint-cljs",
33
"type": "module",
44
"sideEffects": false,
5-
"version": "0.8.125",
5+
"version": "0.8.126",
66
"files": [
77
"core.js",
88
"src/squint/core.js",

src/squint/core.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,10 @@ export const __protocol_satisfies = {};
6464

6565
export function satisfies_QMARK_(protocol, x) {
6666
if (x == null) {
67-
return __protocol_satisfies[protocol];
67+
return protocol[null];
6868
}
69-
return x[protocol];
69+
if (typeof protocol == 'symbol') return x[protocol];
70+
return x[protocol.__sym];
7071
}
7172

7273
function mapAssocMut(m, k, v) {

src/squint/internal/protocols.cljc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
(partition 2 (rest doc-and-opts)))
3636
(into {} (partition 2 doc-and-opts)))]
3737
`(do
38-
(def ~(with-meta p pmeta) (js/Symbol ~(str p)))
38+
(def ~(with-meta p pmeta) {:__sym (js/Symbol ~(str p))})
3939
~@(mapcat #(emit-protocol-method p %) methods))))
4040

4141
(core/defn ->impl-map [impls]
@@ -85,11 +85,11 @@
8585
[type-sym [psym pmethods]]
8686
(let [flag (if (nil? type-sym)
8787
`(unchecked-set
88-
~'clojure.core/__protocol_satisfies
89-
~psym true)
88+
~psym nil true)
9089
`(unchecked-set
9190
(.-prototype ~type-sym)
92-
~psym true))]
91+
(unchecked-get ~psym "__sym") true))]
92+
;; (prn :flag flag)
9393
`(~flag
9494
~@(map #(emit-type-method psym type-sym %) pmethods))))
9595

0 commit comments

Comments
 (0)