substrate-lang 0.9.3 → 0.10.0
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/README.md +1 -1
- package/build/compiler/binary.2d43b43d1600@0+0.wasm +0 -0
- package/build/compiler/checker.4dd4556dd421@0+0.wasm +0 -0
- package/build/compiler/compile.5d8f6407af2a@0+0.wasm +0 -0
- package/build/compiler/{core.fc3dab9d1846@0+0.wasm → core.f2defb75e00b@0+0.wasm} +0 -0
- package/build/compiler/expander.967ce443d379@0+0.wasm +0 -0
- package/build/compiler/fs.01b8aab4a9a8@0+0.wasm +0 -0
- package/build/compiler/{leb128.748b1c37277a@0+0.wasm → leb128.15d814b7b4f2@0+0.wasm} +0 -0
- package/build/compiler/{link.11b643d35670@0+0.wasm → link.b826ea7c8f17@0+0.wasm} +0 -0
- package/build/compiler/{macros.4083601c00db@0+0.wasm → macros.b269e0c42784@0+0.wasm} +0 -0
- package/build/compiler/{main.ed62cce43000@0+0.wasm → main.4fc52f204d54@0+0.wasm} +0 -0
- package/build/compiler/{ops.b361e858d8e1@0+0.wasm → ops.515b5e05f646@0+0.wasm} +0 -0
- package/build/compiler/{path.dcc4712bcc7b@0+0.wasm → path.5a6286472cd4@0+0.wasm} +0 -0
- package/build/compiler/program +21 -21
- package/build/compiler/prune.406215c3e4f8@0+0.wasm +0 -0
- package/build/compiler/reader.694b03770bf0@0+0.wasm +0 -0
- package/build/compiler/roots.cefd10e93684@0+0.wasm +0 -0
- package/build/compiler/{running.d73f7826cb74@0+0.wasm → running.0d25dbaec018@0+0.wasm} +0 -0
- package/build/compiler/serialize.b0d82f3d63d2@0+0.wasm +0 -0
- package/build/compiler/{sha256.5fc9d60f8bb2@0+0.wasm → sha256.a6c32b04d799@0+0.wasm} +0 -0
- package/build/compiler/substrate.5ee5d0b4d3e7@0+0.wasm +0 -0
- package/build/compiler/syntax.32f3e40b61c7@0+0.wasm +0 -0
- package/build/compiler/{writer.806bc85aa684@0+0.wasm → writer.00b7802cbe39@0+0.wasm} +0 -0
- package/build/sub/{base64.8fba03e1be0a@0+0.wasm → base64.a26bdcf60a2d@0+0.wasm} +0 -0
- package/build/sub/build.459c5b9412bd@0+0.wasm +0 -0
- package/build/sub/chromium.3d5818f2707d@0+0.wasm +0 -0
- package/build/sub/common.1edc613607a0@0+0.wasm +0 -0
- package/build/sub/deflate.23f7c4679260@0+0.wasm +0 -0
- package/build/sub/doc.0775df5de6fe@0+0.wasm +0 -0
- package/build/sub/{doc.566f9861828e@0+0.wasm → doc.ef9965d5d402@0+0.wasm} +0 -0
- package/build/sub/env.e5451da6e747@0+0.wasm +0 -0
- package/build/sub/events.bf5473ebf220@0+0.wasm +0 -0
- package/build/sub/fetch.7790d4943758@0+0.wasm +0 -0
- package/build/sub/fetch.96b2d10f025e@0+0.wasm +0 -0
- package/build/sub/files.ad0469fdf6fa@0+0.wasm +0 -0
- package/build/sub/fs.01b8aab4a9a8@0+0.wasm +0 -0
- package/build/sub/git.dc4c0e757ebe@0+0.wasm +0 -0
- package/build/sub/grants.c54776c0d7e3@0+0.wasm +0 -0
- package/build/sub/gzip.16e372eda1cf@0+0.wasm +0 -0
- package/build/sub/hash.660682e4f491@0+0.wasm +0 -0
- package/build/sub/{html.20baa1dc7ca6@0+0.wasm → html.a23126eb949a@0+0.wasm} +0 -0
- package/build/sub/{html.c1671a102b4d@0+0.wasm → html.e9ed37f34977@0+0.wasm} +0 -0
- package/build/sub/{inflate.8899e0933792@0+0.wasm → inflate.59bb61f14001@0+0.wasm} +0 -0
- package/build/sub/json.55590d2f518a@0+0.wasm +0 -0
- package/build/sub/manifest.ef317480deb0@0+0.wasm +0 -0
- package/build/sub/map.f455cca6a42a@0+0.wasm +0 -0
- package/build/sub/pack.e02836264f6a@0+0.wasm +0 -0
- package/build/sub/{path.dcc4712bcc7b@0+0.wasm → path.5a6286472cd4@0+0.wasm} +0 -0
- package/build/sub/path.6891ffea73ca@0+0.wasm +0 -0
- package/build/sub/process.7106571fa723@0+0.wasm +0 -0
- package/build/sub/program +48 -48
- package/build/sub/read.0b93933d62a2@0+0.wasm +0 -0
- package/build/sub/{reader.b535e61f99f4@0+0.wasm → reader.694b03770bf0@0+0.wasm} +0 -0
- package/build/sub/{root.9b713ec588c1@0+0.wasm → root.f10a4906f460@0+0.wasm} +0 -0
- package/build/sub/{roots.6d2942578055@0+0.wasm → roots.cefd10e93684@0+0.wasm} +0 -0
- package/build/sub/{sha256.5fc9d60f8bb2@0+0.wasm → sha256.a6c32b04d799@0+0.wasm} +0 -0
- package/build/sub/{sha512.b988b9dc6114@0+0.wasm → sha512.c24a792d7891@0+0.wasm} +0 -0
- package/build/sub/site.1732b58ec0e8@0+0.wasm +0 -0
- package/build/sub/site.ae3913b0b0f4@0+0.wasm +0 -0
- package/build/sub/store.a24d7a25daa6@0+0.wasm +0 -0
- package/build/sub/stream.126e3bd5d626@0+0.wasm +0 -0
- package/build/sub/sub.2e3092140706@0+0.wasm +0 -0
- package/build/sub/substrate.5ee5d0b4d3e7@0+0.wasm +0 -0
- package/build/sub/{syntax.9857f6784d63@0+0.wasm → syntax.32f3e40b61c7@0+0.wasm} +0 -0
- package/build/sub/tar.2a633861e654@0+0.wasm +0 -0
- package/build/sub/test.9bd59c73f65e@0+0.wasm +0 -0
- package/build/sub/{text.4ab70ac35b5a@0+0.wasm → text.1bc90482bd43@0+0.wasm} +0 -0
- package/build/sub/{timer.3809bb17a7a1@0+0.wasm → timer.f35eb62ae446@0+0.wasm} +0 -0
- package/build/sub/upgrade.39ee449b00d5@0+0.wasm +0 -0
- package/build/sub/{utf8.524c475ecd40@0+0.wasm → utf8.e7216bd054e1@0+0.wasm} +0 -0
- package/build/sub/worker.762a9d642af0@0+0.wasm +0 -0
- package/build/sub/writer.00b7802cbe39@0+0.wasm +0 -0
- package/package.json +1 -1
- package/std/archive/tar.sub +44 -44
- package/std/browser/chromium.sub +5 -4
- package/std/browser/devtools.sub +24 -19
- package/std/compress/deflate.sub +10 -12
- package/std/compress/gzip.sub +18 -16
- package/std/compress/inflate.sub +7 -4
- package/std/crypto/password.sub +3 -3
- package/std/doc/doc.sub +2 -2
- package/std/encoding/json.sub +64 -73
- package/std/encoding/wire.sub +15 -15
- 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 +9 -12
- package/std/http/http.sub +17 -24
- package/std/http/multipart.sub +13 -15
- package/std/http/route.sub +18 -13
- package/std/http/server.sub +21 -23
- package/std/http/session.sub +3 -6
- package/std/http/sse-client.sub +9 -14
- package/std/http/static.sub +5 -5
- package/std/http/url.sub +10 -10
- package/std/http/websocket.sub +2 -5
- package/std/meta/derive.sub +0 -2
- package/std/meta/method.sub +41 -0
- package/std/meta/type-info.sub +30 -37
- package/std/package/files.sub +24 -25
- package/std/package/git.sub +26 -33
- package/std/package/hash.sub +9 -9
- package/std/package/manifest.sub +81 -57
- package/std/package/map.sub +5 -9
- package/std/package/pack.sub +13 -13
- package/std/package/path.sub +1 -4
- package/std/package/read.sub +10 -14
- package/std/package/site.sub +11 -11
- package/std/package/store.sub +16 -12
- package/std/package.sub +6 -6
- package/std/test/browser.sub +9 -8
- package/std/test/build.sub +2 -2
- package/std/test/compare.sub +9 -10
- package/std/test/page.sub +32 -27
- package/std/test/run.sub +9 -8
- package/std/test/test.sub +36 -30
- package/std/vector/vector.sub +75 -0
- package/substrate/VERSION +1 -1
- package/substrate/compiler/binary.sub +5 -14
- package/substrate/compiler/checker.sub +235 -222
- package/substrate/compiler/compile.sub +11 -11
- package/substrate/compiler/expander.sub +52 -78
- package/substrate/compiler/link.sub +2 -2
- package/substrate/compiler/main.sub +9 -9
- package/substrate/compiler/ops.sub +1 -1
- package/substrate/compiler/prune.sub +12 -17
- package/substrate/compiler/reader.sub +4 -4
- package/substrate/compiler/roots.sub +11 -10
- package/substrate/compiler/running.sub +1 -1
- package/substrate/compiler/serialize.sub +57 -50
- package/substrate/compiler/substrate.sub +60 -23
- package/substrate/compiler/syntax.sub +8 -21
- package/substrate/host/errors.mjs +3 -2
- package/substrate/host/events.sub +3 -16
- package/substrate/host/fs.mjs +5 -4
- package/substrate/host/fs.sub +142 -112
- package/substrate/host/grants.mjs +1 -1
- package/substrate/host/grants.sub +33 -33
- package/substrate/host/modules/fake.mjs +1 -1
- package/substrate/host/modules/websocket.mjs +4 -4
- package/substrate/host/modules/websocket.sub +8 -6
- package/substrate/host/node/env.mjs +12 -6
- package/substrate/host/node/env.sub +21 -16
- package/substrate/host/node/fs.mjs +1 -1
- package/substrate/host/node/net.mjs +2 -2
- package/substrate/host/node/net.sub +13 -6
- package/substrate/host/node/process.mjs +4 -4
- package/substrate/host/node/process.sub +28 -28
- package/substrate/host/node/signal.mjs +3 -2
- package/substrate/host/node/signal.sub +9 -6
- package/substrate/host/node/watch.mjs +1 -1
- package/substrate/host/node/watch.sub +11 -9
- package/substrate/host/stream.sub +2 -0
- package/substrate/host/subhost-core.mjs +9 -1
- package/substrate/host/web/clipboard.mjs +2 -2
- package/substrate/host/web/clipboard.sub +10 -3
- package/substrate/host/web/files.mjs +2 -2
- package/substrate/host/web/files.sub +6 -2
- package/substrate/host/web/fs.mjs +3 -3
- package/substrate/host/web/location.mjs +3 -1
- package/substrate/host/web/location.sub +8 -4
- package/substrate/host/worker-side.mjs +3 -1
- package/substrate/host/worker.mjs +6 -5
- package/substrate/host/worker.sub +10 -10
- package/build/compiler/binary.3823f89ce414@0+0.wasm +0 -0
- package/build/compiler/checker.592d37dcbec9@0+0.wasm +0 -0
- package/build/compiler/compile.86a2b03b0c9b@0+0.wasm +0 -0
- package/build/compiler/expander.689d326e5a1b@0+0.wasm +0 -0
- package/build/compiler/fs.563034be70c3@0+0.wasm +0 -0
- package/build/compiler/prune.d4a3f9834095@0+0.wasm +0 -0
- package/build/compiler/reader.b535e61f99f4@0+0.wasm +0 -0
- package/build/compiler/roots.6d2942578055@0+0.wasm +0 -0
- package/build/compiler/serialize.b2196de75bc8@0+0.wasm +0 -0
- package/build/compiler/substrate.4c780d6dd6d4@0+0.wasm +0 -0
- package/build/compiler/syntax.9857f6784d63@0+0.wasm +0 -0
- package/build/sub/build.84ac996eda63@0+0.wasm +0 -0
- package/build/sub/chromium.e4db7d29897c@0+0.wasm +0 -0
- package/build/sub/common.91ddee6b7a67@0+0.wasm +0 -0
- package/build/sub/deflate.fc8075e3aed1@0+0.wasm +0 -0
- package/build/sub/doc.0b48bbac404b@0+0.wasm +0 -0
- package/build/sub/env.f051f8166526@0+0.wasm +0 -0
- package/build/sub/events.f952172735e0@0+0.wasm +0 -0
- package/build/sub/fetch.097f1cc9502d@0+0.wasm +0 -0
- package/build/sub/fetch.5d2f427c995e@0+0.wasm +0 -0
- package/build/sub/files.30e55182c5df@0+0.wasm +0 -0
- package/build/sub/fs.563034be70c3@0+0.wasm +0 -0
- package/build/sub/git.48aefa1644be@0+0.wasm +0 -0
- package/build/sub/grants.5bf25700d47c@0+0.wasm +0 -0
- package/build/sub/gzip.69588e97c35a@0+0.wasm +0 -0
- package/build/sub/hash.3f0d118da63f@0+0.wasm +0 -0
- package/build/sub/json.f15a29d99d8d@0+0.wasm +0 -0
- package/build/sub/manifest.cf7471880377@0+0.wasm +0 -0
- package/build/sub/map.dc516eec27ff@0+0.wasm +0 -0
- package/build/sub/pack.55992e8cc09c@0+0.wasm +0 -0
- package/build/sub/path.b7a8e1cf3aaa@0+0.wasm +0 -0
- package/build/sub/process.aea2c88cb7a0@0+0.wasm +0 -0
- package/build/sub/read.cd1e693f4fb4@0+0.wasm +0 -0
- package/build/sub/site.7c6d8c7747af@0+0.wasm +0 -0
- package/build/sub/site.81548474c323@0+0.wasm +0 -0
- package/build/sub/store.d4e845ff24ac@0+0.wasm +0 -0
- package/build/sub/stream.4c07247477f7@0+0.wasm +0 -0
- package/build/sub/sub.b57e17b6876b@0+0.wasm +0 -0
- package/build/sub/substrate.4c780d6dd6d4@0+0.wasm +0 -0
- package/build/sub/tar.e482cf873cfc@0+0.wasm +0 -0
- package/build/sub/test.0d9c079bb309@0+0.wasm +0 -0
- package/build/sub/upgrade.18a5aa0dae89@0+0.wasm +0 -0
- package/build/sub/worker.f1190de21b21@0+0.wasm +0 -0
- package/build/sub/writer.806bc85aa684@0+0.wasm +0 -0
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
;; ---- per-function state ----
|
|
112
112
|
|
|
113
113
|
(define (new-fctx [params datum] [results datum]) -> (ptr fctx)
|
|
114
|
-
(let ([fc (
|
|
114
|
+
(let ([fc (new (current-arena) fctx)])
|
|
115
115
|
(set! (-> fc locals) (make-table))
|
|
116
116
|
(set! (-> fc extra) nil)
|
|
117
117
|
(set! (-> fc next) 0)
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
(define compiling datum 0)
|
|
148
148
|
|
|
149
149
|
(define (push-label [key datum] [kind datum] [type datum] [next (ptr label)]) -> (ptr label)
|
|
150
|
-
(let ([l (
|
|
150
|
+
(let ([l (new (current-arena) label)])
|
|
151
151
|
(set! (-> l key) key)
|
|
152
152
|
(set! (-> l kind) kind)
|
|
153
153
|
(set! (-> l type) type)
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
(define (synth-of [d datum]) -> (ptr synth) (cast (ptr synth) (record-pointer d)))
|
|
178
178
|
|
|
179
179
|
(define (new-mstate [self datum]) -> (ptr mstate)
|
|
180
|
-
(let ([ms (
|
|
180
|
+
(let ([ms (new (current-arena) mstate)])
|
|
181
181
|
(set! (-> ms self) self)
|
|
182
182
|
(set! (-> ms func-imports) nil)
|
|
183
183
|
(set! (-> ms global-imports) nil)
|
|
@@ -240,7 +240,7 @@
|
|
|
240
240
|
(set! (-> ms table-loc) current-loc)))
|
|
241
241
|
|
|
242
242
|
(define (new-synth! [ms (ptr mstate)] [kind datum] [info datum]) -> datum
|
|
243
|
-
(let ([s (
|
|
243
|
+
(let ([s (new (current-arena) synth)])
|
|
244
244
|
(set! (-> s self) (make-record-in (current-arena) synth-kind s))
|
|
245
245
|
(set! (-> s kind) kind)
|
|
246
246
|
(set! (-> s info) info)
|
|
@@ -626,7 +626,7 @@
|
|
|
626
626
|
|
|
627
627
|
(define (compile-function [ms (ptr mstate)] [info datum] [params datum] [body datum]) -> (ptr compiled)
|
|
628
628
|
(let ([fc (new-fctx params (func-info-results info))]
|
|
629
|
-
[cf (
|
|
629
|
+
[cf (new (current-arena) compiled)])
|
|
630
630
|
(set! (-> ms fname) (func-info-name info))
|
|
631
631
|
(set! compiling (func-info-name info))
|
|
632
632
|
(set! current-loc 0)
|
|
@@ -757,7 +757,7 @@
|
|
|
757
757
|
(set-tag-info-export! (cadr f) (export-name! ms (tag-info-name (cadr f)))))
|
|
758
758
|
tag-forms)
|
|
759
759
|
(set! constants (constant-inits ms global-forms))
|
|
760
|
-
(set! last (
|
|
760
|
+
(set! last (new (current-arena) compiled))
|
|
761
761
|
(set! (-> last next) 0)
|
|
762
762
|
(set! first last)
|
|
763
763
|
(for-each (lambda ([f datum])
|
|
@@ -814,7 +814,7 @@
|
|
|
814
814
|
(define (table-functions! [ms (ptr mstate)] [last (ptr compiled)] [segment i64]) -> (ptr compiled)
|
|
815
815
|
(let ([ts (reverse (-> ms tables))])
|
|
816
816
|
(while (pair? ts)
|
|
817
|
-
(let ([t (car ts)] [a (new-asm)] [cf (
|
|
817
|
+
(let ([t (car ts)] [a (new-asm)] [cf (new (current-arena) compiled)])
|
|
818
818
|
(instr! a `(i32.const ,(caddr t)))
|
|
819
819
|
(instr! a `(call ,(list-ref t 4)))
|
|
820
820
|
(instr! a `(global.set ,(car t)))
|
|
@@ -933,9 +933,9 @@
|
|
|
933
933
|
;; ---- linking ----
|
|
934
934
|
|
|
935
935
|
(define (index-of [t (ptr hash-table)] [key datum] [what string]) -> datum
|
|
936
|
-
(let ([i (hash-
|
|
936
|
+
(let ([i (hash-find t (cast u64 key))])
|
|
937
937
|
(when (== i 0) (fail "internal: ~a has no index" (cons (string->datum what) nil)))
|
|
938
|
-
(small (
|
|
938
|
+
(small (@ i))))
|
|
939
939
|
|
|
940
940
|
(define (type-index [lk (ptr linker)] [sig datum]) -> datum
|
|
941
941
|
(let ([known (datum-get (-> lk func-type-index) sig)])
|
|
@@ -965,7 +965,7 @@
|
|
|
965
965
|
|
|
966
966
|
(define (number! [t (ptr hash-table)] [items datum] [n u32]) -> u32
|
|
967
967
|
(while (pair? items)
|
|
968
|
-
(hash-set! t (cast u64 (car items))
|
|
968
|
+
(hash-set! t (cast u64 (car items)) n)
|
|
969
969
|
(+= n 1)
|
|
970
970
|
(set! items (cdr items)))
|
|
971
971
|
n)
|
|
@@ -973,7 +973,7 @@
|
|
|
973
973
|
(define (link-module [ms (ptr mstate)] [compiled (ptr compiled)] [start-fc (ptr fctx)] [setup (ptr asm)]
|
|
974
974
|
[literal-segment datum] [global-forms datum] [tag-forms datum] [memory-form datum]
|
|
975
975
|
[table-form datum] [constants (ptr hash-table)]) -> datum
|
|
976
|
-
(let* ([lk (
|
|
976
|
+
(let* ([lk (new (current-arena) linker)]
|
|
977
977
|
[has-start (or (> (asm-size setup) 0) (> (asm-size (-> start-fc asm)) 0))]
|
|
978
978
|
[func-imports (reverse (-> ms func-imports))]
|
|
979
979
|
[global-imports (reverse (-> ms global-imports))]
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
(const unit-kind u32 20)
|
|
88
88
|
|
|
89
89
|
(define (new-unit [path datum] [name datum]) -> datum
|
|
90
|
-
(let ([m (
|
|
90
|
+
(let ([m (new (& run-arena) unit)])
|
|
91
91
|
(set! (-> m self) (make-record unit-kind m))
|
|
92
92
|
(set! (-> m path) (keep path))
|
|
93
93
|
(set! (-> m name) (keep name))
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
(struct comp [module datum] [use-site-scopes datum] [phase-forms datum] [memories datum]
|
|
114
114
|
[tables datum] [provide-ids datum] [require-names datum]
|
|
115
115
|
[ns datum] [instances (ptr hash-table)] [values (ptr hash-table)] [wasm-module-counter u32] [storage-wasm-modules datum]
|
|
116
|
-
[checking (ptr void)] [language datum]
|
|
116
|
+
[checking (ptr void)] [language datum])
|
|
117
117
|
|
|
118
118
|
(define current (ptr comp) 0)
|
|
119
119
|
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
(define namespace-counter u32 0)
|
|
123
123
|
|
|
124
124
|
(define (new-comp [m datum]) -> (ptr comp)
|
|
125
|
-
(let ([c (
|
|
125
|
+
(let ([c (new (current-arena) comp)])
|
|
126
126
|
(set! (-> c module) m)
|
|
127
127
|
(set! (-> c use-site-scopes) nil)
|
|
128
128
|
(set! (-> c phase-forms) nil)
|
|
@@ -138,8 +138,6 @@
|
|
|
138
138
|
(set! (-> c storage-wasm-modules) nil)
|
|
139
139
|
(set! (-> c checking) 0)
|
|
140
140
|
(set! (-> c language) 0)
|
|
141
|
-
(set! (-> c expansions) (make-table))
|
|
142
|
-
(set! (-> c scopes) (make-table))
|
|
143
141
|
c))
|
|
144
142
|
|
|
145
143
|
;; Scopes for local binding forms get odd numbers, and all other scopes get even numbers. This lets
|
|
@@ -353,19 +351,16 @@
|
|
|
353
351
|
(cast (ptr binding) (hash-ref (& bindings) (slot-key sym slot))))
|
|
354
352
|
|
|
355
353
|
(define (bind-raw! [sym datum] [scopes (ptr scope-set)] [phase i32] [meaning datum]) -> (ptr binding)
|
|
356
|
-
(let ([
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
(set! (-> b key) (keep (fresh-key!)))
|
|
360
|
-
(set! (-> b meaning) (keep meaning))
|
|
361
|
-
(set! (-> b next) (cast (ptr binding) (hash-ref (& bindings) k)))
|
|
354
|
+
(let* ([k (slot-key sym (binding-slot scopes))]
|
|
355
|
+
[b (new (& run-arena) (binding #:scopes scopes #:phase phase #:key (keep (fresh-key!)) #:meaning (keep meaning)
|
|
356
|
+
#:next (cast (ptr binding) (hash-ref (& bindings) k))))])
|
|
362
357
|
(hash-set! (& bindings) k (cast u32 b))
|
|
363
358
|
b))
|
|
364
359
|
|
|
365
360
|
(define (bind-module-level! [sym datum] [scopes (ptr scope-set)] [phase i32] [meaning datum]) -> (ptr binding)
|
|
366
361
|
(let ([b (bind-raw! sym scopes phase meaning)])
|
|
367
362
|
(when (!= current 0)
|
|
368
|
-
(let ([e (
|
|
363
|
+
(let ([e (new (& run-arena) module-entry)] [m (the-module)])
|
|
369
364
|
(set! (-> e symbol) sym)
|
|
370
365
|
(set! (-> e scopes) scopes)
|
|
371
366
|
(set! (-> e phase) phase)
|
|
@@ -815,7 +810,7 @@
|
|
|
815
810
|
(define (imported-kind [kind datum]) -> datum (if (== kind 'memory) 'memory-import 'table-import))
|
|
816
811
|
|
|
817
812
|
(define (add-wasm-module! [m datum] [phase i32] [compiled datum])
|
|
818
|
-
(let ([l (
|
|
813
|
+
(let ([l (new (& run-arena) wasm-module)] [u (unit-of m)])
|
|
819
814
|
(set! (-> l phase) phase)
|
|
820
815
|
(set! (-> l bytes) (keep (car compiled)))
|
|
821
816
|
(set! (-> l imports) (keep (cadr compiled)))
|
|
@@ -1048,8 +1043,8 @@
|
|
|
1048
1043
|
(define (write-data [path datum] [d datum]) -> bool
|
|
1049
1044
|
(let ([b (make-buffer)] [temp string] [ok #f])
|
|
1050
1045
|
(sealed! (& b) d)
|
|
1051
|
-
(when (
|
|
1052
|
-
(set! ok (and (
|
|
1046
|
+
(when (fs-make-temp-file (datum->string cache-directory) "" ".tmp" (& temp) 0)
|
|
1047
|
+
(set! ok (and (fs-write-file temp (buffer-bytes (& b)) 0) (fs-rename temp (datum->string path) 0)))
|
|
1053
1048
|
(unless ok (fs-remove temp #f 0))
|
|
1054
1049
|
(free (-> temp bytes)))
|
|
1055
1050
|
(buffer-free! (& b))
|
|
@@ -1333,13 +1328,13 @@
|
|
|
1333
1328
|
(own-ref info))])))
|
|
1334
1329
|
|
|
1335
1330
|
(define (own-ref [info datum]) -> datum
|
|
1336
|
-
(let ([
|
|
1337
|
-
(
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
`(own ,(make-integer
|
|
1331
|
+
(let ([known (hash-find own-numbers (cast u64 info))] [i own-count])
|
|
1332
|
+
(if (!= known 0)
|
|
1333
|
+
(set! i (@ known))
|
|
1334
|
+
(begin (set! own-list (cons info own-list))
|
|
1335
|
+
(+= own-count 1)
|
|
1336
|
+
(hash-set! own-numbers (cast u64 info) i)))
|
|
1337
|
+
`(own ,(make-integer i))))
|
|
1343
1338
|
|
|
1344
1339
|
(define (info->list [info datum]) -> datum
|
|
1345
1340
|
(cond [(func-info? info)
|
|
@@ -1391,10 +1386,7 @@
|
|
|
1391
1386
|
(define loading datum 0)
|
|
1392
1387
|
(define loaded-infos (ptr datum) 0)
|
|
1393
1388
|
|
|
1394
|
-
(define (zeroed-array [n u32]) -> (ptr datum)
|
|
1395
|
-
(let ([a (cast (ptr datum) (arena-alloc (current-arena) (* 4 (+ n 1))))])
|
|
1396
|
-
(for ([i u32 0]) (< i n) (+= i 1) (set! (@ a i) 0))
|
|
1397
|
-
a))
|
|
1389
|
+
(define (zeroed-array [n u32]) -> (ptr datum) (-> (new (current-arena) datum (+ n 1)) items))
|
|
1398
1390
|
|
|
1399
1391
|
(define (load-module! [m datum] [d datum])
|
|
1400
1392
|
(let* ([u (unit-of m)] [infos (section d 'infos)] [ni (length infos)]
|
|
@@ -1423,7 +1415,7 @@
|
|
|
1423
1415
|
(for-each (lambda ([e datum])
|
|
1424
1416
|
(let* ([scopes (scope-set-of (cadr e))] [phase (cast i32 (integer-value (caddr e)))]
|
|
1425
1417
|
[b (bind-raw! (car e) scopes phase (decode (cadddr e)))]
|
|
1426
|
-
[me (
|
|
1418
|
+
[me (new (& run-arena) module-entry)])
|
|
1427
1419
|
(set! (-> me symbol) (car e))
|
|
1428
1420
|
(set! (-> me scopes) scopes)
|
|
1429
1421
|
(set! (-> me phase) phase)
|
|
@@ -1520,7 +1512,7 @@
|
|
|
1520
1512
|
(define current-body (ptr body) 0)
|
|
1521
1513
|
|
|
1522
1514
|
(define (expand-body [forms datum] [phase i32]) -> datum
|
|
1523
|
-
(let ([b (
|
|
1515
|
+
(let ([b (new (current-arena) body)] [saved current-body] [out datum 0])
|
|
1524
1516
|
(set! (-> b phase) phase)
|
|
1525
1517
|
(set! (-> b syntax) to-syntax)
|
|
1526
1518
|
(set! (-> b items) nil)
|
|
@@ -1866,12 +1858,12 @@
|
|
|
1866
1858
|
(define (included-text [s datum]) -> datum
|
|
1867
1859
|
(let ([l (syntax->list s)])
|
|
1868
1860
|
(unless (and (!= l 0) (== (length l) 2) (string-literal? (cadr l))) (no-match s "(include-text \"file\")"))
|
|
1869
|
-
(let* ([spec (cadr l)] [from (module-source-file s spec)] [id (module-path-from from spec)] [why
|
|
1861
|
+
(let* ([spec (cadr l)] [from (module-source-file s spec)] [id (module-path-from from spec)] [why error]
|
|
1870
1862
|
[b (slice u8)] [text datum 0] [me (the-module)])
|
|
1871
1863
|
(check-module! (if (in-session?) 0 (-> me path)) id spec)
|
|
1872
1864
|
(note-resolved! from (syntax-e spec) id)
|
|
1873
|
-
(
|
|
1874
|
-
(fail-at spec "cannot read ~s: ~a" `(,(syntax-e spec) ,(host-error why))))
|
|
1865
|
+
(unless (fs-read-file (datum->string (host-file id)) (& b) (& why))
|
|
1866
|
+
(fail-at spec "cannot read ~s: ~a" `(,(syntax-e spec) ,(host-error (& why)))))
|
|
1875
1867
|
(set! text (string->datum (cast string b)))
|
|
1876
1868
|
(free (-> b items))
|
|
1877
1869
|
(when (== (assoc id (-> me included)) 0)
|
|
@@ -2023,34 +2015,32 @@
|
|
|
2023
2015
|
(ensure-wasm-module! (car l) 0 t)
|
|
2024
2016
|
(set! l (cdr l))))))
|
|
2025
2017
|
|
|
2026
|
-
(define (instantiate-bytes [name string] [code (slice u8)] [imports (slice string)] [compile-time bool]
|
|
2027
|
-
|
|
2028
|
-
(
|
|
2018
|
+
(define (instantiate-bytes [name string] [code (slice u8)] [imports (slice string)] [compile-time bool]
|
|
2019
|
+
[err (ptr error)]) -> bool
|
|
2020
|
+
(host-instantiate name code imports compile-time err))
|
|
2029
2021
|
|
|
2030
2022
|
(define (instantiate! [name datum] [bytes datum] [imports datum] [scopes datum] [t u32] [where datum] [compile-time bool])
|
|
2031
|
-
(let* ([map (import-map imports t)] [n (* 2 (length map))] [pairs (
|
|
2032
|
-
[why string])
|
|
2023
|
+
(let* ([map (import-map imports t)] [n (* 2 (length map))] [pairs (new 0 string n)] [i u32 0] [ok #f] [why error])
|
|
2033
2024
|
(while (pair? map)
|
|
2034
2025
|
(set! (@ pairs i) (datum->string (car (car map))))
|
|
2035
2026
|
(set! (@ pairs (+ i 1)) (datum->string (cdr (car map))))
|
|
2036
2027
|
(+= i 2)
|
|
2037
2028
|
(set! map (cdr map)))
|
|
2038
2029
|
(set-scope-map! (slice (scope-map-of scopes t) (length scopes)))
|
|
2039
|
-
(try (set! ok (instantiate-bytes (datum->string name) (datum->bytes bytes)
|
|
2040
|
-
(& why)))
|
|
2030
|
+
(try (set! ok (instantiate-bytes (datum->string name) (datum->bytes bytes) pairs compile-time (& why)))
|
|
2041
2031
|
[catch compile-error (message blamed loc)
|
|
2042
2032
|
(set-scope-map! 0)
|
|
2043
|
-
(free pairs)
|
|
2033
|
+
(free (-> pairs items))
|
|
2044
2034
|
(throw compile-error message blamed loc)])
|
|
2045
2035
|
(set-scope-map! 0)
|
|
2046
|
-
(free pairs)
|
|
2036
|
+
(free (-> pairs items))
|
|
2047
2037
|
(unless ok
|
|
2048
2038
|
(if session-running
|
|
2049
|
-
(fail-at where "~a" (list1 (session-failure (host-error why))))
|
|
2050
|
-
(fail-at where "compile-time code failed: ~a" (list1 (host-error why)))))))
|
|
2039
|
+
(fail-at where "~a" (list1 (session-failure (host-error (& why)))))
|
|
2040
|
+
(fail-at where "compile-time code failed: ~a" (list1 (host-error (& why))))))))
|
|
2051
2041
|
|
|
2052
2042
|
(define (scope-map-of [scopes datum] [t u32]) -> (ptr u32)
|
|
2053
|
-
(let ([p (
|
|
2043
|
+
(let ([p (-> (new (current-arena) u32 (+ (length scopes) 1)) items)] [i u32 0] [sc u32 0] [o datum 0])
|
|
2054
2044
|
(while (pair? scopes)
|
|
2055
2045
|
(set! sc (cast u32 (integer-value (car scopes))))
|
|
2056
2046
|
(set! o (scope-origin sc))
|
|
@@ -2175,14 +2165,9 @@
|
|
|
2175
2165
|
[(and (!= m 0) (or (== (car m) 'core) (== (car m) 'prim))) (shape-of (cadr m) s api-phase)]
|
|
2176
2166
|
[else 0])))
|
|
2177
2167
|
|
|
2178
|
-
(define (query-scope-shape [m datum]
|
|
2179
|
-
(
|
|
2180
|
-
|
|
2181
|
-
known
|
|
2182
|
-
(begin
|
|
2183
|
-
(scope-shape m api-phase nil)
|
|
2184
|
-
(when remember (hash-set! (-> current scopes) (cast u64 (cadr m)) (cast u32 m)))
|
|
2185
|
-
m))))
|
|
2168
|
+
(define (query-scope-shape [m datum]) -> datum
|
|
2169
|
+
(scope-shape m api-phase nil)
|
|
2170
|
+
m)
|
|
2186
2171
|
|
|
2187
2172
|
;; ---- checked code ----
|
|
2188
2173
|
|
|
@@ -2712,9 +2697,9 @@
|
|
|
2712
2697
|
|
|
2713
2698
|
(define (query-inline-call [info datum] [args datum]) -> datum (inline-call info args api-phase))
|
|
2714
2699
|
|
|
2715
|
-
(define (query-expand-head [s datum]
|
|
2700
|
+
(define (query-expand-head [s datum]) -> datum (expand-head s api-phase))
|
|
2716
2701
|
|
|
2717
|
-
(define (expand-head [s datum] [phase i32]
|
|
2702
|
+
(define (expand-head [s datum] [phase i32]) -> datum
|
|
2718
2703
|
(let ([e (syntax-e s)])
|
|
2719
2704
|
(cond
|
|
2720
2705
|
[(symbol? e)
|
|
@@ -2725,7 +2710,7 @@
|
|
|
2725
2710
|
[('compile-time-value)
|
|
2726
2711
|
(let ([t (transformer-of m)])
|
|
2727
2712
|
(when (== t 0) (fail-at s "~a is bound to a compile-time value: read it with syntax-local-value" (list1 e)))
|
|
2728
|
-
(head-transformer s t s phase
|
|
2713
|
+
(head-transformer s t s phase))]
|
|
2729
2714
|
[('func) `(func ,(cadr m))]
|
|
2730
2715
|
[('tag) (fail-at s "~a is a tag: throw it with (throw ~a arg ...)" `(,e ,e))]
|
|
2731
2716
|
[('core 'prim) (fail-at s "bad use of ~a" (list1 e))]
|
|
@@ -2733,7 +2718,7 @@
|
|
|
2733
2718
|
[else (unbound s e phase)]))]
|
|
2734
2719
|
[(pair? e)
|
|
2735
2720
|
(let* ([head (car e)] [m (if (identifier? head) (meaning-of head phase) 0)] [t (transformer-of m)])
|
|
2736
|
-
(cond [(!= t 0) (head-transformer head t s phase
|
|
2721
|
+
(cond [(!= t 0) (head-transformer head t s phase)]
|
|
2737
2722
|
[(and (!= m 0) (== (car m) 'core) (== (cadr m) 'include-text)) `(macro ,(included-text s))]
|
|
2738
2723
|
[(and (!= m 0) (== (car m) 'core)) `(core ,(cadr m) ,s)]
|
|
2739
2724
|
[(and (!= m 0) (== (car m) 'prim)) `(prim ,(cadr m) ,s)]
|
|
@@ -2742,38 +2727,27 @@
|
|
|
2742
2727
|
(if (!= m 0)
|
|
2743
2728
|
(fail-at s "#%app is bound here, but not to a macro or the core form" nil)
|
|
2744
2729
|
(unbound head '#%app phase)))
|
|
2745
|
-
(expand-head (syntax-rewrap s (cons (implicit-id s '#%app) e)) phase
|
|
2730
|
+
(expand-head (syntax-rewrap s (cons (implicit-id s '#%app) e)) phase)]))]
|
|
2746
2731
|
[(null? e) (fail-at s "empty form ()" nil)]
|
|
2747
2732
|
[(literal? e)
|
|
2748
2733
|
(let* ([id (implicit-id s '#%datum)] [m (meaning-of id phase)] [t (transformer-of m)] [form (syntax-rewrap s `(,id ,s))])
|
|
2749
|
-
(cond [(!= t 0) (head-transformer id t form phase
|
|
2734
|
+
(cond [(!= t 0) (head-transformer id t form phase)]
|
|
2750
2735
|
[(and (!= m 0) (== (car m) 'core)) `(core #%datum ,form)]
|
|
2751
2736
|
[else (fail-at s "the literal ~s needs #%datum, which is ~a here"
|
|
2752
2737
|
`(,(syntax->datum s) ,(if (!= m 0) '"not a macro or the core form" '"unbound")))]))]
|
|
2753
2738
|
[(keyword? e) (fail-at s "~s: keyword misused as an expression" (list1 e))]
|
|
2754
2739
|
[else (fail-at s "~s is not an expression" (list1 (syntax->datum s)))])))
|
|
2755
2740
|
|
|
2756
|
-
(define (head-transformer [head datum] [t datum] [s datum] [phase i32]
|
|
2741
|
+
(define (head-transformer [head datum] [t datum] [s datum] [phase i32]) -> datum
|
|
2757
2742
|
(if (form-value? t)
|
|
2758
2743
|
(let ([l (syntax->list t)]) `(form ,(syntax-e (cadr l)) ,(if (pair? (cddr l)) (caddr l) 0) ,s ,t))
|
|
2759
|
-
`(macro ,(
|
|
2744
|
+
`(macro ,(apply-macro head t s phase #f))))
|
|
2760
2745
|
|
|
2761
|
-
(define (query-apply-form [t datum] [s datum]
|
|
2762
|
-
(if remember
|
|
2763
|
-
(remembered-expansion (if (pair? (syntax-e s)) (car (syntax-e s)) s) t s api-phase)
|
|
2764
|
-
(apply-form t s api-phase)))
|
|
2746
|
+
(define (query-apply-form [t datum] [s datum]) -> datum (apply-form t s api-phase))
|
|
2765
2747
|
|
|
2766
2748
|
(define (apply-form [t datum] [s datum] [phase i32]) -> datum
|
|
2767
2749
|
(apply-macro (if (pair? (syntax-e s)) (car (syntax-e s)) s) t s phase #f))
|
|
2768
2750
|
|
|
2769
|
-
(define (remembered-expansion [head datum] [t datum] [s datum] [phase i32]) -> datum
|
|
2770
|
-
(let ([known (cast datum (hash-ref (-> current expansions) (cast u64 s)))])
|
|
2771
|
-
(if (!= known 0)
|
|
2772
|
-
known
|
|
2773
|
-
(let ([x (apply-macro head t s phase #f)])
|
|
2774
|
-
(hash-set! (-> current expansions) (cast u64 s) (cast u32 x))
|
|
2775
|
-
x))))
|
|
2776
|
-
|
|
2777
2751
|
(define (query-local-expand [s datum]) -> datum
|
|
2778
2752
|
(unless (syntax? s) (fail-at api-where "local-expand: expected syntax" nil))
|
|
2779
2753
|
(let ([saved-output to-syntax] [out datum 0])
|
|
@@ -2881,23 +2855,23 @@
|
|
|
2881
2855
|
(define (module-names [m datum]) -> (ptr names)
|
|
2882
2856
|
(let ([head (-> (unit-of m) entries)] [known (cast (ptr names) (hash-ref (& name-tables) (cast u64 m)))])
|
|
2883
2857
|
(when (and (!= known 0) (== (-> known upto) head)) (return known))
|
|
2884
|
-
(let ([saved (use-arena (& run-arena))] [n known] [
|
|
2858
|
+
(let ([saved (use-arena (& run-arena))] [n known] [added nil] [e head])
|
|
2885
2859
|
(when (!= n 0)
|
|
2886
2860
|
(while (and (!= e 0) (!= e (-> n upto)))
|
|
2887
|
-
(set!
|
|
2861
|
+
(set! added (cons (cast datum e) added))
|
|
2888
2862
|
(set! e (-> e next)))
|
|
2889
2863
|
(when (!= e (-> n upto)) (set! n 0)))
|
|
2890
2864
|
(when (== n 0)
|
|
2891
|
-
(set! n (
|
|
2865
|
+
(set! n (new (& run-arena) names))
|
|
2892
2866
|
(set! (-> n by-base) (make-table))
|
|
2893
2867
|
(set! (-> n by-name) (make-table))
|
|
2894
2868
|
(set! (-> n counts) (make-table))
|
|
2895
|
-
(set!
|
|
2869
|
+
(set! added nil)
|
|
2896
2870
|
(set! e head)
|
|
2897
2871
|
(while (!= e 0)
|
|
2898
|
-
(set!
|
|
2872
|
+
(set! added (cons (cast datum e) added))
|
|
2899
2873
|
(set! e (-> e next))))
|
|
2900
|
-
(name-entries! m n
|
|
2874
|
+
(name-entries! m n added)
|
|
2901
2875
|
(set! (-> n upto) head)
|
|
2902
2876
|
(hash-set! (& name-tables) (cast u64 m) (cast u32 n))
|
|
2903
2877
|
(use-arena saved)
|
|
@@ -2966,7 +2940,7 @@
|
|
|
2966
2940
|
(fail-at s "unbound identifier ~a~a" `(,sym ,(if (> phase 0) (format " at phase ~a" (list1 (make-integer phase))) '""))))
|
|
2967
2941
|
|
|
2968
2942
|
(define (expand-expr [s datum] [phase i32]) -> datum
|
|
2969
|
-
(let ([h (expand-head s phase
|
|
2943
|
+
(let ([h (expand-head s phase)])
|
|
2970
2944
|
(case (car h)
|
|
2971
2945
|
[('local) (with-local-binding s (cadr h))]
|
|
2972
2946
|
[('global 'func) (with-local-binding s 0)]
|
|
@@ -251,8 +251,8 @@
|
|
|
251
251
|
[nkept u32 0] [base u32 0])
|
|
252
252
|
(set! (-> k nf) (+ (-> s nfimports) ndefined))
|
|
253
253
|
(set! (-> k ng) (+ (-> s ngimports) (length (-> s globals))))
|
|
254
|
-
(set! (-> k fmap) (
|
|
255
|
-
(set! (-> k gmap) (
|
|
254
|
+
(set! (-> k fmap) (-> (new 0 u32 (+ (-> k nf) 1)) items))
|
|
255
|
+
(set! (-> k gmap) (-> (new 0 u32 (+ (-> k ng) 1)) items))
|
|
256
256
|
(set! (-> k kept) nil)
|
|
257
257
|
(set! (-> k hooks) nil)
|
|
258
258
|
(set! (-> k sp) 0)
|
|
@@ -39,22 +39,22 @@
|
|
|
39
39
|
path))
|
|
40
40
|
|
|
41
41
|
(define (write-file [path datum] [b (slice u8)])
|
|
42
|
-
(let ([why
|
|
43
|
-
(
|
|
44
|
-
(raise-compile-error 0 (format-message "cannot write ~a" (cons (host-error why) nil))))))
|
|
42
|
+
(let ([why error])
|
|
43
|
+
(unless (fs-write-file (datum->string path) b (& why))
|
|
44
|
+
(raise-compile-error 0 (format-message "cannot write ~a" (cons (host-error (& why)) nil))))))
|
|
45
45
|
|
|
46
46
|
(define (read-file [path datum]) -> datum
|
|
47
|
-
(let ([b (slice u8)] [why
|
|
48
|
-
(
|
|
49
|
-
(raise-compile-error 0 (format-message "cannot read ~a" (cons (host-error why) nil))))
|
|
47
|
+
(let ([b (slice u8)] [why error] [s datum 0])
|
|
48
|
+
(unless (fs-read-file (datum->string path) (& b) (& why))
|
|
49
|
+
(raise-compile-error 0 (format-message "cannot read ~a" (cons (host-error (& why)) nil))))
|
|
50
50
|
(set! s (string->datum (cast string b)))
|
|
51
51
|
(free (-> b items))
|
|
52
52
|
s))
|
|
53
53
|
|
|
54
54
|
(define (make-dir [path datum])
|
|
55
|
-
(let ([why
|
|
56
|
-
(
|
|
57
|
-
(raise-compile-error 0 (format-message "cannot make ~a" (cons (host-error why) nil))))))
|
|
55
|
+
(let ([why error])
|
|
56
|
+
(unless (fs-make-dir (datum->string path) (& why))
|
|
57
|
+
(raise-compile-error 0 (format-message "cannot make ~a" (cons (host-error (& why)) nil))))))
|
|
58
58
|
|
|
59
59
|
(define (joined [strings datum]) -> datum
|
|
60
60
|
(let ([b (make-buffer)] [s datum 0])
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
memory.copy memory.fill))
|
|
16
16
|
|
|
17
17
|
(define (def! [name datum] [code datum] [params datum] [results datum] [align i32])
|
|
18
|
-
(let ([op (
|
|
18
|
+
(let ([op (new (& run-arena) prim-op)])
|
|
19
19
|
(set! (-> op name) name)
|
|
20
20
|
(set! (-> op code) code)
|
|
21
21
|
(set! (-> op params) params)
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
(define (unreadable) (raise-compile-error 0 "internal: a program's wasm module cannot be read"))
|
|
19
19
|
|
|
20
20
|
(define (new-wasm [name datum] [bytes datum]) -> (ptr wasm)
|
|
21
|
-
(let ([w (
|
|
21
|
+
(let ([w (new (current-arena) wasm)] [id u32 0] [head u32 0] [next u32 0])
|
|
22
22
|
(set! (-> w name) name)
|
|
23
23
|
(set! (-> w bytes) (datum->bytes bytes))
|
|
24
24
|
(set! (-> w sections) nil)
|
|
@@ -66,20 +66,15 @@
|
|
|
66
66
|
[(== id 9) (read-elems!)]
|
|
67
67
|
[(== id 10) (read-bodies! w)])
|
|
68
68
|
(set! ss (cdr ss)))
|
|
69
|
-
(set! (-> w live) (
|
|
70
|
-
(
|
|
71
|
-
(set! (-> w table-functions) (cast (ptr bool) (arena-alloc (current-arena) (+ (-> w nimports) (-> w count) 1))))
|
|
72
|
-
(memset (-> w table-functions) 0 (+ (-> w nimports) (-> w count) 1))
|
|
69
|
+
(set! (-> w live) (-> (new (current-arena) bool (+ (-> w nimports) (-> w count) 1)) items))
|
|
70
|
+
(set! (-> w table-functions) (-> (new (current-arena) bool (+ (-> w nimports) (-> w count) 1)) items))
|
|
73
71
|
(for-each (lambda ([t datum]) (set! (@ (-> w table-functions) (cast u32 (integer-value (car t)))) #t)) (-> w tables))
|
|
74
|
-
(set! (-> w valued) (
|
|
75
|
-
(
|
|
76
|
-
(set! (-> w read-
|
|
77
|
-
(memset (-> w read-globals) 0 (+ (-> w nglobals) 1))
|
|
78
|
-
(set! (-> w read-datas) (cast (ptr bool) (arena-alloc (current-arena) (+ (-> w ndatas) 1))))
|
|
79
|
-
(memset (-> w read-datas) 0 (+ (-> w ndatas) 1))
|
|
72
|
+
(set! (-> w valued) (-> (new (current-arena) bool (+ (-> w nimports) (-> w count) 1)) items))
|
|
73
|
+
(set! (-> w read-globals) (-> (new (current-arena) bool (+ (-> w nglobals) 1)) items))
|
|
74
|
+
(set! (-> w read-datas) (-> (new (current-arena) bool (+ (-> w ndatas) 1)) items))
|
|
80
75
|
(set! (-> w sites) (make-buffer))
|
|
81
|
-
(set! (-> w site-starts) (
|
|
82
|
-
(set! (-> w site-ends) (
|
|
76
|
+
(set! (-> w site-starts) (-> (new (current-arena) u32 (+ (-> w count) 1)) items))
|
|
77
|
+
(set! (-> w site-ends) (-> (new (current-arena) u32 (+ (-> w count) 1)) items))))
|
|
83
78
|
|
|
84
79
|
;; Each import's span is its kind and its bytes' start and end.
|
|
85
80
|
(define (read-imports! [w (ptr wasm)])
|
|
@@ -125,8 +120,8 @@
|
|
|
125
120
|
(define (read-bodies! [w (ptr wasm)])
|
|
126
121
|
(let ([n (uleb)] [size u32 0])
|
|
127
122
|
(set! (-> w count) n)
|
|
128
|
-
(set! (-> w starts) (
|
|
129
|
-
(set! (-> w ends) (
|
|
123
|
+
(set! (-> w starts) (-> (new (current-arena) u32 (+ n 1)) items))
|
|
124
|
+
(set! (-> w ends) (-> (new (current-arena) u32 (+ n 1)) items))
|
|
130
125
|
(for ([k u32 0]) (< k n) (+= k 1)
|
|
131
126
|
(set! size (uleb))
|
|
132
127
|
(set! (@ (-> w starts) k) (position))
|
|
@@ -335,7 +330,7 @@
|
|
|
335
330
|
|
|
336
331
|
(define (renumber! [w (ptr wasm)])
|
|
337
332
|
(let ([total (+ (-> w nimports) (-> w count))] [next u32 0])
|
|
338
|
-
(set! (-> w indexes) (
|
|
333
|
+
(set! (-> w indexes) (-> (new (current-arena) u32 (+ total 1)) items))
|
|
339
334
|
(for ([i u32 0]) (< i total) (+= i 1)
|
|
340
335
|
(set! (@ (-> w indexes) i) next)
|
|
341
336
|
(when (@ (-> w live) i) (+= next 1)))))
|
|
@@ -371,7 +366,7 @@
|
|
|
371
366
|
(define (rewritten [w (ptr wasm)]) -> datum
|
|
372
367
|
(let ([out (make-buffer)] [ss (-> w sections)] [news (ptr u32) 0] [s datum 0])
|
|
373
368
|
(renumber! w)
|
|
374
|
-
(set! news (
|
|
369
|
+
(set! news (-> (new (current-arena) u32 (+ (-> w count) 1)) items))
|
|
375
370
|
(buffer-add! (& out) (slice (-> w bytes) 0 8))
|
|
376
371
|
(while (pair? ss)
|
|
377
372
|
(let* ([sec (car ss)] [id (integer-value (car sec))] [head (cast u32 (integer-value (cadr sec)))]
|
|
@@ -269,10 +269,10 @@
|
|
|
269
269
|
head))
|
|
270
270
|
|
|
271
271
|
(define (read-file [path datum]) -> datum
|
|
272
|
-
(let* ([why
|
|
273
|
-
(
|
|
274
|
-
(let ([reason (string->datum why)])
|
|
275
|
-
(free (
|
|
272
|
+
(let* ([why error] [b (slice u8)] [forms datum 0])
|
|
273
|
+
(unless (fs-read-file (datum->string path) (& b) (& why))
|
|
274
|
+
(let ([reason (string->datum (error-text (& why)))])
|
|
275
|
+
(error-free! (& why))
|
|
276
276
|
(raise-compile-error 0 (format-message "cannot read ~a" (list1 reason)))))
|
|
277
277
|
(set! forms (read-all (cast string b) (string->symbol (datum->string path))))
|
|
278
278
|
(free (-> b items))
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
(read-all (datum->string text) source))
|
|
38
38
|
|
|
39
39
|
(define (file-text [file datum]) -> datum
|
|
40
|
-
(let* ([why
|
|
41
|
-
(
|
|
42
|
-
(fail-at 0 "cannot read the module ~a" (list1 (host-error why))))
|
|
40
|
+
(let* ([why error] [b (slice u8)] [s datum 0])
|
|
41
|
+
(unless (fs-read-file (datum->string file) (& b) (& why))
|
|
42
|
+
(fail-at 0 "cannot read the module ~a" (list1 (host-error (& why)))))
|
|
43
43
|
(set! s (string->datum (cast string b)))
|
|
44
44
|
(free (-> b items))
|
|
45
45
|
s))
|
|
46
46
|
|
|
47
|
-
(define (host-error [why
|
|
48
|
-
(let ([s (string->datum why)])
|
|
49
|
-
(free
|
|
47
|
+
(define (host-error [why (ptr error)]) -> datum
|
|
48
|
+
(let ([s (string->datum (error-text why))])
|
|
49
|
+
(error-free! why)
|
|
50
50
|
s))
|
|
51
51
|
|
|
52
52
|
;; ---- paths ----
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
(if (and (path-absolute? w s) (not (and w (== (path-root w s) "/"))))
|
|
59
59
|
(set! d (string->datum (path-normal w s)))
|
|
60
60
|
(begin
|
|
61
|
-
(
|
|
61
|
+
(unless (fs-cwd (& cwd) 0) (fail-at 0 "internal: there is no current directory" nil))
|
|
62
62
|
(set! d (string->datum (path-resolved w cwd s)))
|
|
63
63
|
(free (-> cwd bytes))))
|
|
64
64
|
d))
|
|
@@ -351,9 +351,10 @@
|
|
|
351
351
|
name
|
|
352
352
|
(string->datum (path-joined (path-windows?) (datum->string dir) (datum->string name)))))
|
|
353
353
|
|
|
354
|
-
(define (kind-of [path datum]) ->
|
|
354
|
+
(define (kind-of [path datum]) -> fs-kind
|
|
355
355
|
(let ([info fs-info])
|
|
356
|
-
(
|
|
356
|
+
(fs-stat (datum->string path) (& info) 0)
|
|
357
|
+
(-> info kind)))
|
|
357
358
|
|
|
358
359
|
(define (clean-name? [s string]) -> bool
|
|
359
360
|
(let ([start u32 0])
|
|
@@ -486,6 +487,6 @@
|
|
|
486
487
|
(let ([p (datum->string path)] [info fs-info] [found #f])
|
|
487
488
|
(for ([i u32 1]) (and (not found) (<= i (-> p length))) (+= i 1)
|
|
488
489
|
(when (or (== i (-> p length)) (== (@ p i) #\/))
|
|
489
|
-
(set! found (and (
|
|
490
|
+
(set! found (and (fs-lstat (datum->string (file-in dir (substring path 0 i))) (& info) 0)
|
|
490
491
|
(== (-> info kind) fs-link)))))
|
|
491
492
|
found))
|