@salang/sa 0.1.3 → 0.1.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/bin/sa.js +13 -1
- package/package.json +8 -7
- package/sa_std/alloc/layout.sal +12 -0
- package/sa_std/alloc/prelude.sa +1 -0
- package/sa_std/alloc/prelude.sal +1 -0
- package/sa_std/alloc/string.sa +3 -0
- package/sa_std/alloc/vec.sa +684 -0
- package/sa_std/alloc/vec.sal +4 -0
- package/sa_std/any.sa +130 -0
- package/sa_std/any.sal +23 -0
- package/sa_std/array.sa +1876 -0
- package/sa_std/ascii.sa +2 -0
- package/sa_std/ascii.sal +1 -0
- package/sa_std/async.sla +116 -0
- package/sa_std/binary_heap.sa +3003 -0
- package/sa_std/binary_heap.sal +7 -0
- package/sa_std/borrow.sa +171 -0
- package/sa_std/borrow.sal +13 -0
- package/sa_std/btree_map.sa +2210 -0
- package/sa_std/btree_map.sal +11 -0
- package/sa_std/btree_set.sa +1072 -0
- package/sa_std/btree_set.sal +6 -0
- package/sa_std/char.sa +1309 -0
- package/sa_std/char.sal +50 -0
- package/sa_std/cmp.sa +554 -0
- package/sa_std/cmp.sal +14 -0
- package/sa_std/collections/binary_heap.sa +1 -0
- package/sa_std/collections/btree_map.sa +1 -0
- package/sa_std/collections/btree_set.sa +1 -0
- package/sa_std/collections/hashmap.sa +1 -0
- package/sa_std/collections/hashset.sa +1 -0
- package/sa_std/collections/linked_list.sa +1120 -0
- package/sa_std/collections/linked_list.sal +10 -0
- package/sa_std/collections/prelude.sa +7 -0
- package/sa_std/collections/prelude.sal +1 -0
- package/sa_std/collections/vec_deque.sa +1 -0
- package/sa_std/collections.sal +13 -0
- package/sa_std/convert.sa +1115 -0
- package/sa_std/convert.sal +24 -0
- package/sa_std/core/arc.sa +233 -0
- package/sa_std/core/arc.sal +4 -0
- package/sa_std/core/ascii.sa +784 -0
- package/sa_std/core/ascii.sal +34 -0
- package/sa_std/core/bit.sa +41 -0
- package/sa_std/core/box.sa +1 -0
- package/sa_std/core/box.sal +2 -0
- package/sa_std/core/cell.sa +108 -0
- package/sa_std/core/cell.sal +5 -0
- package/sa_std/core/cleanup.sa +26 -0
- package/sa_std/core/control.sa +20 -0
- package/sa_std/core/derive.sa +60 -0
- package/sa_std/core/derive.sal +1 -0
- package/sa_std/core/dispatch.sa +7 -0
- package/sa_std/core/dispatch.sal +5 -0
- package/sa_std/core/future.sa +777 -0
- package/sa_std/core/future.sal +73 -0
- package/sa_std/core/hash.sa +48 -0
- package/sa_std/core/iter.sa +2805 -0
- package/sa_std/core/iter.sal +4 -0
- package/sa_std/core/loop.sa +60 -0
- package/sa_std/core/mem.sa +220 -0
- package/sa_std/core/option.sa +825 -0
- package/sa_std/core/option.sal +11 -0
- package/sa_std/core/panic.sa +23 -0
- package/sa_std/core/panic.sal +12 -0
- package/sa_std/core/prelude.sa +18 -0
- package/sa_std/core/prelude.sal +18 -0
- package/sa_std/core/rc.sa +225 -0
- package/sa_std/core/rc.sal +4 -0
- package/sa_std/core/refcell.sa +283 -0
- package/sa_std/core/refcell.sal +13 -0
- package/sa_std/core/result.sa +708 -0
- package/sa_std/core/result.sal +6 -0
- package/sa_std/core/rust_patterns.sal +295 -0
- package/sa_std/core/sa_core.sa +84 -0
- package/sa_std/core/slice.sa +4021 -0
- package/sa_std/core/slice.sal +7 -0
- package/sa_std/core/task.sa +112 -0
- package/sa_std/core/task.sal +15 -0
- package/sa_std/core/trait_object.sa +26 -0
- package/sa_std/core/trait_object.sal +4 -0
- package/sa_std/core/waker.sa +289 -0
- package/sa_std/core/waker.sal +31 -0
- package/sa_std/core/weak.sa +2 -0
- package/sa_std/core/weak.sal +4 -0
- package/sa_std/cow.sa +3 -0
- package/sa_std/cow.sal +2 -0
- package/sa_std/cstring.sa +3 -0
- package/sa_std/cstring.sal +2 -0
- package/sa_std/default.sa +99 -0
- package/sa_std/duration.sa +3 -0
- package/sa_std/duration.sal +2 -0
- package/sa_std/encoding/json.sa +259 -0
- package/sa_std/encoding/json.sai +54 -0
- package/sa_std/encoding/json.sal +35 -0
- package/sa_std/encoding/prelude.sa +1 -0
- package/sa_std/encoding/prelude.sal +0 -0
- package/sa_std/env.sa +390 -0
- package/sa_std/env.sai +25 -0
- package/sa_std/error.sa +253 -0
- package/sa_std/error.sal +44 -0
- package/sa_std/ffi/cstring.sa +3 -0
- package/sa_std/ffi/cstring.sal +1 -0
- package/sa_std/ffi/prelude.sa +2 -0
- package/sa_std/ffi/prelude.sal +2 -0
- package/sa_std/ffi.sa +635 -0
- package/sa_std/ffi.sal +51 -0
- package/sa_std/fmt.sa +2 -0
- package/sa_std/fmt.sai +18 -0
- package/sa_std/fmt.sal +35 -0
- package/sa_std/fs.sa +1023 -0
- package/sa_std/fs.sai +127 -0
- package/sa_std/fs.sal +51 -0
- package/sa_std/future.sa +2 -0
- package/sa_std/future.sal +1 -0
- package/sa_std/hash.sa +1486 -0
- package/sa_std/hash.sal +13 -0
- package/sa_std/hashmap.sa +1962 -0
- package/sa_std/hashmap.sal +20 -0
- package/sa_std/hashset.sa +1004 -0
- package/sa_std/hashset.sal +18 -0
- package/sa_std/http2.sa +78 -0
- package/sa_std/http2.sai +26 -0
- package/sa_std/http2.sal +36 -0
- package/sa_std/instant.sa +3 -0
- package/sa_std/instant.sal +2 -0
- package/sa_std/io/buf_reader.sa +43 -0
- package/sa_std/io/buf_writer.sa +35 -0
- package/sa_std/io/bufio.sa +4 -0
- package/sa_std/io/bufio.sal +4 -0
- package/sa_std/io/prelude.sa +1 -0
- package/sa_std/io/prelude.sal +1 -0
- package/sa_std/io/print.sa +2 -0
- package/sa_std/io/print.sai +3 -0
- package/sa_std/io.sa +925 -0
- package/sa_std/io.sai +25 -0
- package/sa_std/io.sal +84 -0
- package/sa_std/iter.sa +2 -0
- package/sa_std/iter.sal +1 -0
- package/sa_std/join_handle.sa +3 -0
- package/sa_std/join_handle.sal +2 -0
- package/sa_std/libsa_async.sa +80 -0
- package/sa_std/m_async.sa +137 -0
- package/sa_std/m_async.sal +30 -0
- package/sa_std/m_async.sla +2 -0
- package/sa_std/manually_drop.sa +3 -0
- package/sa_std/manually_drop.sal +2 -0
- package/sa_std/marker/phantom_data.sa +3 -0
- package/sa_std/marker/phantom_data.sal +1 -0
- package/sa_std/marker/prelude.sa +4 -0
- package/sa_std/marker/prelude.sal +4 -0
- package/sa_std/marker.sa +220 -0
- package/sa_std/marker.sal +15 -0
- package/sa_std/math.sa +84 -0
- package/sa_std/math.sai +10 -0
- package/sa_std/mem/manually_drop.sa +3 -0
- package/sa_std/mem/manually_drop.sal +1 -0
- package/sa_std/mem/prelude.sa +2 -0
- package/sa_std/mem/prelude.sal +2 -0
- package/sa_std/mem.sa +564 -0
- package/sa_std/mem.sal +40 -0
- package/sa_std/modstate.sai +19 -0
- package/sa_std/net.sa +4227 -0
- package/sa_std/net.sai +239 -0
- package/sa_std/net.sal +159 -0
- package/sa_std/netx.sa +85 -0
- package/sa_std/netx.sai +11 -0
- package/sa_std/netx.sal +39 -0
- package/sa_std/nonzero.sa +3 -0
- package/sa_std/nonzero.sal +2 -0
- package/sa_std/num/nonzero.sa +3 -0
- package/sa_std/num/nonzero.sal +1 -0
- package/sa_std/num/prelude.sa +3 -0
- package/sa_std/num/prelude.sal +3 -0
- package/sa_std/num.sa +17302 -0
- package/sa_std/num.sai +11 -0
- package/sa_std/num.sal +341 -0
- package/sa_std/ops.sa +1884 -0
- package/sa_std/ops.sal +68 -0
- package/sa_std/option.sa +2 -0
- package/sa_std/option.sal +1 -0
- package/sa_std/os/fd.sa +96 -0
- package/sa_std/os/fd.sai +7 -0
- package/sa_std/os/fd.sal +11 -0
- package/sa_std/os/prelude.sa +2 -0
- package/sa_std/os/prelude.sal +1 -0
- package/sa_std/os/unix_ffi.sa +271 -0
- package/sa_std/panic.sa +1 -0
- package/sa_std/panic.sal +1 -0
- package/sa_std/path.sa +3170 -0
- package/sa_std/path.sal +12 -0
- package/sa_std/phantom_data.sa +3 -0
- package/sa_std/phantom_data.sal +2 -0
- package/sa_std/pin.sa +79 -0
- package/sa_std/pin.sal +5 -0
- package/sa_std/plugin_async.sa +90 -0
- package/sa_std/plugin_async.sal +29 -0
- package/sa_std/plugin_async.sla +4 -0
- package/sa_std/plugin_http_async.sa +46 -0
- package/sa_std/plugin_http_server.sa +61 -0
- package/sa_std/plugin_http_server.sla +2 -0
- package/sa_std/plugin_sqlite.sa +106 -0
- package/sa_std/plugin_sqlite.sla +2 -0
- package/sa_std/prelude.sa +60 -0
- package/sa_std/prelude.sal +55 -0
- package/sa_std/process.sa +916 -0
- package/sa_std/process.sai +57 -0
- package/sa_std/process.sal +27 -0
- package/sa_std/ptr.sa +503 -0
- package/sa_std/ptr.sal +2 -0
- package/sa_std/result.sa +2 -0
- package/sa_std/result.sal +1 -0
- package/sa_std/rust_core.sa +51 -0
- package/sa_std/rust_core.sal +26 -0
- package/sa_std/sa.mod +7 -0
- package/sa_std/sort.sa +156 -0
- package/sa_std/str.sla +13 -0
- package/sa_std/string.sa +12240 -0
- package/sa_std/string.sai +25 -0
- package/sa_std/string.sal +17 -0
- package/sa_std/string_format.sa +269 -0
- package/sa_std/sync/atomic.sa +1500 -0
- package/sa_std/sync/atomic.sal +45 -0
- package/sa_std/sync/barrier.sa +105 -0
- package/sa_std/sync/barrier.sal +7 -0
- package/sa_std/sync/condvar.sa +240 -0
- package/sa_std/sync/condvar.sal +4 -0
- package/sa_std/sync/mpsc.sa +758 -0
- package/sa_std/sync/mpsc.sal +42 -0
- package/sa_std/sync/mpsc_list.sa +255 -0
- package/sa_std/sync/mpsc_list.sal +3 -0
- package/sa_std/sync/mutex.sa +182 -0
- package/sa_std/sync/mutex.sal +7 -0
- package/sa_std/sync/once.sa +371 -0
- package/sa_std/sync/once.sal +31 -0
- package/sa_std/sync/poison.sa +36 -0
- package/sa_std/sync/poison.sal +11 -0
- package/sa_std/sync/prelude.sa +8 -0
- package/sa_std/sync/prelude.sal +7 -0
- package/sa_std/sync/rwlock.sa +369 -0
- package/sa_std/sync/rwlock.sal +13 -0
- package/sa_std/task.sa +2 -0
- package/sa_std/task.sal +1 -0
- package/sa_std/term.sa +2 -0
- package/sa_std/term.sai +10 -0
- package/sa_std/term.sal +33 -0
- package/sa_std/testing/assert.sai +4 -0
- package/sa_std/testing/mock_io.sa +174 -0
- package/sa_std/testing/mock_io.sal +5 -0
- package/sa_std/testing/prelude.sa +2 -0
- package/sa_std/testing/prelude.sal +1 -0
- package/sa_std/text/prelude.sa +1 -0
- package/sa_std/text/prelude.sal +1 -0
- package/sa_std/text/regex.sa +2 -0
- package/sa_std/text/regex.sai +9 -0
- package/sa_std/text/regex.sal +33 -0
- package/sa_std/thread/join_handle.sa +3 -0
- package/sa_std/thread/join_handle.sal +1 -0
- package/sa_std/thread/prelude.sa +4 -0
- package/sa_std/thread/prelude.sal +3 -0
- package/sa_std/thread.sa +160 -0
- package/sa_std/thread.sai +11 -0
- package/sa_std/thread.sal +4 -0
- package/sa_std/thread_local.sa +45 -0
- package/sa_std/thread_local.sai +9 -0
- package/sa_std/time/duration.sa +3 -0
- package/sa_std/time/duration.sal +1 -0
- package/sa_std/time/instant.sa +3 -0
- package/sa_std/time/instant.sal +1 -0
- package/sa_std/time/prelude.sa +4 -0
- package/sa_std/time/prelude.sal +4 -0
- package/sa_std/time.sa +850 -0
- package/sa_std/time.sai +37 -0
- package/sa_std/time.sal +35 -0
- package/sa_std/time.sla +67 -0
- package/sa_std/tls_client.sai +39 -0
- package/sa_std/vec.sa +5754 -0
- package/sa_std/vec.sal +1 -0
- package/sa_std/vec_deque.sa +4925 -0
- package/sa_std/vec_deque.sal +8 -0
- package/sa_std/vec_runtime_macros.sa +11 -0
- package/sa_std/ws_client.sai +57 -0
package/sa_std/borrow.sa
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
@import "borrow.sal"
|
|
2
|
+
@import "core/slice.sal"
|
|
3
|
+
@import "hash.sa"
|
|
4
|
+
|
|
5
|
+
[MACRO] BORROW_REF_NEW %borrow_ref, %ptr
|
|
6
|
+
store %borrow_ref+BorrowRef_ptr, %ptr as ptr
|
|
7
|
+
[END_MACRO]
|
|
8
|
+
|
|
9
|
+
[MACRO] BORROW_REF_GET %out_ptr, %borrow_ref
|
|
10
|
+
%out_ptr = load %borrow_ref+BorrowRef_ptr as ptr
|
|
11
|
+
[END_MACRO]
|
|
12
|
+
|
|
13
|
+
[MACRO] BORROW_MUT_NEW %borrow_mut, %ptr
|
|
14
|
+
store %borrow_mut+BorrowMut_ptr, %ptr as ptr
|
|
15
|
+
[END_MACRO]
|
|
16
|
+
|
|
17
|
+
[MACRO] BORROW_MUT_GET %out_ptr, %borrow_mut
|
|
18
|
+
%out_ptr = load %borrow_mut+BorrowMut_ptr as ptr
|
|
19
|
+
[END_MACRO]
|
|
20
|
+
|
|
21
|
+
[MACRO] BORROW_PTR %out_ptr, %ptr
|
|
22
|
+
%out_ptr = ptr_add %ptr, 0
|
|
23
|
+
[END_MACRO]
|
|
24
|
+
|
|
25
|
+
[MACRO] BORROW_MUT_PTR %out_ptr, %ptr
|
|
26
|
+
%out_ptr = ptr_add %ptr, 0
|
|
27
|
+
[END_MACRO]
|
|
28
|
+
|
|
29
|
+
[MACRO] COW_SLICE_BORROWED %cow, %slice
|
|
30
|
+
__cow_borrowed_ptr_%cow = load %slice+Slice_ptr as ptr
|
|
31
|
+
__cow_borrowed_len_%cow = load %slice+Slice_len as u64
|
|
32
|
+
store %cow+CowSlice_tag, COW_BORROWED as u64
|
|
33
|
+
store %cow+CowSlice_ptr, __cow_borrowed_ptr_%cow as ptr
|
|
34
|
+
store %cow+CowSlice_len, __cow_borrowed_len_%cow as u64
|
|
35
|
+
!__cow_borrowed_len_%cow
|
|
36
|
+
!__cow_borrowed_ptr_%cow
|
|
37
|
+
[END_MACRO]
|
|
38
|
+
|
|
39
|
+
[MACRO] COW_SLICE_OWNED %cow, %slice
|
|
40
|
+
__cow_owned_ptr_%cow = load %slice+Slice_ptr as ptr
|
|
41
|
+
__cow_owned_len_%cow = load %slice+Slice_len as u64
|
|
42
|
+
store %cow+CowSlice_tag, COW_OWNED as u64
|
|
43
|
+
store %cow+CowSlice_ptr, __cow_owned_ptr_%cow as ptr
|
|
44
|
+
store %cow+CowSlice_len, __cow_owned_len_%cow as u64
|
|
45
|
+
!__cow_owned_len_%cow
|
|
46
|
+
!__cow_owned_ptr_%cow
|
|
47
|
+
[END_MACRO]
|
|
48
|
+
|
|
49
|
+
[MACRO] COW_SLICE_IS_BORROWED %out_bool, %cow
|
|
50
|
+
__cow_tag_%out_bool = load %cow+CowSlice_tag as u64
|
|
51
|
+
%out_bool = eq __cow_tag_%out_bool, COW_BORROWED
|
|
52
|
+
!__cow_tag_%out_bool
|
|
53
|
+
[END_MACRO]
|
|
54
|
+
|
|
55
|
+
[MACRO] COW_SLICE_IS_OWNED %out_bool, %cow
|
|
56
|
+
__cow_tag_%out_bool = load %cow+CowSlice_tag as u64
|
|
57
|
+
%out_bool = eq __cow_tag_%out_bool, COW_OWNED
|
|
58
|
+
!__cow_tag_%out_bool
|
|
59
|
+
[END_MACRO]
|
|
60
|
+
|
|
61
|
+
[MACRO] COW_SLICE_AS_SLICE %out_slice, %cow
|
|
62
|
+
__cow_slice_ptr_%out_slice = load %cow+CowSlice_ptr as ptr
|
|
63
|
+
__cow_slice_len_%out_slice = load %cow+CowSlice_len as u64
|
|
64
|
+
store %out_slice+Slice_ptr, __cow_slice_ptr_%out_slice as ptr
|
|
65
|
+
store %out_slice+Slice_len, __cow_slice_len_%out_slice as u64
|
|
66
|
+
!__cow_slice_len_%out_slice
|
|
67
|
+
!__cow_slice_ptr_%out_slice
|
|
68
|
+
[END_MACRO]
|
|
69
|
+
|
|
70
|
+
[MACRO] DEFAULT_HASHER_WRITE_COW_SLICE_U64 %hasher, %cow
|
|
71
|
+
__cow_hash_slice_%hasher = stack_alloc Slice_SIZE
|
|
72
|
+
EXPAND COW_SLICE_AS_SLICE __cow_hash_slice_%hasher, %cow
|
|
73
|
+
EXPAND DEFAULT_HASHER_WRITE_SLICE_U64 %hasher, __cow_hash_slice_%hasher
|
|
74
|
+
[END_MACRO]
|
|
75
|
+
|
|
76
|
+
// Rust method-name alias over DEFAULT_HASHER_WRITE_COW_SLICE_U64.
|
|
77
|
+
[MACRO] DEFAULT_HASHER_WRITE_COW_SLICE %hasher, %cow
|
|
78
|
+
EXPAND DEFAULT_HASHER_WRITE_COW_SLICE_U64 %hasher, %cow
|
|
79
|
+
[END_MACRO]
|
|
80
|
+
|
|
81
|
+
[MACRO] COW_SLICE_HASH_U64 %out_hash, %cow
|
|
82
|
+
__cow_hash_one_slice_%out_hash = stack_alloc Slice_SIZE
|
|
83
|
+
EXPAND COW_SLICE_AS_SLICE __cow_hash_one_slice_%out_hash, %cow
|
|
84
|
+
EXPAND SLICE_HASH_U64 %out_hash, __cow_hash_one_slice_%out_hash
|
|
85
|
+
[END_MACRO]
|
|
86
|
+
|
|
87
|
+
// Rust method-name alias over COW_SLICE_HASH_U64.
|
|
88
|
+
[MACRO] COW_SLICE_HASH %out_hash, %cow
|
|
89
|
+
EXPAND COW_SLICE_HASH_U64 %out_hash, %cow
|
|
90
|
+
[END_MACRO]
|
|
91
|
+
|
|
92
|
+
[MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_COW_SLICE_U64 %out_hash, %builder, %cow
|
|
93
|
+
__build_hash_one_cow_slice_u64_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
|
|
94
|
+
EXPAND BUILD_HASHER_DEFAULT_BUILD __build_hash_one_cow_slice_u64_hasher_%out_hash, %builder
|
|
95
|
+
EXPAND DEFAULT_HASHER_WRITE_COW_SLICE_U64 __build_hash_one_cow_slice_u64_hasher_%out_hash, %cow
|
|
96
|
+
EXPAND DEFAULT_HASHER_FINISH %out_hash, __build_hash_one_cow_slice_u64_hasher_%out_hash
|
|
97
|
+
[END_MACRO]
|
|
98
|
+
|
|
99
|
+
// Rust method-name alias over BUILD_HASHER_DEFAULT_HASH_ONE_COW_SLICE_U64.
|
|
100
|
+
[MACRO] BUILD_HASHER_DEFAULT_HASH_ONE_COW_SLICE %out_hash, %builder, %cow
|
|
101
|
+
EXPAND BUILD_HASHER_DEFAULT_HASH_ONE_COW_SLICE_U64 %out_hash, %builder, %cow
|
|
102
|
+
[END_MACRO]
|
|
103
|
+
|
|
104
|
+
[MACRO] RANDOM_STATE_HASH_ONE_COW_SLICE_U64 %out_hash, %state, %cow
|
|
105
|
+
__random_state_hash_one_cow_slice_u64_hasher_%out_hash = stack_alloc DefaultHasher_SIZE
|
|
106
|
+
EXPAND RANDOM_STATE_BUILD __random_state_hash_one_cow_slice_u64_hasher_%out_hash, %state
|
|
107
|
+
EXPAND DEFAULT_HASHER_WRITE_COW_SLICE_U64 __random_state_hash_one_cow_slice_u64_hasher_%out_hash, %cow
|
|
108
|
+
EXPAND DEFAULT_HASHER_FINISH %out_hash, __random_state_hash_one_cow_slice_u64_hasher_%out_hash
|
|
109
|
+
[END_MACRO]
|
|
110
|
+
|
|
111
|
+
// Rust method-name alias over RANDOM_STATE_HASH_ONE_COW_SLICE_U64.
|
|
112
|
+
[MACRO] RANDOM_STATE_HASH_ONE_COW_SLICE %out_hash, %state, %cow
|
|
113
|
+
EXPAND RANDOM_STATE_HASH_ONE_COW_SLICE_U64 %out_hash, %state, %cow
|
|
114
|
+
[END_MACRO]
|
|
115
|
+
|
|
116
|
+
[MACRO] COW_SLICE_TO_MUT %out_ok, %out_slice, %cow
|
|
117
|
+
EXPAND COW_SLICE_IS_OWNED __cow_to_mut_owned_%out_ok, %cow
|
|
118
|
+
br __cow_to_mut_owned_%out_ok -> L_COW_TO_MUT_OWNED_%out_ok, L_COW_TO_MUT_BORROWED_%out_ok
|
|
119
|
+
|
|
120
|
+
L_COW_TO_MUT_OWNED_%out_ok:
|
|
121
|
+
EXPAND COW_SLICE_AS_SLICE %out_slice, %cow
|
|
122
|
+
%out_ok = add 0, 1
|
|
123
|
+
!__cow_to_mut_owned_%out_ok
|
|
124
|
+
jmp L_COW_TO_MUT_END_%out_ok
|
|
125
|
+
|
|
126
|
+
L_COW_TO_MUT_BORROWED_%out_ok:
|
|
127
|
+
store %out_slice+Slice_ptr, 0 as ptr
|
|
128
|
+
store %out_slice+Slice_len, 0 as u64
|
|
129
|
+
%out_ok = add 0, 0
|
|
130
|
+
!__cow_to_mut_owned_%out_ok
|
|
131
|
+
|
|
132
|
+
L_COW_TO_MUT_END_%out_ok:
|
|
133
|
+
[END_MACRO]
|
|
134
|
+
|
|
135
|
+
[MACRO] COW_SLICE_INTO_OWNED %out_ok, %out_slice, %cow
|
|
136
|
+
EXPAND COW_SLICE_TO_MUT %out_ok, %out_slice, %cow
|
|
137
|
+
[END_MACRO]
|
|
138
|
+
|
|
139
|
+
[MACRO] COW_SLICE_LEN %out_len, %cow
|
|
140
|
+
%out_len = load %cow+CowSlice_len as u64
|
|
141
|
+
[END_MACRO]
|
|
142
|
+
|
|
143
|
+
[MACRO] COW_SLICE_PTR %out_ptr, %cow
|
|
144
|
+
%out_ptr = load %cow+CowSlice_ptr as ptr
|
|
145
|
+
[END_MACRO]
|
|
146
|
+
|
|
147
|
+
// Clone the Cow header (shared view). Models supportable Clone for concrete
|
|
148
|
+
// CowSlice without generic ToOwned allocation for borrowed→owned upgrade.
|
|
149
|
+
[MACRO] COW_SLICE_CLONE %out_cow, %cow
|
|
150
|
+
__cow_c_tag_%out_cow = load %cow+CowSlice_tag as u64
|
|
151
|
+
__cow_c_ptr_%out_cow = load %cow+CowSlice_ptr as ptr
|
|
152
|
+
__cow_c_len_%out_cow = load %cow+CowSlice_len as u64
|
|
153
|
+
store %out_cow+CowSlice_tag, __cow_c_tag_%out_cow as u64
|
|
154
|
+
store %out_cow+CowSlice_ptr, __cow_c_ptr_%out_cow as ptr
|
|
155
|
+
store %out_cow+CowSlice_len, __cow_c_len_%out_cow as u64
|
|
156
|
+
!__cow_c_len_%out_cow
|
|
157
|
+
!__cow_c_ptr_%out_cow
|
|
158
|
+
!__cow_c_tag_%out_cow
|
|
159
|
+
[END_MACRO]
|
|
160
|
+
|
|
161
|
+
[MACRO] COW_SLICE_EQ_U64 %out_bool, %left_cow, %right_cow
|
|
162
|
+
__cow_eq_l_%out_bool = stack_alloc Slice_SIZE
|
|
163
|
+
__cow_eq_r_%out_bool = stack_alloc Slice_SIZE
|
|
164
|
+
EXPAND COW_SLICE_AS_SLICE __cow_eq_l_%out_bool, %left_cow
|
|
165
|
+
EXPAND COW_SLICE_AS_SLICE __cow_eq_r_%out_bool, %right_cow
|
|
166
|
+
EXPAND SLICE_EQ_U64 %out_bool, __cow_eq_l_%out_bool, __cow_eq_r_%out_bool
|
|
167
|
+
[END_MACRO]
|
|
168
|
+
|
|
169
|
+
[MACRO] COW_SLICE_EQ %out_bool, %left_cow, %right_cow
|
|
170
|
+
EXPAND COW_SLICE_EQ_U64 %out_bool, %left_cow, %right_cow
|
|
171
|
+
[END_MACRO]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#def BorrowRef_SIZE = 8
|
|
2
|
+
#def BorrowRef_ptr = +0
|
|
3
|
+
|
|
4
|
+
#def BorrowMut_SIZE = 8
|
|
5
|
+
#def BorrowMut_ptr = +0
|
|
6
|
+
|
|
7
|
+
#def CowSlice_SIZE = 24
|
|
8
|
+
#def CowSlice_tag = +0
|
|
9
|
+
#def CowSlice_ptr = +8
|
|
10
|
+
#def CowSlice_len = +16
|
|
11
|
+
|
|
12
|
+
#def COW_BORROWED = 0
|
|
13
|
+
#def COW_OWNED = 1
|