substrate-lang 0.9.2 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/compiler/binary.cdd2ffb408dd@0+0.wasm +0 -0
- package/build/compiler/checker.2b0ea87ed311@0+0.wasm +0 -0
- package/build/compiler/compile.da85f9bc4478@0+0.wasm +0 -0
- package/build/compiler/{core.11abd90bead5@0+0.wasm → core.0410ffbdc488@0+0.wasm} +0 -0
- package/build/compiler/expander.80707e1666d6@0+0.wasm +0 -0
- package/build/compiler/{fs.3f7cf768e7ed@0+0.wasm → fs.5017b627cbd2@0+0.wasm} +0 -0
- package/build/compiler/{leb128.0d2a247f239f@0+0.wasm → leb128.ba77430f659f@0+0.wasm} +0 -0
- package/build/compiler/{link.3c4158bb6ba3@0+0.wasm → link.be6e641afa93@0+0.wasm} +0 -0
- package/build/compiler/{macros.6f0e1a78d640@0+0.wasm → macros.b695763c0ca3@0+0.wasm} +0 -0
- package/build/compiler/main.cbbdf42e34c2@0+0.wasm +0 -0
- package/build/compiler/{ops.a5b9269c5240@0+0.wasm → ops.324f0a665fab@0+0.wasm} +0 -0
- package/build/compiler/{path.ec5532669c81@0+0.wasm → path.1b5fd988b6f3@0+0.wasm} +0 -0
- package/build/compiler/program +21 -20
- package/build/compiler/prune.29dde307bdee@0+0.wasm +0 -0
- package/build/compiler/{reader.f4378a1f91d1@0+0.wasm → reader.d256e69e09e2@0+0.wasm} +0 -0
- package/build/compiler/roots.e366210c01d6@0+0.wasm +0 -0
- package/build/compiler/{running.7f03ff780e03@0+0.wasm → running.b99787c2d180@0+0.wasm} +0 -0
- package/build/compiler/serialize.a12536bbbe9a@0+0.wasm +0 -0
- package/build/compiler/sha256.f6c742932dde@0+0.wasm +0 -0
- package/build/compiler/substrate.728c690187f2@0+0.wasm +0 -0
- package/build/compiler/syntax.fadc832db29f@0+0.wasm +0 -0
- package/build/compiler/{writer.b698107b491f@0+0.wasm → writer.550227768eb9@0+0.wasm} +0 -0
- package/build/sub/{base64.fc39f9b2a664@0+0.wasm → base64.454b045156d2@0+0.wasm} +0 -0
- package/build/sub/build.115aeefc15e8@0+0.wasm +0 -0
- package/build/sub/{chromium.0cdcaad35704@0+0.wasm → chromium.fc0bfea0fbe6@0+0.wasm} +0 -0
- package/build/sub/{common.9ea008df47e6@0+0.wasm → common.997c21b0b8cf@0+0.wasm} +0 -0
- package/build/sub/deflate.3138a38325a1@0+0.wasm +0 -0
- package/build/sub/{doc.e0af22e9d586@0+0.wasm → doc.e3f9a998cd91@0+0.wasm} +0 -0
- package/build/sub/{doc.49b234ac4521@0+0.wasm → doc.f18ad14060e9@0+0.wasm} +0 -0
- package/build/sub/env.861d55fff974@0+0.wasm +0 -0
- package/build/sub/events.2c981f6f1ec7@0+0.wasm +0 -0
- package/build/sub/{fetch.59ad8bf17eeb@0+0.wasm → fetch.b0ce8f8b3da8@0+0.wasm} +0 -0
- package/build/sub/fetch.d62aa5fc9623@0+0.wasm +0 -0
- package/build/sub/{files.25d3fe28ff57@0+0.wasm → files.1706cc0941c0@0+0.wasm} +0 -0
- package/build/sub/{fs.3f7cf768e7ed@0+0.wasm → fs.5017b627cbd2@0+0.wasm} +0 -0
- package/build/sub/{git.c47e41fed371@0+0.wasm → git.1c5791236e35@0+0.wasm} +0 -0
- package/build/sub/{grants.e7dc20c93375@0+0.wasm → grants.cd99dff2854e@0+0.wasm} +0 -0
- package/build/sub/{gzip.0bacbb40f6e2@0+0.wasm → gzip.9ebea150f218@0+0.wasm} +0 -0
- package/build/sub/hash.ba8330dad9ff@0+0.wasm +0 -0
- package/build/sub/{html.1ab670c5f861@0+0.wasm → html.0b0362932a75@0+0.wasm} +0 -0
- package/build/sub/{html.a860b2ff2c4e@0+0.wasm → html.3b3c8d7d9971@0+0.wasm} +0 -0
- package/build/sub/{inflate.16c735654147@0+0.wasm → inflate.3cfa17586072@0+0.wasm} +0 -0
- package/build/sub/{json.74966c67a96d@0+0.wasm → json.af2e0ae20084@0+0.wasm} +0 -0
- package/build/sub/manifest.6e014ac19e5d@0+0.wasm +0 -0
- package/build/sub/map.e582eae03ec2@0+0.wasm +0 -0
- package/build/sub/{pack.a62f186e997c@0+0.wasm → pack.4295e4f5bdbd@0+0.wasm} +0 -0
- package/build/sub/{path.ec5532669c81@0+0.wasm → path.1b5fd988b6f3@0+0.wasm} +0 -0
- package/build/sub/path.de22f6659534@0+0.wasm +0 -0
- package/build/sub/process.ca10ac0b8a62@0+0.wasm +0 -0
- package/build/sub/program +48 -48
- package/build/sub/read.279fafcda508@0+0.wasm +0 -0
- package/build/sub/{reader.f4378a1f91d1@0+0.wasm → reader.d256e69e09e2@0+0.wasm} +0 -0
- package/build/sub/{root.5a3e4a594d25@0+0.wasm → root.02141d04d568@0+0.wasm} +0 -0
- package/build/sub/roots.e366210c01d6@0+0.wasm +0 -0
- package/build/sub/{sha256.92185201fb4b@0+0.wasm → sha256.f6c742932dde@0+0.wasm} +0 -0
- package/build/sub/{sha512.bf0d4c469a96@0+0.wasm → sha512.9fee24e95460@0+0.wasm} +0 -0
- package/build/sub/site.76aa8286c257@0+0.wasm +0 -0
- package/build/sub/{site.81b7f3938874@0+0.wasm → site.e6e415bc3170@0+0.wasm} +0 -0
- package/build/sub/{store.128b4d772823@0+0.wasm → store.c48db3345968@0+0.wasm} +0 -0
- package/build/sub/{stream.d95d09173ea2@0+0.wasm → stream.27fd2fe858e1@0+0.wasm} +0 -0
- package/build/sub/{sub.84126bd636af@0+0.wasm → sub.c0fb7310de12@0+0.wasm} +0 -0
- package/build/sub/{substrate.b31300129ffb@0+0.wasm → substrate.728c690187f2@0+0.wasm} +0 -0
- package/build/sub/{syntax.500cf1bcecd4@0+0.wasm → syntax.fadc832db29f@0+0.wasm} +0 -0
- package/build/sub/tar.692c0e8827cd@0+0.wasm +0 -0
- package/build/sub/{test.eed7cfa3264c@0+0.wasm → test.1fd2ff8123bf@0+0.wasm} +0 -0
- package/build/sub/{text.ca2b0668e319@0+0.wasm → text.8ff142d72fd7@0+0.wasm} +0 -0
- package/build/sub/{timer.21d74714d40b@0+0.wasm → timer.d3454726b3bf@0+0.wasm} +0 -0
- package/build/sub/{upgrade.61c36d2a50cf@0+0.wasm → upgrade.2a9219e6a45d@0+0.wasm} +0 -0
- package/build/sub/{utf8.b61525c6fb12@0+0.wasm → utf8.e82afeb9e953@0+0.wasm} +0 -0
- package/build/sub/worker.ea1e11f8f5e2@0+0.wasm +0 -0
- package/build/sub/writer.550227768eb9@0+0.wasm +0 -0
- package/package.json +1 -1
- package/std/archive/tar.sub +14 -21
- package/std/compress/deflate.sub +10 -12
- package/std/crypto/sha256.sub +3 -109
- package/std/encoding/json.sub +44 -65
- package/std/encoding/wire.sub +6 -8
- package/std/http/checks.sub +3 -3
- package/std/http/conditional.sub +2 -4
- package/std/http/cookie.sub +5 -7
- package/std/http/form.sub +7 -10
- package/std/http/http.sub +17 -24
- package/std/http/multipart.sub +5 -5
- package/std/http/route.sub +9 -9
- package/std/http/server.sub +7 -12
- package/std/http/session.sub +1 -4
- package/std/http/sse-client.sub +9 -14
- package/std/http/url.sub +10 -10
- package/std/http/websocket.sub +2 -5
- package/std/meta/type-info.sub +10 -10
- package/std/package/hash.sub +1 -1
- package/std/package/manifest.sub +14 -15
- package/std/package/map.sub +4 -8
- package/std/package/path.sub +1 -4
- package/std/package/read.sub +3 -8
- package/std/package/site.sub +5 -5
- package/std/test/compare.sub +9 -10
- package/std/test/page.sub +1 -1
- package/std/test/run.sub +1 -1
- package/std/test/session.sub +0 -1
- package/std/test/test.sub +24 -17
- package/substrate/VERSION +1 -1
- package/substrate/compiler/binary.sub +5 -14
- package/substrate/compiler/checker.sub +204 -19
- package/substrate/compiler/compile.sub +8 -8
- package/substrate/compiler/expander.sub +208 -84
- package/substrate/compiler/link.sub +2 -2
- package/substrate/compiler/main.sub +15 -2
- package/substrate/compiler/ops.sub +1 -1
- package/substrate/compiler/prune.sub +12 -17
- package/substrate/compiler/roots.sub +93 -26
- package/substrate/compiler/serialize.sub +1 -1
- package/substrate/compiler/sha256.sub +110 -0
- package/substrate/compiler/substrate.sub +14 -14
- package/substrate/compiler/syntax.sub +8 -21
- package/substrate/host/fs.sub +8 -11
- package/substrate/host/grants.sub +25 -26
- package/substrate/host/node/process.sub +5 -6
- package/substrate/host/node/worker-thread.mjs +1 -1
- package/substrate/host/node/worker.mjs +1 -0
- package/substrate/host/subhost-core.mjs +10 -3
- package/substrate/host/subhost.mjs +13 -1
- package/substrate/host/web/subhost-web.mjs +13 -2
- package/substrate/host/web/worker-script.mjs +1 -0
- package/substrate/host/web/worker.mjs +1 -0
- package/substrate/host/worker.mjs +3 -1
- package/build/compiler/binary.5d81a93450b2@0+0.wasm +0 -0
- package/build/compiler/checker.343075746d8c@0+0.wasm +0 -0
- package/build/compiler/compile.2db0f824839f@0+0.wasm +0 -0
- package/build/compiler/expander.c0f36d0bd5fc@0+0.wasm +0 -0
- package/build/compiler/main.cf521803fc5e@0+0.wasm +0 -0
- package/build/compiler/prune.f800615ca8cc@0+0.wasm +0 -0
- package/build/compiler/roots.02808ca2c6a7@0+0.wasm +0 -0
- package/build/compiler/serialize.f4354af92feb@0+0.wasm +0 -0
- package/build/compiler/substrate.b31300129ffb@0+0.wasm +0 -0
- package/build/compiler/syntax.500cf1bcecd4@0+0.wasm +0 -0
- package/build/sub/build.3a016536f5a5@0+0.wasm +0 -0
- package/build/sub/deflate.67457f2269ae@0+0.wasm +0 -0
- package/build/sub/env.d4a2d3ca5408@0+0.wasm +0 -0
- package/build/sub/events.ee8945a7ea00@0+0.wasm +0 -0
- package/build/sub/fetch.22f5c88f8a7b@0+0.wasm +0 -0
- package/build/sub/hash.75dc86b3dd19@0+0.wasm +0 -0
- package/build/sub/manifest.0c0fe02b1e58@0+0.wasm +0 -0
- package/build/sub/map.b767b94ffe7f@0+0.wasm +0 -0
- package/build/sub/path.b98f74b36b19@0+0.wasm +0 -0
- package/build/sub/process.94378bb2ecf2@0+0.wasm +0 -0
- package/build/sub/read.4b71de2f3337@0+0.wasm +0 -0
- package/build/sub/roots.02808ca2c6a7@0+0.wasm +0 -0
- package/build/sub/site.b678ce0b53b9@0+0.wasm +0 -0
- package/build/sub/tar.9c01735ea170@0+0.wasm +0 -0
- package/build/sub/worker.5ced1d8ab0d4@0+0.wasm +0 -0
- package/build/sub/writer.b698107b491f@0+0.wasm +0 -0
package/std/http/server.sub
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
[on-end (fn ((ptr http-request)))]
|
|
40
40
|
[on-gone (fn ((ptr http-request)))] [on-drained (fn ((ptr http-request)))] [body buffer] [limit u32]
|
|
41
41
|
[taken (fn ((ptr http-request) (slice u8)))] [added buffer] [own-head http-head] [etag string] [modified f64]
|
|
42
|
-
[ranges bool] [compressible bool] [events bool] [encoded bool] [gzip
|
|
42
|
+
[ranges bool] [compressible bool] [events bool] [encoded bool] [gzip zip-mode] [deflater (ptr deflater)] [crc u32]
|
|
43
43
|
[size u32])
|
|
44
44
|
|
|
45
45
|
;; A check runs before the handler and returns #t when it has answered.
|
|
@@ -140,13 +140,11 @@
|
|
|
140
140
|
(http-write-header! (& (-> r added)) name value))
|
|
141
141
|
|
|
142
142
|
(define (new-request! [c (ptr http-connection)] [h (ptr http-head)]) -> (ptr http-request)
|
|
143
|
-
(let ([r (
|
|
143
|
+
(let ([r (new 0 http-request)])
|
|
144
144
|
(set! (-> r connection) (cast (ptr void) c))
|
|
145
145
|
(set! (-> r server) (-> c server))
|
|
146
146
|
(set! (-> r length) -1)
|
|
147
|
-
(set! (-> r peer) (
|
|
148
|
-
(-> c peer length))))
|
|
149
|
-
(memcpy (-> r peer bytes) (-> c peer bytes) (-> c peer length))
|
|
147
|
+
(set! (-> r peer) (copy (& (-> r arena)) (-> c peer)))
|
|
150
148
|
(http-head-copy! (& (-> r own-head)) h)
|
|
151
149
|
(set! (-> r head) (& (-> r own-head)))
|
|
152
150
|
(set! (-> r method) (-> r own-head method))
|
|
@@ -581,7 +579,7 @@
|
|
|
581
579
|
[(== kind stream-failed) (drop! c)])))
|
|
582
580
|
|
|
583
581
|
(define (new-connection! [s (ptr http-server)] [stream u32]) -> (ptr http-connection)
|
|
584
|
-
(let ([c (
|
|
582
|
+
(let ([c (new 0 http-connection)])
|
|
585
583
|
(set! (-> c head handle) connection-heard)
|
|
586
584
|
(set! (-> c server) (cast (ptr void) s))
|
|
587
585
|
(set! (-> c stream) stream)
|
|
@@ -612,10 +610,7 @@
|
|
|
612
610
|
;; ---- compression ----
|
|
613
611
|
|
|
614
612
|
;; How an answer is compressed: not, whole by http-send!, as each piece is written, or each event alone.
|
|
615
|
-
(
|
|
616
|
-
(const zip-whole i32 1)
|
|
617
|
-
(const zip-pieces i32 2)
|
|
618
|
-
(const zip-events i32 3)
|
|
613
|
+
(enum zip-mode zip-none zip-whole zip-pieces zip-events)
|
|
619
614
|
|
|
620
615
|
;; Bodies shorter than this go uncompressed.
|
|
621
616
|
(const zip-least i64 1024)
|
|
@@ -763,7 +758,7 @@
|
|
|
763
758
|
(when (and (== (-> r gzip) zip-none) (or (< (-> r length) 0) (>= (-> r length) zip-least)) (zip? r))
|
|
764
759
|
(set! (-> r gzip) (if (-> r events) zip-events zip-pieces))
|
|
765
760
|
(when (== (-> r gzip) zip-pieces)
|
|
766
|
-
(set! (-> r deflater) (
|
|
761
|
+
(set! (-> r deflater) (new 0 deflater))
|
|
767
762
|
(deflater-init! (-> r deflater) (-> s compress))))
|
|
768
763
|
(when (and (has-length? r) (>= (-> r length) 0) (< (-> r gzip) zip-pieces))
|
|
769
764
|
(http-write-number! b "content-length" (-> r length)))
|
|
@@ -911,7 +906,7 @@
|
|
|
911
906
|
(begin
|
|
912
907
|
(stream-close from)
|
|
913
908
|
(http-finish! r))
|
|
914
|
-
(let ([p (
|
|
909
|
+
(let ([p (new 0 relay)])
|
|
915
910
|
(http-write! r 0)
|
|
916
911
|
(set! (-> p head handle) relay-heard)
|
|
917
912
|
(set! (-> p from) from)
|
package/std/http/session.sub
CHANGED
|
@@ -51,10 +51,7 @@
|
|
|
51
51
|
(set! ok (and (<= at (+ (now-seconds) 60)) (<= (cast i64 (- (now-seconds) at)) (max-age-of s)))))
|
|
52
52
|
(set! (-> b length) 0)
|
|
53
53
|
(set! ok (and ok (base64url-decode! (& b) (slice value 0 first))))
|
|
54
|
-
(when ok
|
|
55
|
-
(let ([p (cast (ptr u8) (arena-alloc (& (-> r arena)) (-> b length)))])
|
|
56
|
-
(memcpy p (-> b bytes) (-> b length))
|
|
57
|
-
(set! (@ into) (slice p (-> b length)))))
|
|
54
|
+
(when ok (set! (@ into) (copy (& (-> r arena)) (buffer-bytes (& b)))))
|
|
58
55
|
(buffer-free! (& b))
|
|
59
56
|
ok))
|
|
60
57
|
|
package/std/http/sse-client.sub
CHANGED
|
@@ -11,16 +11,11 @@
|
|
|
11
11
|
(require-unqualified "http.sub")
|
|
12
12
|
|
|
13
13
|
(provide sse-event sse-parser sse-parser-init! sse-parse! sse-parser-end! sse-parser-free! sse-client
|
|
14
|
-
sse-client-open! sse-client-close! sse-ended sse-lost sse-refused)
|
|
14
|
+
sse-client-open! sse-client-close! sse-end sse-ended sse-lost sse-refused)
|
|
15
15
|
|
|
16
|
-
(
|
|
17
|
-
(const sse-lost i32 1)
|
|
18
|
-
(const sse-refused i32 2)
|
|
16
|
+
(enum sse-end sse-ended sse-lost sse-refused)
|
|
19
17
|
|
|
20
|
-
(
|
|
21
|
-
(const state-connecting i32 1)
|
|
22
|
-
(const state-open i32 2)
|
|
23
|
-
(const state-waiting i32 3)
|
|
18
|
+
(enum client-state state-closed state-connecting state-open state-waiting)
|
|
24
19
|
|
|
25
20
|
(const default-retry f64 3000.0)
|
|
26
21
|
|
|
@@ -133,10 +128,10 @@
|
|
|
133
128
|
;; ---- the client ----
|
|
134
129
|
|
|
135
130
|
(struct sse-client [head event-head] [user (ptr void)] [reconnect bool] [retry f64] [status i32] [error i32]
|
|
136
|
-
[method string] [url string] [headers (slice string)] [body (slice u8)] [state
|
|
131
|
+
[method string] [url string] [headers (slice string)] [body (slice u8)] [state client-state] [fetch u32] [timer u32]
|
|
137
132
|
[parser sse-parser] [chunk (array u8 16384)]
|
|
138
133
|
[on-open (fn ((ptr sse-client)))] [on-event (fn ((ptr sse-client) (ptr sse-event)))]
|
|
139
|
-
[on-closed (fn ((ptr sse-client)
|
|
134
|
+
[on-closed (fn ((ptr sse-client) sse-end))])
|
|
140
135
|
|
|
141
136
|
(define (parsed [p (ptr sse-parser)] [e (ptr sse-event)])
|
|
142
137
|
(let ([c (cast (ptr sse-client) (-> p user))])
|
|
@@ -144,7 +139,7 @@
|
|
|
144
139
|
|
|
145
140
|
(define (connect! [c (ptr sse-client)])
|
|
146
141
|
(let* ([n (-> c headers length)] [id (buffer-string (& (-> c parser id)))]
|
|
147
|
-
[all (
|
|
142
|
+
[all (new 0 string (+ n 4))] [k n])
|
|
148
143
|
(for ([i u32 0]) (< i n) (+= i 1) (set! (@ all i) (@ (-> c headers) i)))
|
|
149
144
|
(set! (@ all k) "accept")
|
|
150
145
|
(set! (@ all (+ k 1)) "text/event-stream")
|
|
@@ -154,8 +149,8 @@
|
|
|
154
149
|
(set! (@ all (+ k 1)) id)
|
|
155
150
|
(+= k 2))
|
|
156
151
|
(set! (-> c state) state-connecting)
|
|
157
|
-
(set! (-> c fetch) (fetch-start (-> c method) (-> c url) (slice all k) (-> c body) (cast (ptr void) c)))
|
|
158
|
-
(free all)))
|
|
152
|
+
(set! (-> c fetch) (fetch-start (-> c method) (-> c url) (slice all 0 k) (-> c body) (cast (ptr void) c)))
|
|
153
|
+
(free (-> all items))))
|
|
159
154
|
|
|
160
155
|
(define (stop! [c (ptr sse-client)])
|
|
161
156
|
(unless (== (-> c fetch) 0) (stream-close (-> c fetch)))
|
|
@@ -164,7 +159,7 @@
|
|
|
164
159
|
(set! (-> c timer) 0)
|
|
165
160
|
(set! (-> c state) state-closed))
|
|
166
161
|
|
|
167
|
-
(define (ended! [c (ptr sse-client)] [why
|
|
162
|
+
(define (ended! [c (ptr sse-client)] [why sse-end])
|
|
168
163
|
(stream-close (-> c fetch))
|
|
169
164
|
(set! (-> c fetch) 0)
|
|
170
165
|
(sse-parser-end! (& (-> c parser)))
|
package/std/http/url.sub
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
(for ([i u32 0]) (< i n) (+= i 1)
|
|
27
27
|
(when (or (escape? s i) (and plus (== (@ s i) #\+))) (set! plain #f)))
|
|
28
28
|
(when plain (return s))
|
|
29
|
-
(let ([p (
|
|
29
|
+
(let ([p (new a u8 n)] [i u32 0] [k u32 0])
|
|
30
30
|
(while (< i n)
|
|
31
31
|
(cond [(escape? s i)
|
|
32
32
|
(set! (@ p k) (+ (* 16 (digit-value (@ s (+ i 1)) 16)) (digit-value (@ s (+ i 2)) 16)))
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
(set! (@ p k) (@ s i))
|
|
39
39
|
(+= i 1)])
|
|
40
40
|
(+= k 1))
|
|
41
|
-
(cast string (slice p k)))))
|
|
41
|
+
(cast string (slice p 0 k)))))
|
|
42
42
|
|
|
43
43
|
;; A path's segments after its first slash, decoded into the arena: "/" has none, and a final slash gives an empty last
|
|
44
44
|
;; segment. It returns 1 when a segment is . or .., or empty before the end, and -1 when the path does not start with a
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
(when (or (== n 0) (!= (@ path 0) #\/)) (return -1))
|
|
50
50
|
(when (== n 1) (return 0))
|
|
51
51
|
(for ([i u32 1]) (< i n) (+= i 1) (when (== (@ path i) #\/) (+= count 1)))
|
|
52
|
-
(let ([items (
|
|
52
|
+
(let ([items (new a string count)])
|
|
53
53
|
(for ([i u32 1]) (<= i n) (+= i 1)
|
|
54
54
|
(when (or (== i n) (== (@ path i) #\/))
|
|
55
55
|
(let ([s (url-unescape a (slice path start i) #f)])
|
|
@@ -57,12 +57,12 @@
|
|
|
57
57
|
(set! (@ items k) s)
|
|
58
58
|
(+= k 1)
|
|
59
59
|
(set! start (+ i 1)))))
|
|
60
|
-
(set! (@ to) (slice items k))
|
|
60
|
+
(set! (@ to) (slice items 0 k))
|
|
61
61
|
(if unclean 1 0))))
|
|
62
62
|
|
|
63
63
|
;; The path the segments name, resolved as Go's path.Clean does, keeping a final slash.
|
|
64
64
|
(define (url-add-clean! [b (ptr buffer)] [segments (slice string)])
|
|
65
|
-
(let* ([n (-> segments length)] [kept (
|
|
65
|
+
(let* ([n (-> segments length)] [kept (new 0 u32 (+ n 1))] [k u32 0]
|
|
66
66
|
[last (if (> n 0) (@ segments (- n 1)) "x")] [slash (or (== last "") (== last ".") (== last ".."))])
|
|
67
67
|
(for ([i u32 0]) (< i n) (+= i 1)
|
|
68
68
|
(let ([s (@ segments i)])
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
(buffer-add-byte! b #\/)
|
|
77
77
|
(url-add-segment! b (@ segments (@ kept j))))
|
|
78
78
|
(when (and slash (> k 0)) (buffer-add-byte! b #\/))
|
|
79
|
-
(free kept)))
|
|
79
|
+
(free (-> kept items))))
|
|
80
80
|
|
|
81
81
|
(define hex-digits string "0123456789ABCDEF")
|
|
82
82
|
|
|
@@ -109,17 +109,17 @@
|
|
|
109
109
|
(define (url-form-parse [a (ptr arena)] [s string]) -> (slice url-pair)
|
|
110
110
|
(let ([n (-> s length)] [count u32 1] [k u32 0] [start u32 0])
|
|
111
111
|
(for ([i u32 0]) (< i n) (+= i 1) (when (== (@ s i) #\&) (+= count 1)))
|
|
112
|
-
(let ([pairs (
|
|
112
|
+
(let ([pairs (new a url-pair count)])
|
|
113
113
|
(for ([i u32 0]) (<= i n) (+= i 1)
|
|
114
114
|
(when (or (== i n) (== (@ s i) #\&))
|
|
115
115
|
(when (> i start)
|
|
116
116
|
(let ([part (slice s start i)] [e u32 0])
|
|
117
117
|
(while (and (< e (-> part length)) (!= (@ part e) #\=)) (+= e 1))
|
|
118
|
-
(set! (-> (
|
|
119
|
-
(set! (-> (
|
|
118
|
+
(set! (-> (@ pairs k) name) (url-unescape a (slice part 0 e) #t))
|
|
119
|
+
(set! (-> (@ pairs k) value) (url-unescape a (if (< e (-> part length)) (slice part (+ e 1)) "") #t))
|
|
120
120
|
(+= k 1)))
|
|
121
121
|
(set! start (+ i 1))))
|
|
122
|
-
(slice pairs k))))
|
|
122
|
+
(slice pairs 0 k))))
|
|
123
123
|
|
|
124
124
|
;; The value of the first pair with the name.
|
|
125
125
|
(define (url-form-value [pairs (slice url-pair)] [name string] [to (ptr string)]) -> bool
|
package/std/http/websocket.sub
CHANGED
|
@@ -19,14 +19,11 @@
|
|
|
19
19
|
;; A message beyond this many bytes closes the connection with 1009.
|
|
20
20
|
(const largest u32 16777216)
|
|
21
21
|
|
|
22
|
-
(
|
|
23
|
-
(const state-closing i32 1)
|
|
24
|
-
(const state-finishing i32 2)
|
|
25
|
-
(const state-closed i32 3)
|
|
22
|
+
(enum ws-state state-open state-closing state-finishing state-closed)
|
|
26
23
|
|
|
27
24
|
(struct ws-connection [head event-head] [stream u32] [user (ptr void)] [server (ptr http-server)] [ping f64]
|
|
28
25
|
[hook http-hook] [frames buffer] [message buffer] [out buffer]
|
|
29
|
-
[kind i32] [state
|
|
26
|
+
[kind i32] [state ws-state] [code i32] [reading bool] [full bool] [timer u32] [timer-at f64] [heard f64] [pinged bool]
|
|
30
27
|
[any-origin bool]
|
|
31
28
|
[on-message (fn ((ptr ws-connection) (slice u8) i32))]
|
|
32
29
|
[on-closed (fn ((ptr ws-connection) i32))]
|
package/std/meta/type-info.sub
CHANGED
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
|
|
4
4
|
(provide type-info variable-type type-datum)
|
|
5
5
|
|
|
6
|
-
;; (kind name items parameters), kind struct, union or
|
|
7
|
-
;; (field . type), a variant's (case (field . type) ...). A type is i8 to u64, f32, f64, bool or
|
|
8
|
-
;; (slice type), (array type n), a struct's, union's or
|
|
9
|
-
;; parameters, or (other type). For (identifier type ...), the items have those types
|
|
10
|
-
;; parameters are ().
|
|
6
|
+
;; (kind name items parameters), kind struct, union, variant or enum, or 0 when t names none. A struct's or union's items
|
|
7
|
+
;; are (field . type), a variant's (case (field . type) ...) and an enum's (case). A type is i8 to u64, f32, f64, bool or
|
|
8
|
+
;; string, (ptr type), (slice type), (array type n), a struct's, union's, variant's or enum's identifier,
|
|
9
|
+
;; (identifier type ...) for one with parameters, or (other type). For (identifier type ...), the items have those types
|
|
10
|
+
;; in place of the parameters, and the parameters are ().
|
|
11
11
|
(define (type-info [t datum]) -> datum
|
|
12
12
|
(let ([instance (pair? t)])
|
|
13
13
|
(syntax-match (binding-of (if instance (car t) t))
|
|
14
|
-
[('substrate-struct name (item ...) kind (p ...))
|
|
14
|
+
[('substrate-struct name (item ...) kind (p ...) . _)
|
|
15
15
|
(let ([k (syntax-e kind)] [env (if instance (for/list ([q p] [a (cdr t)]) (cons (syntax-e q) a)) nil)])
|
|
16
|
-
`(,k ,name ,(for/list ([i item]) (if (
|
|
16
|
+
`(,k ,name ,(for/list ([i item]) (if (!= (memq k '(variant enum)) 0) (case-info i env) (field-info i env)))
|
|
17
17
|
,(if instance nil p)))]
|
|
18
18
|
[('substrate-typedef u)
|
|
19
19
|
(let ([d (parsed-type (syntax->datum u))])
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
(cond [(!= (memq (syntax-e x) scalars) 0) (syntax-e x)]
|
|
38
38
|
[(!= (assq (syntax-e x) env) 0) (cdr (assq (syntax-e x) env))]
|
|
39
39
|
[else (syntax-match (binding-of x)
|
|
40
|
-
[('substrate-struct _ _ _ ()) x]
|
|
40
|
+
[('substrate-struct _ _ _ () . _) x]
|
|
41
41
|
[('substrate-typedef u) (parsed-type (syntax->datum u))]
|
|
42
42
|
[_ `(other ,t)])])]
|
|
43
43
|
[('ptr u) `(ptr ,(type-of u env))]
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
[('quote u) (parsed-type (syntax->datum u))]
|
|
47
47
|
[((? identifier? h) a ...)
|
|
48
48
|
(syntax-match (binding-of h)
|
|
49
|
-
[('substrate-struct _ _ _ (p ...))
|
|
49
|
+
[('substrate-struct _ _ _ (p ...) . _)
|
|
50
50
|
(if (and (pair? p) (== (length p) (length a))) `(,h ,@(for/list ([u a]) (type-of u env))) `(other ,t))]
|
|
51
51
|
[_ `(other ,t)])]
|
|
52
52
|
[_ `(other ,t)]))
|
|
@@ -62,6 +62,6 @@
|
|
|
62
62
|
(cond [(and (symbol? d) (!= (memq d scalars) 0)) d]
|
|
63
63
|
[(and (pair? d) (!= (memq (car d) '(ptr slice)) 0)) `(,(car d) ,(parsed-type (cadr d)))]
|
|
64
64
|
[(and (pair? d) (== (car d) 'array)) `(array ,(parsed-type (cadr d)) ,(caddr d))]
|
|
65
|
-
[(and (pair? d) (
|
|
65
|
+
[(and (pair? d) (memq (car d) '(struct enum)) (null? (cdddr d))) (name-identifier (cadr d))]
|
|
66
66
|
[(and (pair? d) (== (car d) 'struct)) `(,(name-identifier (cadr d)) ,@(for/list ([a (cadddr d)]) (parsed-type a)))]
|
|
67
67
|
[else `(other ,d)]))
|
package/std/package/hash.sub
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
(define (hash! [a (ptr arena)] [given string] [w (ptr waiting)] [into (ptr buffer)] [err (ptr buffer)]) -> bool
|
|
22
22
|
(let ([dir string] [why string] [o w] [m manifest] [paths (make-buffer)] [lines (make-buffer)] [digest (array u8 32)]
|
|
23
|
-
[ok #t] [me (
|
|
23
|
+
[ok #t] [me (new a waiting)])
|
|
24
24
|
(when (< (fs-real-path given (& dir) (& why)) 0) (return (cannot! err why)))
|
|
25
25
|
(while (and (!= o 0) (!= (-> o dir) dir)) (set! o (-> o next)))
|
|
26
26
|
(when (!= o 0)
|
package/std/package/manifest.sub
CHANGED
|
@@ -59,8 +59,7 @@
|
|
|
59
59
|
(let ([d dir] [info fs-info] [found ""])
|
|
60
60
|
(while (> (-> d length) 0)
|
|
61
61
|
(when (and (== (fs-stat (joined-path d "package.sub") (& info) 0) 0) (== (-> info kind) fs-file))
|
|
62
|
-
(set! found (
|
|
63
|
-
(memcpy (-> found bytes) (-> d bytes) (-> d length))
|
|
62
|
+
(set! found (copy a d))
|
|
64
63
|
(break))
|
|
65
64
|
(set! d (if (root-path? d) "" (parent-of d))))
|
|
66
65
|
found))
|
|
@@ -190,7 +189,7 @@
|
|
|
190
189
|
(if versioned #t (failed-at! err file f "the package has no (version \"major.minor.patch\")"))))
|
|
191
190
|
|
|
192
191
|
(define (exports-of [file string] [c (ptr data)] [a (ptr arena)] [m (ptr manifest)] [err (ptr buffer)]) -> bool
|
|
193
|
-
(let* ([items (items-of c)] [n (- (-> items length) 1)] [es (
|
|
192
|
+
(let* ([items (items-of c)] [n (- (-> items length) 1)] [es (new a string n)])
|
|
194
193
|
(for ([i u32 0]) (< i n) (+= i 1)
|
|
195
194
|
(let ([d (& (@ items (+ i 1)))])
|
|
196
195
|
(set! (@ es i) (symbol-of d))
|
|
@@ -198,11 +197,11 @@
|
|
|
198
197
|
(return (failed-at! err file d "an export is the name of a module in the package, as text or lib/value")))
|
|
199
198
|
(for ([k u32 0]) (< k i) (+= k 1)
|
|
200
199
|
(when (== (@ es k) (@ es i)) (return (failed-at! err file d "this export is given twice"))))))
|
|
201
|
-
(set! (-> m exports)
|
|
200
|
+
(set! (-> m exports) es)
|
|
202
201
|
#t))
|
|
203
202
|
|
|
204
203
|
(define (tests-of [file string] [c (ptr data)] [a (ptr arena)] [m (ptr manifest)] [err (ptr buffer)]) -> bool
|
|
205
|
-
(let* ([items (items-of c)] [n u32 0] [ts (
|
|
204
|
+
(let* ([items (items-of c)] [n u32 0] [ts (new a string (-> items length))])
|
|
206
205
|
(for ([i u32 1]) (< i (-> items length)) (+= i 1)
|
|
207
206
|
(let ([d (& (@ items i))])
|
|
208
207
|
(cond [(and (list-of? d "browser" 1) (not (-> m test-browser))) (set! (-> m test-browser) #t)]
|
|
@@ -210,15 +209,15 @@
|
|
|
210
209
|
[else
|
|
211
210
|
(return (failed-at! err file d
|
|
212
211
|
"a test module is a path in the package, with * for any text, as \"tests/*.sub\", and (browser) comes at most once"))])))
|
|
213
|
-
(when (> n 0) (set! (-> m tests) (slice ts n)))
|
|
212
|
+
(when (> n 0) (set! (-> m tests) (slice ts 0 n)))
|
|
214
213
|
#t))
|
|
215
214
|
|
|
216
215
|
(define (sites-of [file string] [c (ptr data)] [a (ptr arena)] [m (ptr manifest)] [err (ptr buffer)]) -> bool
|
|
217
216
|
(let* ([items (items-of c)] [n (- (-> items length) 1)]
|
|
218
|
-
[ss (
|
|
217
|
+
[ss (new a declared-site n)])
|
|
219
218
|
(for ([i u32 0]) (< i n) (+= i 1)
|
|
220
|
-
(let* ([d (& (@ items (+ i 1)))] [parts (items-of d)] [s (& (@ ss i))]
|
|
221
|
-
[
|
|
219
|
+
(let* ([d (& (@ items (+ i 1)))] [parts (items-of d)] [s (& (@ ss i))] [groups (new a site-files (-> parts length))]
|
|
220
|
+
[g u32 0])
|
|
222
221
|
(set! (-> s html) "")
|
|
223
222
|
(match d [(data-list p line column) (set! (-> s line) line) (set! (-> s column) column)] [_ (begin)])
|
|
224
223
|
(unless (and (>= (-> parts length) 2) (package-name? (symbol-of (& (@ parts 0))))
|
|
@@ -236,12 +235,12 @@
|
|
|
236
235
|
(unless (files-of file p a (& (@ groups g)) err) (return #f))
|
|
237
236
|
(+= g 1)]
|
|
238
237
|
[else (return (failed-at! err file p site-form))])))
|
|
239
|
-
(set! (-> s files) (slice groups g))))
|
|
240
|
-
(set! (-> m sites)
|
|
238
|
+
(set! (-> s files) (slice groups 0 g))))
|
|
239
|
+
(set! (-> m sites) ss)
|
|
241
240
|
#t))
|
|
242
241
|
|
|
243
242
|
(define (files-of [file string] [c (ptr data)] [a (ptr arena)] [f (ptr site-files)] [err (ptr buffer)]) -> bool
|
|
244
|
-
(let* ([items (items-of c)] [k u32 2] [n u32 0] [ps (
|
|
243
|
+
(let* ([items (items-of c)] [k u32 2] [n u32 0] [ps (new a string (-> items length))])
|
|
245
244
|
(set! (-> f from) "")
|
|
246
245
|
(unless (and (>= (-> items length) 3) (string-of (& (@ items 1)) (& (-> f dir))) (starts? (-> f dir) "/"))
|
|
247
246
|
(return (failed-at! err file c files-form)))
|
|
@@ -253,7 +252,7 @@
|
|
|
253
252
|
(return (failed-at! err file (& (@ items i)) files-form)))
|
|
254
253
|
(+= n 1))
|
|
255
254
|
(when (== n 0) (return (failed-at! err file c files-form)))
|
|
256
|
-
(set! (-> f patterns) (slice ps n))
|
|
255
|
+
(set! (-> f patterns) (slice ps 0 n))
|
|
257
256
|
#t))
|
|
258
257
|
|
|
259
258
|
(define site-form string
|
|
@@ -272,7 +271,7 @@
|
|
|
272
271
|
|
|
273
272
|
(define (dependencies-of [file string] [c (ptr data)] [a (ptr arena)] [m (ptr manifest)] [err (ptr buffer)]) -> bool
|
|
274
273
|
(let* ([items (items-of c)] [n (- (-> items length) 1)]
|
|
275
|
-
[ds (
|
|
274
|
+
[ds (new a dependency n)])
|
|
276
275
|
(for ([i u32 0]) (< i n) (+= i 1)
|
|
277
276
|
(let* ([d (& (@ items (+ i 1)))] [parts (items-of d)] [dep (& (@ ds i))])
|
|
278
277
|
(set! (-> dep path) "")
|
|
@@ -302,7 +301,7 @@
|
|
|
302
301
|
(return (failed-at! err file d "a dependency's url starts with http:// or https://")))
|
|
303
302
|
(when (and (> (-> dep url length) 0) (not (full-hash? (-> dep hash))))
|
|
304
303
|
(return (failed-at! err file d "a url's hash is sha256: and 64 hex digits, as substrate hash prints it")))))
|
|
305
|
-
(set! (-> m dependencies)
|
|
304
|
+
(set! (-> m dependencies) ds)
|
|
306
305
|
#t))
|
|
307
306
|
|
|
308
307
|
(define dependency-form string
|
package/std/package/map.sub
CHANGED
|
@@ -58,15 +58,12 @@
|
|
|
58
58
|
(define (visit! [a (ptr arena)] [dir string] [file string] [m (ptr manifest)] [store string] [g (ptr graph)]
|
|
59
59
|
[err (ptr buffer)]) -> (ptr reached)
|
|
60
60
|
(let* ([deps (-> m dependencies)] [n (-> deps length)]
|
|
61
|
-
[dirs (
|
|
62
|
-
[ms (cast (ptr manifest) (arena-alloc a (* n (sizeof manifest))))]
|
|
63
|
-
[me (cast (ptr reached) (arena-alloc a (sizeof reached)))] [other (ptr reached) 0])
|
|
61
|
+
[dirs (new a string n)] [ms (new a manifest n)] [me (new a reached)] [other (ptr reached) 0])
|
|
64
62
|
(set! (-> me m) m)
|
|
65
63
|
(set! (-> me r dir) dir)
|
|
66
64
|
(set! (-> me r file) file)
|
|
67
65
|
(set! (-> me r substrate) (-> m substrate))
|
|
68
|
-
(set! (-> me
|
|
69
|
-
(set! (-> me deps) (cast (ptr (ptr reached)) (arena-alloc a (* n (sizeof (ptr reached))))))
|
|
66
|
+
(set! (-> me deps) (-> (new a (ptr reached) n) items))
|
|
70
67
|
(set! (-> me hash) "")
|
|
71
68
|
(set! (-> me open) #t)
|
|
72
69
|
(set! (-> me next) 0)
|
|
@@ -207,13 +204,12 @@
|
|
|
207
204
|
ok))
|
|
208
205
|
|
|
209
206
|
(define (under [a (ptr arena)] [dir string] [b (ptr buffer)]) -> (slice string)
|
|
210
|
-
(let* ([n (/ (-> b length) (sizeof string))] [ps (cast (ptr string) (-> b bytes))]
|
|
211
|
-
[out (cast (ptr string) (arena-alloc a (* n (sizeof string))))])
|
|
207
|
+
(let* ([n (/ (-> b length) (sizeof string))] [ps (cast (ptr string) (-> b bytes))] [out (new a string n)])
|
|
212
208
|
(for ([i u32 0]) (< i n) (+= i 1)
|
|
213
209
|
(let ([full (joined-path dir (@ ps i))])
|
|
214
210
|
(set! (@ out i) (normal-path a full))
|
|
215
211
|
(free (-> full bytes))))
|
|
216
|
-
|
|
212
|
+
out))
|
|
217
213
|
|
|
218
214
|
(define (rules! [b (ptr buffer)] [r (ptr package-root)])
|
|
219
215
|
(if (> (-> r file length) 0)
|
package/std/package/path.sub
CHANGED
|
@@ -21,10 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
(define (root-path? [p string]) -> bool (path-same? (path-windows?) (path-parent (path-windows?) p) p))
|
|
23
23
|
|
|
24
|
-
(define (kept [a (ptr arena)] [s string]) -> string
|
|
25
|
-
(let ([out (cast string (slice (cast (ptr u8) (arena-alloc a (-> s length))) (-> s length)))])
|
|
26
|
-
(memcpy (-> out bytes) (-> s bytes) (-> s length))
|
|
27
|
-
out))
|
|
24
|
+
(define (kept [a (ptr arena)] [s string]) -> string (copy a s))
|
|
28
25
|
|
|
29
26
|
(define (within? [p string] [dir string]) -> bool (path-within? (path-windows?) p dir))
|
|
30
27
|
|
package/std/package/read.sub
CHANGED
|
@@ -48,10 +48,7 @@
|
|
|
48
48
|
(while (and (more? (& r)) (not (delimiter? (here (& r))))) (advance! (& r)))
|
|
49
49
|
(slice text start (-> r at))))
|
|
50
50
|
|
|
51
|
-
(define (copied [a (ptr arena)] [b (slice u8)]) -> (ptr u8)
|
|
52
|
-
(let ([p (cast (ptr u8) (arena-alloc a (-> b length)))])
|
|
53
|
-
(memcpy p (-> b items) (-> b length))
|
|
54
|
-
p))
|
|
51
|
+
(define (copied [a (ptr arena)] [b (slice u8)]) -> (ptr u8) (-> (copy a b) items))
|
|
55
52
|
|
|
56
53
|
(define (here [r (ptr data-reader)]) -> u32 (@ (-> r text) (-> r at)))
|
|
57
54
|
|
|
@@ -110,9 +107,7 @@
|
|
|
110
107
|
[else
|
|
111
108
|
(let ([start (-> r at)])
|
|
112
109
|
(while (and (more? r) (not (delimiter? (here r)))) (advance! r))
|
|
113
|
-
(set! (@ into) (data-symbol (
|
|
114
|
-
(- (-> r at) start)))
|
|
115
|
-
line column))
|
|
110
|
+
(set! (@ into) (data-symbol (copy (-> r arena) (slice (-> r text) start (-> r at))) line column))
|
|
116
111
|
#t)])))
|
|
117
112
|
|
|
118
113
|
(define (read-list! [r (ptr data-reader)] [close u32] [line u32] [column u32] [into (ptr data)]) -> bool
|
|
@@ -162,7 +157,7 @@
|
|
|
162
157
|
(return (failed! r "a string's escapes are \\\", \\\\, \\n, \\t, \\r, \\0, and \\x with hex digits and ;" l k))])
|
|
163
158
|
(advance! r))]
|
|
164
159
|
[else (buffer-add-byte! (& b) (cast i32 c)) (advance! r)]))
|
|
165
|
-
(set! (@ into) (data-string (cast string (
|
|
160
|
+
(set! (@ into) (data-string (cast string (copy (-> r arena) (buffer-bytes (& b)))) line column))
|
|
166
161
|
(buffer-free! (& b))
|
|
167
162
|
#t))
|
|
168
163
|
|
package/std/package/site.sub
CHANGED
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
(buffer-add-string! (& out) b)
|
|
20
20
|
(buffer-string (& out))))
|
|
21
21
|
|
|
22
|
-
(define (kind-of [path string]) ->
|
|
23
|
-
(let ([info fs-info]) (
|
|
22
|
+
(define (kind-of [path string]) -> fs-kind
|
|
23
|
+
(let ([info fs-info]) (fs-stat path (& info) 0) (-> info kind)))
|
|
24
24
|
|
|
25
25
|
(define (made! [path string])
|
|
26
26
|
(let ([why string]) (when (< (fs-make-dir path (& why)) 0) (throw site-failed why))))
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
;; Collects the paths under base that match parts k onward; rel is the part of the path matched so far.
|
|
85
85
|
(define (matched! [base string] [rel string] [parts (slice string)] [k u32] [into (ptr buffer)])
|
|
86
86
|
(let ([here (if (== (-> rel length) 0) base (joined-path base rel))])
|
|
87
|
-
(cond [(== k (-> parts length)) (when (!= (kind-of here)
|
|
87
|
+
(cond [(== k (-> parts length)) (when (!= (kind-of here) fs-none) (kept! into rel))]
|
|
88
88
|
[(== (@ parts k) "**")
|
|
89
89
|
(matched! base rel parts (+ k 1) into)
|
|
90
90
|
(when (== (kind-of here) fs-directory)
|
|
@@ -132,11 +132,11 @@
|
|
|
132
132
|
|
|
133
133
|
(define (site-written! [p (ptr site-plan)] [out string] [toolchain string])
|
|
134
134
|
(let ([list (make-buffer)] [files (make-buffer)] [packed (make-buffer)] [err (make-buffer)] [why string])
|
|
135
|
-
(when (and (!= (kind-of out)
|
|
135
|
+
(when (and (!= (kind-of out) fs-none)
|
|
136
136
|
(or (!= (kind-of out) fs-directory)
|
|
137
137
|
(and (> (-> (names-in out) length) 0) (!= (kind-of (joined-path out ".site")) fs-file))))
|
|
138
138
|
(throw site-failed (joined (joined "site: " out) " is not a site, so it is not replaced")))
|
|
139
|
-
(when (and (!= (kind-of out)
|
|
139
|
+
(when (and (!= (kind-of out) fs-none) (< (fs-remove out #t (& why)) 0)) (throw site-failed why))
|
|
140
140
|
(made! (joined-path out "host/modules"))
|
|
141
141
|
(made! (joined-path out "host/web"))
|
|
142
142
|
(written! (joined-path out ".site") (cast (slice u8) (joined (-> p program) "\n")))
|
package/std/test/compare.sub
CHANGED
|
@@ -23,8 +23,7 @@
|
|
|
23
23
|
(begin
|
|
24
24
|
(for ([i u32 0]) (< i n) (+= i 1) (diff-line! b 1 (@ xs i)))
|
|
25
25
|
(for ([j u32 0]) (< j m) (+= j 1) (diff-line! b 2 (@ ys j))))
|
|
26
|
-
(let ([t (
|
|
27
|
-
[kinds (cast (ptr u8) (malloc (+ n m)))] [texts (cast (ptr string) (malloc (* (+ n m) (sizeof string))))]
|
|
26
|
+
(let ([t (new 0 u32 (* (+ n 1) (+ m 1)))] [w (+ m 1)] [kinds (new 0 u8 (+ n m))] [texts (new 0 string (+ n m))]
|
|
28
27
|
[k u32 0] [i u32 0] [j u32 0] [skipped #f])
|
|
29
28
|
(for ([a u32 n]) (> a 0) (-= a 1)
|
|
30
29
|
(for ([c u32 m]) (> c 0) (-= c 1)
|
|
@@ -55,13 +54,13 @@
|
|
|
55
54
|
(set! skipped #f)
|
|
56
55
|
(diff-line! b (@ kinds p) (@ texts p)))
|
|
57
56
|
(set! skipped #t)))
|
|
58
|
-
(free (
|
|
59
|
-
(free kinds)
|
|
60
|
-
(free (
|
|
61
|
-
(free (
|
|
62
|
-
(free (
|
|
57
|
+
(free (-> t items))
|
|
58
|
+
(free (-> kinds items))
|
|
59
|
+
(free (-> texts items))))
|
|
60
|
+
(free (-> xs items))
|
|
61
|
+
(free (-> ys items))))
|
|
63
62
|
|
|
64
|
-
(define (changed-near? [kinds (
|
|
63
|
+
(define (changed-near? [kinds (slice u8)] [k u32] [p u32]) -> bool
|
|
65
64
|
(for ([q u32 (if (> p 2) (- p 2) 0)]) (and (< q k) (<= q (+ p 2))) (+= q 1)
|
|
66
65
|
(when (!= (@ kinds q) 0) (return #t)))
|
|
67
66
|
#f)
|
|
@@ -75,11 +74,11 @@
|
|
|
75
74
|
(let ([n u32 0] [start u32 0] [k u32 0])
|
|
76
75
|
(for ([i u32 0]) (< i (-> text length)) (+= i 1) (when (== (@ text i) 10) (+= n 1)))
|
|
77
76
|
(when (and (> (-> text length) 0) (!= (@ text (- (-> text length) 1)) 10)) (+= n 1))
|
|
78
|
-
(let ([out (
|
|
77
|
+
(let ([out (new 0 string (+ n 1))])
|
|
79
78
|
(for ([i u32 0]) (<= i (-> text length)) (+= i 1)
|
|
80
79
|
(when (or (== i (-> text length)) (== (@ text i) 10))
|
|
81
80
|
(when (or (< start i) (< i (-> text length)))
|
|
82
81
|
(set! (@ out k) (slice text start i))
|
|
83
82
|
(+= k 1))
|
|
84
83
|
(set! start (+ i 1))))
|
|
85
|
-
(slice out k))))
|
|
84
|
+
(slice out 0 k))))
|
package/std/test/page.sub
CHANGED
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
(let ([why string])
|
|
79
79
|
(unless (devtools-connect (& connection) address heard 0 (& why)) (throw page-failed why))
|
|
80
80
|
(set! connected #t)))
|
|
81
|
-
(let ([b (
|
|
81
|
+
(let ([b (new 0 page)])
|
|
82
82
|
(+= opened 1)
|
|
83
83
|
(set! (-> b site) (kept (absolute dir)))
|
|
84
84
|
(buffer-add-u32! (& pages) (cast u32 b))
|
package/std/test/run.sub
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
g))
|
|
39
39
|
|
|
40
40
|
(define (host-in [dir string] [env (slice string)] [g (ptr grants)] [args (slice string)] [input (slice u8)]) -> ran
|
|
41
|
-
(program-in dir (
|
|
41
|
+
(program-in dir (toolchain-host) env
|
|
42
42
|
(grants-arguments g (@ args 0) (slice args 1 (-> args length))) input))
|
|
43
43
|
|
|
44
44
|
(define (sub-in [dir string] [clauses (slice (slice string))] [env (slice string)] [args (slice string)]
|
package/std/test/session.sub
CHANGED
|
@@ -20,7 +20,6 @@
|
|
|
20
20
|
(define (run-session [file string])
|
|
21
21
|
(let ([map (string->datum (setting "SUBSTRATE_MODULE_MAP"))])
|
|
22
22
|
(set-toolchain-directory! (string->datum (setting "SUBSTRATE_TOOLCHAIN")))
|
|
23
|
-
(install-core!)
|
|
24
23
|
(set-module-map-text! (file-text map) map)
|
|
25
24
|
(set-cache-directory! (string->datum (setting "SUBSTRATE_CACHE")))
|
|
26
25
|
(set-display-directory! (string->datum (parent-of file)))
|