Skip to content

Commit 340eb9e

Browse files
committed
support @export and @reexport in racket kernel
1 parent 0c4eef7 commit 340eb9e

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

ui/src/lib/ws/middleware.js

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,32 +9,28 @@ function powerRun_racket({ id, storeAPI, socket }) {
99
let names = pod.children
1010
.filter(({ id }) => pods[id].type !== "DECK")
1111
.filter(({ id }) => pods[id].exports)
12-
.map(({ id }) =>
13-
Object.entries(pods[id].exports)
14-
.filter(([k, v]) => v)
15-
.map(([k, v]) => k)
16-
);
12+
.map(({ id }) => pods[id].exports);
1713
names = [].concat(...names);
1814
let struct_codes = pod.children
19-
.filter(({ id }) => pods[id].exports)
2015
.filter(
2116
({ id }) =>
22-
Object.entries(pods[id].exports)
23-
.filter(([k, v]) => v)
24-
.map(([k, v]) => k)
25-
.filter((k) => k.startsWith("struct ")).length > 0
17+
pods[id].type === "DECK" && !pods[id].thundar && pods[id].exports
18+
)
19+
.filter(
20+
({ id }) =>
21+
pods[id].exports.filter((k) => k.startsWith("struct:")).length > 0
2622
)
2723
.map(({ id }) => pods[id].content);
2824
// FIXME reset-module is problematic! it is equivalanet to the following expansion. Why??
2925
// let code = `(enter! #f) (reset-module ${ns} ${names.join(" ")})`;
3026
let struct_names = names
31-
.filter((s) => s.startsWith("struct "))
27+
.filter((s) => s.startsWith("struct:"))
3228
.map((s) => s.split(" ")[1]);
3329
// FIXME will the struct-out support update?
3430
//
3531
// UPDATE this does not work. Instead, I could insert the real content for
3632
// all exported names maybe?
37-
names = names.filter((s) => !s.startsWith("struct "));
33+
names = names.filter((s) => !s.startsWith("struct:"));
3834

3935
// also I need to require for struct:parent
4036
let nses = getUtilNs({ id, pods });
@@ -50,21 +46,25 @@ function powerRun_racket({ id, storeAPI, socket }) {
5046
nses.push(pods[pod.parent].ns);
5147
}
5248

53-
// exported subdecks
54-
let exported_decks = pods[id].children
55-
.filter(
56-
({ id }) =>
57-
pods[id].type === "DECK" && pods[id].exports && pods[id].exports["self"]
49+
let reexports = getReexports({ id, pods });
50+
let reexport_code = Object.keys(reexports)
51+
.map(
52+
(ns) => `
53+
(require (only-in '${ns} ${reexports[ns]
54+
.map((name) => `${name}`)
55+
.join(" ")}))
56+
(provide ${reexports[ns].map((name) => `${name}`).join(" ")})
57+
`
5858
)
59-
.map(({ id, type }) => pods[id].ns);
59+
.join("\n");
6060

6161
let code = `
6262
(enter! #f)
6363
(module ${pod.ns} racket
6464
(require rackunit 'CODEPOD ${nses.map((s) => "'" + s).join(" ")})
65+
${reexport_code}
6566
(provide ${names.join(" ")}
6667
${struct_names.map((s) => `(struct-out ${s})`).join("\n")}
67-
${exported_decks.map((s) => `(all-from-out '${s})`).join("\n")}
6868
)
6969
${names.map((name) => `(define ${name} "PLACEHOLDER-${name}")`).join("\n")}
7070
${struct_codes.join("\n")}

0 commit comments

Comments
 (0)