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.
Files changed (152) hide show
  1. package/build/compiler/binary.cdd2ffb408dd@0+0.wasm +0 -0
  2. package/build/compiler/checker.2b0ea87ed311@0+0.wasm +0 -0
  3. package/build/compiler/compile.da85f9bc4478@0+0.wasm +0 -0
  4. package/build/compiler/{core.11abd90bead5@0+0.wasm → core.0410ffbdc488@0+0.wasm} +0 -0
  5. package/build/compiler/expander.80707e1666d6@0+0.wasm +0 -0
  6. package/build/compiler/{fs.3f7cf768e7ed@0+0.wasm → fs.5017b627cbd2@0+0.wasm} +0 -0
  7. package/build/compiler/{leb128.0d2a247f239f@0+0.wasm → leb128.ba77430f659f@0+0.wasm} +0 -0
  8. package/build/compiler/{link.3c4158bb6ba3@0+0.wasm → link.be6e641afa93@0+0.wasm} +0 -0
  9. package/build/compiler/{macros.6f0e1a78d640@0+0.wasm → macros.b695763c0ca3@0+0.wasm} +0 -0
  10. package/build/compiler/main.cbbdf42e34c2@0+0.wasm +0 -0
  11. package/build/compiler/{ops.a5b9269c5240@0+0.wasm → ops.324f0a665fab@0+0.wasm} +0 -0
  12. package/build/compiler/{path.ec5532669c81@0+0.wasm → path.1b5fd988b6f3@0+0.wasm} +0 -0
  13. package/build/compiler/program +21 -20
  14. package/build/compiler/prune.29dde307bdee@0+0.wasm +0 -0
  15. package/build/compiler/{reader.f4378a1f91d1@0+0.wasm → reader.d256e69e09e2@0+0.wasm} +0 -0
  16. package/build/compiler/roots.e366210c01d6@0+0.wasm +0 -0
  17. package/build/compiler/{running.7f03ff780e03@0+0.wasm → running.b99787c2d180@0+0.wasm} +0 -0
  18. package/build/compiler/serialize.a12536bbbe9a@0+0.wasm +0 -0
  19. package/build/compiler/sha256.f6c742932dde@0+0.wasm +0 -0
  20. package/build/compiler/substrate.728c690187f2@0+0.wasm +0 -0
  21. package/build/compiler/syntax.fadc832db29f@0+0.wasm +0 -0
  22. package/build/compiler/{writer.b698107b491f@0+0.wasm → writer.550227768eb9@0+0.wasm} +0 -0
  23. package/build/sub/{base64.fc39f9b2a664@0+0.wasm → base64.454b045156d2@0+0.wasm} +0 -0
  24. package/build/sub/build.115aeefc15e8@0+0.wasm +0 -0
  25. package/build/sub/{chromium.0cdcaad35704@0+0.wasm → chromium.fc0bfea0fbe6@0+0.wasm} +0 -0
  26. package/build/sub/{common.9ea008df47e6@0+0.wasm → common.997c21b0b8cf@0+0.wasm} +0 -0
  27. package/build/sub/deflate.3138a38325a1@0+0.wasm +0 -0
  28. package/build/sub/{doc.e0af22e9d586@0+0.wasm → doc.e3f9a998cd91@0+0.wasm} +0 -0
  29. package/build/sub/{doc.49b234ac4521@0+0.wasm → doc.f18ad14060e9@0+0.wasm} +0 -0
  30. package/build/sub/env.861d55fff974@0+0.wasm +0 -0
  31. package/build/sub/events.2c981f6f1ec7@0+0.wasm +0 -0
  32. package/build/sub/{fetch.59ad8bf17eeb@0+0.wasm → fetch.b0ce8f8b3da8@0+0.wasm} +0 -0
  33. package/build/sub/fetch.d62aa5fc9623@0+0.wasm +0 -0
  34. package/build/sub/{files.25d3fe28ff57@0+0.wasm → files.1706cc0941c0@0+0.wasm} +0 -0
  35. package/build/sub/{fs.3f7cf768e7ed@0+0.wasm → fs.5017b627cbd2@0+0.wasm} +0 -0
  36. package/build/sub/{git.c47e41fed371@0+0.wasm → git.1c5791236e35@0+0.wasm} +0 -0
  37. package/build/sub/{grants.e7dc20c93375@0+0.wasm → grants.cd99dff2854e@0+0.wasm} +0 -0
  38. package/build/sub/{gzip.0bacbb40f6e2@0+0.wasm → gzip.9ebea150f218@0+0.wasm} +0 -0
  39. package/build/sub/hash.ba8330dad9ff@0+0.wasm +0 -0
  40. package/build/sub/{html.1ab670c5f861@0+0.wasm → html.0b0362932a75@0+0.wasm} +0 -0
  41. package/build/sub/{html.a860b2ff2c4e@0+0.wasm → html.3b3c8d7d9971@0+0.wasm} +0 -0
  42. package/build/sub/{inflate.16c735654147@0+0.wasm → inflate.3cfa17586072@0+0.wasm} +0 -0
  43. package/build/sub/{json.74966c67a96d@0+0.wasm → json.af2e0ae20084@0+0.wasm} +0 -0
  44. package/build/sub/manifest.6e014ac19e5d@0+0.wasm +0 -0
  45. package/build/sub/map.e582eae03ec2@0+0.wasm +0 -0
  46. package/build/sub/{pack.a62f186e997c@0+0.wasm → pack.4295e4f5bdbd@0+0.wasm} +0 -0
  47. package/build/sub/{path.ec5532669c81@0+0.wasm → path.1b5fd988b6f3@0+0.wasm} +0 -0
  48. package/build/sub/path.de22f6659534@0+0.wasm +0 -0
  49. package/build/sub/process.ca10ac0b8a62@0+0.wasm +0 -0
  50. package/build/sub/program +48 -48
  51. package/build/sub/read.279fafcda508@0+0.wasm +0 -0
  52. package/build/sub/{reader.f4378a1f91d1@0+0.wasm → reader.d256e69e09e2@0+0.wasm} +0 -0
  53. package/build/sub/{root.5a3e4a594d25@0+0.wasm → root.02141d04d568@0+0.wasm} +0 -0
  54. package/build/sub/roots.e366210c01d6@0+0.wasm +0 -0
  55. package/build/sub/{sha256.92185201fb4b@0+0.wasm → sha256.f6c742932dde@0+0.wasm} +0 -0
  56. package/build/sub/{sha512.bf0d4c469a96@0+0.wasm → sha512.9fee24e95460@0+0.wasm} +0 -0
  57. package/build/sub/site.76aa8286c257@0+0.wasm +0 -0
  58. package/build/sub/{site.81b7f3938874@0+0.wasm → site.e6e415bc3170@0+0.wasm} +0 -0
  59. package/build/sub/{store.128b4d772823@0+0.wasm → store.c48db3345968@0+0.wasm} +0 -0
  60. package/build/sub/{stream.d95d09173ea2@0+0.wasm → stream.27fd2fe858e1@0+0.wasm} +0 -0
  61. package/build/sub/{sub.84126bd636af@0+0.wasm → sub.c0fb7310de12@0+0.wasm} +0 -0
  62. package/build/sub/{substrate.b31300129ffb@0+0.wasm → substrate.728c690187f2@0+0.wasm} +0 -0
  63. package/build/sub/{syntax.500cf1bcecd4@0+0.wasm → syntax.fadc832db29f@0+0.wasm} +0 -0
  64. package/build/sub/tar.692c0e8827cd@0+0.wasm +0 -0
  65. package/build/sub/{test.eed7cfa3264c@0+0.wasm → test.1fd2ff8123bf@0+0.wasm} +0 -0
  66. package/build/sub/{text.ca2b0668e319@0+0.wasm → text.8ff142d72fd7@0+0.wasm} +0 -0
  67. package/build/sub/{timer.21d74714d40b@0+0.wasm → timer.d3454726b3bf@0+0.wasm} +0 -0
  68. package/build/sub/{upgrade.61c36d2a50cf@0+0.wasm → upgrade.2a9219e6a45d@0+0.wasm} +0 -0
  69. package/build/sub/{utf8.b61525c6fb12@0+0.wasm → utf8.e82afeb9e953@0+0.wasm} +0 -0
  70. package/build/sub/worker.ea1e11f8f5e2@0+0.wasm +0 -0
  71. package/build/sub/writer.550227768eb9@0+0.wasm +0 -0
  72. package/package.json +1 -1
  73. package/std/archive/tar.sub +14 -21
  74. package/std/compress/deflate.sub +10 -12
  75. package/std/crypto/sha256.sub +3 -109
  76. package/std/encoding/json.sub +44 -65
  77. package/std/encoding/wire.sub +6 -8
  78. package/std/http/checks.sub +3 -3
  79. package/std/http/conditional.sub +2 -4
  80. package/std/http/cookie.sub +5 -7
  81. package/std/http/form.sub +7 -10
  82. package/std/http/http.sub +17 -24
  83. package/std/http/multipart.sub +5 -5
  84. package/std/http/route.sub +9 -9
  85. package/std/http/server.sub +7 -12
  86. package/std/http/session.sub +1 -4
  87. package/std/http/sse-client.sub +9 -14
  88. package/std/http/url.sub +10 -10
  89. package/std/http/websocket.sub +2 -5
  90. package/std/meta/type-info.sub +10 -10
  91. package/std/package/hash.sub +1 -1
  92. package/std/package/manifest.sub +14 -15
  93. package/std/package/map.sub +4 -8
  94. package/std/package/path.sub +1 -4
  95. package/std/package/read.sub +3 -8
  96. package/std/package/site.sub +5 -5
  97. package/std/test/compare.sub +9 -10
  98. package/std/test/page.sub +1 -1
  99. package/std/test/run.sub +1 -1
  100. package/std/test/session.sub +0 -1
  101. package/std/test/test.sub +24 -17
  102. package/substrate/VERSION +1 -1
  103. package/substrate/compiler/binary.sub +5 -14
  104. package/substrate/compiler/checker.sub +204 -19
  105. package/substrate/compiler/compile.sub +8 -8
  106. package/substrate/compiler/expander.sub +208 -84
  107. package/substrate/compiler/link.sub +2 -2
  108. package/substrate/compiler/main.sub +15 -2
  109. package/substrate/compiler/ops.sub +1 -1
  110. package/substrate/compiler/prune.sub +12 -17
  111. package/substrate/compiler/roots.sub +93 -26
  112. package/substrate/compiler/serialize.sub +1 -1
  113. package/substrate/compiler/sha256.sub +110 -0
  114. package/substrate/compiler/substrate.sub +14 -14
  115. package/substrate/compiler/syntax.sub +8 -21
  116. package/substrate/host/fs.sub +8 -11
  117. package/substrate/host/grants.sub +25 -26
  118. package/substrate/host/node/process.sub +5 -6
  119. package/substrate/host/node/worker-thread.mjs +1 -1
  120. package/substrate/host/node/worker.mjs +1 -0
  121. package/substrate/host/subhost-core.mjs +10 -3
  122. package/substrate/host/subhost.mjs +13 -1
  123. package/substrate/host/web/subhost-web.mjs +13 -2
  124. package/substrate/host/web/worker-script.mjs +1 -0
  125. package/substrate/host/web/worker.mjs +1 -0
  126. package/substrate/host/worker.mjs +3 -1
  127. package/build/compiler/binary.5d81a93450b2@0+0.wasm +0 -0
  128. package/build/compiler/checker.343075746d8c@0+0.wasm +0 -0
  129. package/build/compiler/compile.2db0f824839f@0+0.wasm +0 -0
  130. package/build/compiler/expander.c0f36d0bd5fc@0+0.wasm +0 -0
  131. package/build/compiler/main.cf521803fc5e@0+0.wasm +0 -0
  132. package/build/compiler/prune.f800615ca8cc@0+0.wasm +0 -0
  133. package/build/compiler/roots.02808ca2c6a7@0+0.wasm +0 -0
  134. package/build/compiler/serialize.f4354af92feb@0+0.wasm +0 -0
  135. package/build/compiler/substrate.b31300129ffb@0+0.wasm +0 -0
  136. package/build/compiler/syntax.500cf1bcecd4@0+0.wasm +0 -0
  137. package/build/sub/build.3a016536f5a5@0+0.wasm +0 -0
  138. package/build/sub/deflate.67457f2269ae@0+0.wasm +0 -0
  139. package/build/sub/env.d4a2d3ca5408@0+0.wasm +0 -0
  140. package/build/sub/events.ee8945a7ea00@0+0.wasm +0 -0
  141. package/build/sub/fetch.22f5c88f8a7b@0+0.wasm +0 -0
  142. package/build/sub/hash.75dc86b3dd19@0+0.wasm +0 -0
  143. package/build/sub/manifest.0c0fe02b1e58@0+0.wasm +0 -0
  144. package/build/sub/map.b767b94ffe7f@0+0.wasm +0 -0
  145. package/build/sub/path.b98f74b36b19@0+0.wasm +0 -0
  146. package/build/sub/process.94378bb2ecf2@0+0.wasm +0 -0
  147. package/build/sub/read.4b71de2f3337@0+0.wasm +0 -0
  148. package/build/sub/roots.02808ca2c6a7@0+0.wasm +0 -0
  149. package/build/sub/site.b678ce0b53b9@0+0.wasm +0 -0
  150. package/build/sub/tar.9c01735ea170@0+0.wasm +0 -0
  151. package/build/sub/worker.5ced1d8ab0d4@0+0.wasm +0 -0
  152. package/build/sub/writer.b698107b491f@0+0.wasm +0 -0
@@ -1,20 +1,21 @@
1
- substrate.b31300129ffb@0+0
2
- writer.b698107b491f@0+0
3
- syntax.500cf1bcecd4@0+0
4
- path.ec5532669c81@0+0
5
- fs.3f7cf768e7ed@0+0
6
- reader.f4378a1f91d1@0+0
7
- roots.02808ca2c6a7@0+0
8
- running.7f03ff780e03@0+0
9
- core.11abd90bead5@0+0
10
- ops.a5b9269c5240@0+0
11
- checker.343075746d8c@0+0
12
- leb128.0d2a247f239f@0+0
13
- binary.5d81a93450b2@0+0
14
- serialize.f4354af92feb@0+0
15
- compile.2db0f824839f@0+0
16
- link.3c4158bb6ba3@0+0
17
- macros.6f0e1a78d640@0+0
18
- expander.c0f36d0bd5fc@0+0
19
- prune.f800615ca8cc@0+0
20
- main.cf521803fc5e@0+0
1
+ substrate.728c690187f2@0+0
2
+ writer.550227768eb9@0+0
3
+ syntax.fadc832db29f@0+0
4
+ path.1b5fd988b6f3@0+0
5
+ fs.5017b627cbd2@0+0
6
+ reader.d256e69e09e2@0+0
7
+ roots.e366210c01d6@0+0
8
+ running.b99787c2d180@0+0
9
+ core.0410ffbdc488@0+0
10
+ ops.324f0a665fab@0+0
11
+ checker.2b0ea87ed311@0+0
12
+ leb128.ba77430f659f@0+0
13
+ binary.cdd2ffb408dd@0+0
14
+ serialize.a12536bbbe9a@0+0
15
+ compile.da85f9bc4478@0+0
16
+ sha256.f6c742932dde@0+0
17
+ link.be6e641afa93@0+0
18
+ macros.b695763c0ca3@0+0
19
+ expander.80707e1666d6@0+0
20
+ prune.29dde307bdee@0+0
21
+ main.cbbdf42e34c2@0+0
package/build/sub/program CHANGED
@@ -1,48 +1,48 @@
1
- substrate.b31300129ffb@0+0
2
- process.94378bb2ecf2@0+0
3
- path.ec5532669c81@0+0
4
- path.b98f74b36b19@0+0
5
- fs.3f7cf768e7ed@0+0
6
- common.9ea008df47e6@0+0
7
- grants.e7dc20c93375@0+0
8
- writer.b698107b491f@0+0
9
- syntax.500cf1bcecd4@0+0
10
- reader.f4378a1f91d1@0+0
11
- roots.02808ca2c6a7@0+0
12
- read.4b71de2f3337@0+0
13
- manifest.0c0fe02b1e58@0+0
14
- git.c47e41fed371@0+0
15
- files.25d3fe28ff57@0+0
16
- sha256.92185201fb4b@0+0
17
- hash.75dc86b3dd19@0+0
18
- store.128b4d772823@0+0
19
- map.b767b94ffe7f@0+0
20
- env.d4a2d3ca5408@0+0
21
- events.ee8945a7ea00@0+0
22
- build.3a016536f5a5@0+0
23
- pack.a62f186e997c@0+0
24
- site.81b7f3938874@0+0
25
- site.b678ce0b53b9@0+0
26
- fetch.22f5c88f8a7b@0+0
27
- stream.d95d09173ea2@0+0
28
- worker.5ced1d8ab0d4@0+0
29
- deflate.67457f2269ae@0+0
30
- inflate.16c735654147@0+0
31
- gzip.0bacbb40f6e2@0+0
32
- tar.9c01735ea170@0+0
33
- fetch.59ad8bf17eeb@0+0
34
- doc.49b234ac4521@0+0
35
- html.a860b2ff2c4e@0+0
36
- html.1ab670c5f861@0+0
37
- text.ca2b0668e319@0+0
38
- root.5a3e4a594d25@0+0
39
- doc.e0af22e9d586@0+0
40
- timer.21d74714d40b@0+0
41
- chromium.0cdcaad35704@0+0
42
- test.eed7cfa3264c@0+0
43
- utf8.b61525c6fb12@0+0
44
- json.74966c67a96d@0+0
45
- sha512.bf0d4c469a96@0+0
46
- base64.fc39f9b2a664@0+0
47
- upgrade.61c36d2a50cf@0+0
48
- sub.84126bd636af@0+0
1
+ substrate.728c690187f2@0+0
2
+ process.ca10ac0b8a62@0+0
3
+ path.1b5fd988b6f3@0+0
4
+ path.de22f6659534@0+0
5
+ fs.5017b627cbd2@0+0
6
+ common.997c21b0b8cf@0+0
7
+ grants.cd99dff2854e@0+0
8
+ writer.550227768eb9@0+0
9
+ syntax.fadc832db29f@0+0
10
+ reader.d256e69e09e2@0+0
11
+ roots.e366210c01d6@0+0
12
+ read.279fafcda508@0+0
13
+ manifest.6e014ac19e5d@0+0
14
+ git.1c5791236e35@0+0
15
+ files.1706cc0941c0@0+0
16
+ sha256.f6c742932dde@0+0
17
+ hash.ba8330dad9ff@0+0
18
+ store.c48db3345968@0+0
19
+ map.e582eae03ec2@0+0
20
+ env.861d55fff974@0+0
21
+ events.2c981f6f1ec7@0+0
22
+ build.115aeefc15e8@0+0
23
+ pack.4295e4f5bdbd@0+0
24
+ site.e6e415bc3170@0+0
25
+ site.76aa8286c257@0+0
26
+ fetch.d62aa5fc9623@0+0
27
+ stream.27fd2fe858e1@0+0
28
+ worker.ea1e11f8f5e2@0+0
29
+ deflate.3138a38325a1@0+0
30
+ inflate.3cfa17586072@0+0
31
+ gzip.9ebea150f218@0+0
32
+ tar.692c0e8827cd@0+0
33
+ fetch.b0ce8f8b3da8@0+0
34
+ doc.f18ad14060e9@0+0
35
+ html.3b3c8d7d9971@0+0
36
+ html.0b0362932a75@0+0
37
+ text.8ff142d72fd7@0+0
38
+ root.02141d04d568@0+0
39
+ doc.e3f9a998cd91@0+0
40
+ timer.d3454726b3bf@0+0
41
+ chromium.fc0bfea0fbe6@0+0
42
+ test.1fd2ff8123bf@0+0
43
+ utf8.e82afeb9e953@0+0
44
+ json.af2e0ae20084@0+0
45
+ sha512.9fee24e95460@0+0
46
+ base64.454b045156d2@0+0
47
+ upgrade.2a9219e6a45d@0+0
48
+ sub.c0fb7310de12@0+0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "substrate-lang",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "A Lisp for writing WebAssembly, and the substrate command that builds, runs and tests it",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -2,13 +2,11 @@
2
2
  ;; names. tar-next! gives each entry in turn: a file with its bytes, a directory, or another kind, with its path.
3
3
  (require-unqualified host/fs)
4
4
 
5
- (provide tar-reader tar-entry tar-reader-init! tar-next! tar-file tar-directory tar-other tar-unpack!)
5
+ (provide tar-reader tar-entry tar-reader-init! tar-next! tar-kind tar-file tar-directory tar-other tar-unpack!)
6
6
 
7
- (const tar-file i32 1)
8
- (const tar-directory i32 2)
9
- (const tar-other i32 3)
7
+ (enum tar-kind [tar-file 1] tar-directory tar-other)
10
8
 
11
- (struct tar-entry [kind i32] [path string] [bytes (slice u8)])
9
+ (struct tar-entry [kind tar-kind] [path string] [bytes (slice u8)])
12
10
  (struct tar-reader [data (slice u8)] [at u32])
13
11
 
14
12
  (define (tar-reader-init! [r (ptr tar-reader)] [data (slice u8)])
@@ -36,7 +34,7 @@
36
34
  (cond [(== type #\x)
37
35
  (unless (pax! a body (& long) (& sized) (& given-size)) (return (bad! err "a pax header is not key=value records")))]
38
36
  [(or (== type #\g) (== type #\K)) (begin)]
39
- [(== type #\L) (set! long (copied a (until-zero body)))]
37
+ [(== type #\L) (set! long (cast string (copy a (until-zero body))))]
40
38
  [else
41
39
  (set! (-> e kind) (cond [(or (== type #\0) (== type 0) (== type #\7)) tar-file]
42
40
  [(== type #\5) tar-directory]
@@ -91,11 +89,11 @@
91
89
  (and (> (-> p length) (-> top length)) (== (slice p 0 (-> top length)) top) (== (@ p (-> top length)) #\/)))
92
90
 
93
91
  (define (under [a (ptr arena)] [dir string] [p string]) -> string
94
- (let ([out (cast (ptr u8) (arena-alloc a (+ (-> dir length) 1 (-> p length))))])
95
- (memcpy out (-> dir bytes) (-> dir length))
92
+ (let ([out (new a u8 (+ (-> dir length) 1 (-> p length)))])
93
+ (memcpy (-> out items) (-> dir bytes) (-> dir length))
96
94
  (set! (@ out (-> dir length)) #\/)
97
- (memcpy (+ out (-> dir length) 1) (-> p bytes) (-> p length))
98
- (cast string (slice out (+ (-> dir length) 1 (-> p length))))))
95
+ (memcpy (+ (-> out items) (-> dir length) 1) (-> p bytes) (-> p length))
96
+ (cast string out)))
99
97
 
100
98
  (define (up-to-last-slash [p string]) -> string
101
99
  (let ([i (-> p length)])
@@ -154,7 +152,7 @@
154
152
  (while (and (< eq (- end 1)) (!= (@ body eq) #\=)) (+= eq 1))
155
153
  (when (>= eq (- end 1)) (return #f))
156
154
  (let ([key (cast string (slice body (+ i 1) eq))] [value (cast string (slice body (+ eq 1) (- end 1)))])
157
- (cond [(== key "path") (set! (@ path) (copied a (cast (slice u8) value)))]
155
+ (cond [(== key "path") (set! (@ path) (copy a value))]
158
156
  [(== key "size")
159
157
  (unless (decimal value size) (return #f))
160
158
  (set! (@ sized) #t)]))
@@ -164,19 +162,14 @@
164
162
  (define (header-path [a (ptr arena)] [h (slice u8)]) -> string
165
163
  (let ([name (until-zero (slice h 0 100))] [prefix (until-zero (slice h 345 500))])
166
164
  (if (and (== (cast string (slice h 257 263)) "ustar\x00;") (> (-> prefix length) 0))
167
- (let ([out (cast (ptr u8) (arena-alloc a (+ (-> prefix length) 1 (-> name length))))])
168
- (memcpy out (-> prefix items) (-> prefix length))
165
+ (let ([out (new a u8 (+ (-> prefix length) 1 (-> name length)))])
166
+ (memcpy (-> out items) (-> prefix items) (-> prefix length))
169
167
  (set! (@ out (-> prefix length)) #\/)
170
- (memcpy (+ out (-> prefix length) 1) (-> name items) (-> name length))
171
- (cast string (slice out (+ (-> prefix length) 1 (-> name length)))))
172
- (copied a name))))
168
+ (memcpy (+ (-> out items) (-> prefix length) 1) (-> name items) (-> name length))
169
+ (cast string out))
170
+ (cast string (copy a name)))))
173
171
 
174
172
  (define (until-zero [s (slice u8)]) -> (slice u8)
175
173
  (let ([i u32 0])
176
174
  (while (and (< i (-> s length)) (!= (@ s i) 0)) (+= i 1))
177
175
  (slice s 0 i)))
178
-
179
- (define (copied [a (ptr arena)] [s (slice u8)]) -> string
180
- (let ([out (cast (ptr u8) (arena-alloc a (-> s length)))])
181
- (memcpy out (-> s items) (-> s length))
182
- (cast string (slice out (-> s length)))))
@@ -3,12 +3,10 @@
3
3
  ;; whichever is shortest. deflate! adds in's compressed form to out: deflate-none may hold some back, deflate-sync sends
4
4
  ;; everything and ends at a whole byte, deflate-finish ends the stream. deflater-reset! starts another stream, and
5
5
  ;; deflate-alone! compresses bytes as if nothing came before, ending as a sync, so one deflater serves many streams.
6
- (provide deflater deflater-init! deflater-free! deflater-reset! deflate! deflate-alone! deflate-none deflate-sync
7
- deflate-finish)
6
+ (provide deflater deflater-init! deflater-free! deflater-reset! deflate! deflate-alone! deflate-flush deflate-none
7
+ deflate-sync deflate-finish)
8
8
 
9
- (const deflate-none i32 0)
10
- (const deflate-sync i32 1)
11
- (const deflate-finish i32 2)
9
+ (enum deflate-flush deflate-none deflate-sync deflate-finish)
12
10
 
13
11
  (const wsize u32 32768)
14
12
  (const wmask u32 32767)
@@ -155,10 +153,10 @@
155
153
  (set! (-> d lazy) (@ settings (+ (* l 4) 1)))
156
154
  (set! (-> d nice) (@ settings (+ (* l 4) 2)))
157
155
  (set! (-> d chain) (@ settings (+ (* l 4) 3))))
158
- (set! (-> d window) (cast (ptr u8) (malloc (+ (* 2 wsize) 272))))
159
- (set! (-> d head) (cast (ptr u16) (calloc hash-size 2)))
160
- (set! (-> d prev) (cast (ptr u16) (calloc wsize 2)))
161
- (set! (-> d syms) (cast (ptr u32) (malloc (* (+ most-symbols 1) 4))))
156
+ (set! (-> d window) (malloc (+ (* 2 wsize) 272)))
157
+ (set! (-> d head) (-> (new 0 u16 hash-size) items))
158
+ (set! (-> d prev) (-> (new 0 u16 wsize) items))
159
+ (set! (-> d syms) (malloc (* (+ most-symbols 1) (sizeof u32))))
162
160
  (set! (-> d strstart) 1)
163
161
  (deflater-reset! d))
164
162
 
@@ -432,7 +430,7 @@
432
430
  ;; ---- matching ----
433
431
 
434
432
  ;; greedy! takes a match wherever it finds one, and returns #t when it waits for more of the stream.
435
- (define (greedy! [d (ptr deflater)] [out (ptr buffer)] [in (slice u8)] [at (ptr u32)] [flush i32]) -> bool
433
+ (define (greedy! [d (ptr deflater)] [out (ptr buffer)] [in (slice u8)] [at (ptr u32)] [flush deflate-flush]) -> bool
436
434
  (while #t
437
435
  (when (< (-> d lookahead) min-lookahead)
438
436
  (fill! d in at)
@@ -459,7 +457,7 @@
459
457
  #f)
460
458
 
461
459
  ;; lazy! takes a match only when the next position has none longer.
462
- (define (lazy! [d (ptr deflater)] [out (ptr buffer)] [in (slice u8)] [at (ptr u32)] [flush i32]) -> bool
460
+ (define (lazy! [d (ptr deflater)] [out (ptr buffer)] [in (slice u8)] [at (ptr u32)] [flush deflate-flush]) -> bool
463
461
  (while #t
464
462
  (when (< (-> d lookahead) min-lookahead)
465
463
  (fill! d in at)
@@ -497,7 +495,7 @@
497
495
  (set! (-> d available) #f))
498
496
  #f)
499
497
 
500
- (define (deflate! [d (ptr deflater)] [out (ptr buffer)] [in (slice u8)] [flush i32])
498
+ (define (deflate! [d (ptr deflater)] [out (ptr buffer)] [in (slice u8)] [flush deflate-flush])
501
499
  (let ([at u32 0])
502
500
  (when (if (>= (-> d level) 4) (lazy! d out in (& at) flush) (greedy! d out in (& at) flush)) (return))
503
501
  (cond [(== flush deflate-finish)
@@ -1,110 +1,4 @@
1
- ;; SHA-256 (FIPS 180-4), over bytes added in pieces or given at once.
2
- (provide sha256 sha256-init! sha256-add! sha256-end! sha256-of)
1
+ ;; SHA-256 (FIPS 180-4), over bytes added in pieces or given at once. It is defined in compiler/sha256.sub.
2
+ (require-unqualified sha256 compiler/sha256)
3
3
 
4
- (struct sha256 [state (array u32 8)] [block (array u8 64)] [filled u32] [length u64])
5
-
6
- (define k (array u32 64)
7
- (array-of u32 #x428a2f98 #x71374491 #xb5c0fbcf #xe9b5dba5 #x3956c25b #x59f111f1 #x923f82a4 #xab1c5ed5
8
- #xd807aa98 #x12835b01 #x243185be #x550c7dc3 #x72be5d74 #x80deb1fe #x9bdc06a7 #xc19bf174
9
- #xe49b69c1 #xefbe4786 #x0fc19dc6 #x240ca1cc #x2de92c6f #x4a7484aa #x5cb0a9dc #x76f988da
10
- #x983e5152 #xa831c66d #xb00327c8 #xbf597fc7 #xc6e00bf3 #xd5a79147 #x06ca6351 #x14292967
11
- #x27b70a85 #x2e1b2138 #x4d2c6dfc #x53380d13 #x650a7354 #x766a0abb #x81c2c92e #x92722c85
12
- #xa2bfe8a1 #xa81a664b #xc24b8b70 #xc76c51a3 #xd192e819 #xd6990624 #xf40e3585 #x106aa070
13
- #x19a4c116 #x1e376c08 #x2748774c #x34b0bcb5 #x391c0cb3 #x4ed8aa4a #x5b9cca4f #x682e6ff3
14
- #x748f82ee #x78a5636f #x84c87814 #x8cc70208 #x90befffa #xa4506ceb #xbef9a3f7 #xc67178f2))
15
-
16
- (define (rotr [x u32] [n u32]) #:inline -> u32 (bit-or (>> x n) (<< x (- 32 n))))
17
-
18
- (define (word [p (ptr u8)]) #:inline -> u32
19
- (bit-or (<< (cast u32 (@ p 0)) 24) (<< (cast u32 (@ p 1)) 16) (<< (cast u32 (@ p 2)) 8) (cast u32 (@ p 3))))
20
-
21
- (define (compress! [s (ptr sha256)] [p (ptr u8)])
22
- (let ([w (array u32 64)]
23
- [a (@ (-> s state) 0)] [b (@ (-> s state) 1)] [c (@ (-> s state) 2)] [d (@ (-> s state) 3)]
24
- [e (@ (-> s state) 4)] [f (@ (-> s state) 5)] [g (@ (-> s state) 6)] [hh (@ (-> s state) 7)])
25
- (for ([i u32 0]) (< i 16) (+= i 1) (set! (@ w i) (word (+ p (* i 4)))))
26
- (for ([i u32 16]) (< i 64) (+= i 1)
27
- (let ([x (@ w (- i 15))] [y (@ w (- i 2))])
28
- (set! (@ w i) (+ (@ w (- i 16)) (bit-xor (rotr x 7) (rotr x 18) (>> x 3)) (@ w (- i 7))
29
- (bit-xor (rotr y 17) (rotr y 19) (>> y 10))))))
30
- (for ([i u32 0]) (< i 64) (+= i 1)
31
- (let* ([t1 (+ hh (bit-xor (rotr e 6) (rotr e 11) (rotr e 25)) (bit-xor (bit-and e f) (bit-and (bit-not e) g))
32
- (@ k i) (@ w i))]
33
- [t2 (+ (bit-xor (rotr a 2) (rotr a 13) (rotr a 22)) (bit-xor (bit-and a b) (bit-and a c) (bit-and b c)))])
34
- (set! hh g)
35
- (set! g f)
36
- (set! f e)
37
- (set! e (+ d t1))
38
- (set! d c)
39
- (set! c b)
40
- (set! b a)
41
- (set! a (+ t1 t2))))
42
- (+= (@ (-> s state) 0) a)
43
- (+= (@ (-> s state) 1) b)
44
- (+= (@ (-> s state) 2) c)
45
- (+= (@ (-> s state) 3) d)
46
- (+= (@ (-> s state) 4) e)
47
- (+= (@ (-> s state) 5) f)
48
- (+= (@ (-> s state) 6) g)
49
- (+= (@ (-> s state) 7) hh)))
50
-
51
- (define (sha256-init! [s (ptr sha256)])
52
- (set! (@ (-> s state) 0) #x6a09e667)
53
- (set! (@ (-> s state) 1) #xbb67ae85)
54
- (set! (@ (-> s state) 2) #x3c6ef372)
55
- (set! (@ (-> s state) 3) #xa54ff53a)
56
- (set! (@ (-> s state) 4) #x510e527f)
57
- (set! (@ (-> s state) 5) #x9b05688c)
58
- (set! (@ (-> s state) 6) #x1f83d9ab)
59
- (set! (@ (-> s state) 7) #x5be0cd19)
60
- (set! (-> s filled) 0)
61
- (set! (-> s length) 0))
62
-
63
- (define (sha256-add! [s (ptr sha256)] [b (slice u8)])
64
- (let ([p (-> b items)] [n (-> b length)] [i u32 0])
65
- (+= (-> s length) (cast u64 n))
66
- (when (> (-> s filled) 0)
67
- (while (and (< i n) (< (-> s filled) 64))
68
- (set! (@ (-> s block) (-> s filled)) (@ p i))
69
- (+= (-> s filled) 1)
70
- (+= i 1))
71
- (when (== (-> s filled) 64)
72
- (compress! s (-> s block))
73
- (set! (-> s filled) 0)))
74
- (while (<= (+ i 64) n)
75
- (compress! s (+ p i))
76
- (+= i 64))
77
- (while (< i n)
78
- (set! (@ (-> s block) (-> s filled)) (@ p i))
79
- (+= (-> s filled) 1)
80
- (+= i 1))))
81
-
82
- ;; into takes the 32 bytes of the digest.
83
- (define (sha256-end! [s (ptr sha256)] [into (slice u8)])
84
- (let ([bits (* (-> s length) 8)])
85
- (set! (@ (-> s block) (-> s filled)) 128)
86
- (+= (-> s filled) 1)
87
- (when (> (-> s filled) 56)
88
- (while (< (-> s filled) 64)
89
- (set! (@ (-> s block) (-> s filled)) 0)
90
- (+= (-> s filled) 1))
91
- (compress! s (-> s block))
92
- (set! (-> s filled) 0))
93
- (while (< (-> s filled) 56)
94
- (set! (@ (-> s block) (-> s filled)) 0)
95
- (+= (-> s filled) 1))
96
- (for ([i u32 0]) (< i 8) (+= i 1)
97
- (set! (@ (-> s block) (+ 56 i)) (cast u8 (>> bits (* 8 (- 7 i))))))
98
- (compress! s (-> s block))
99
- (for ([i u32 0]) (< i 8) (+= i 1)
100
- (let ([h (@ (-> s state) i)])
101
- (set! (@ into (* i 4)) (cast u8 (>> h 24)))
102
- (set! (@ into (+ (* i 4) 1)) (cast u8 (>> h 16)))
103
- (set! (@ into (+ (* i 4) 2)) (cast u8 (>> h 8)))
104
- (set! (@ into (+ (* i 4) 3)) (cast u8 h))))))
105
-
106
- (define (sha256-of [b (slice u8)] [into (slice u8)])
107
- (let ([s sha256])
108
- (sha256-init! (& s))
109
- (sha256-add! (& s) b)
110
- (sha256-end! (& s) into)))
4
+ (provide (all-from-out sha256))