@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
|
@@ -0,0 +1,825 @@
|
|
|
1
|
+
@import "option.sal"
|
|
2
|
+
@import "result.sal"
|
|
3
|
+
@import "slice.sal"
|
|
4
|
+
@import "panic.sa"
|
|
5
|
+
|
|
6
|
+
@const OPTION_UNWRAP_PANIC = utf8:"called Option::unwrap() on a None value"
|
|
7
|
+
|
|
8
|
+
[MACRO] OPTION_NEW_NONE %out_opt
|
|
9
|
+
%out_opt = alloc Option_SIZE
|
|
10
|
+
store %out_opt+Option_tag, Option_NONE as u64
|
|
11
|
+
store %out_opt+Option_value, 0 as u64
|
|
12
|
+
[END_MACRO]
|
|
13
|
+
|
|
14
|
+
[MACRO] OPTION_NEW_SOME %out_opt, %value
|
|
15
|
+
%out_opt = alloc Option_SIZE
|
|
16
|
+
store %out_opt+Option_tag, Option_SOME as u64
|
|
17
|
+
store %out_opt+Option_value, %value as u64
|
|
18
|
+
[END_MACRO]
|
|
19
|
+
|
|
20
|
+
// Rust constructor-name bare alias over OPTION_NEW_SOME.
|
|
21
|
+
[MACRO] OPTION_SOME %out_opt, %value
|
|
22
|
+
EXPAND OPTION_NEW_SOME %out_opt, %value
|
|
23
|
+
[END_MACRO]
|
|
24
|
+
|
|
25
|
+
// Rust constructor-name bare alias over OPTION_NEW_NONE.
|
|
26
|
+
[MACRO] OPTION_NONE %out_opt
|
|
27
|
+
EXPAND OPTION_NEW_NONE %out_opt
|
|
28
|
+
[END_MACRO]
|
|
29
|
+
|
|
30
|
+
[MACRO] OPTION_IS_SOME %out_bool, %opt_reg
|
|
31
|
+
__option_tag_%out_bool = load %opt_reg+Option_tag as u64
|
|
32
|
+
%out_bool = eq __option_tag_%out_bool, Option_SOME
|
|
33
|
+
!__option_tag_%out_bool
|
|
34
|
+
[END_MACRO]
|
|
35
|
+
|
|
36
|
+
[MACRO] OPTION_IS_NONE %out_bool, %opt_reg
|
|
37
|
+
__option_tag_%out_bool = load %opt_reg+Option_tag as u64
|
|
38
|
+
%out_bool = eq __option_tag_%out_bool, Option_NONE
|
|
39
|
+
!__option_tag_%out_bool
|
|
40
|
+
[END_MACRO]
|
|
41
|
+
|
|
42
|
+
[MACRO] OPTION_GET %out_value, %opt_reg
|
|
43
|
+
%out_value = load %opt_reg+Option_value as u64
|
|
44
|
+
[END_MACRO]
|
|
45
|
+
|
|
46
|
+
[MACRO] OPTION_AS_REF %out_opt, %opt_reg
|
|
47
|
+
%out_opt = alloc Option_SIZE
|
|
48
|
+
__option_as_ref_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
49
|
+
__option_as_ref_some_%out_opt = eq __option_as_ref_tag_%out_opt, Option_SOME
|
|
50
|
+
br __option_as_ref_some_%out_opt -> L_OPTION_AS_REF_SOME_%out_opt, L_OPTION_AS_REF_NONE_%out_opt
|
|
51
|
+
L_OPTION_AS_REF_SOME_%out_opt:
|
|
52
|
+
__option_as_ref_ptr_%out_opt = ptr_add %opt_reg, Option_value
|
|
53
|
+
store %out_opt+Option_tag, Option_SOME as u64
|
|
54
|
+
store %out_opt+Option_value, __option_as_ref_ptr_%out_opt as ptr
|
|
55
|
+
!__option_as_ref_ptr_%out_opt
|
|
56
|
+
!__option_as_ref_some_%out_opt
|
|
57
|
+
!__option_as_ref_tag_%out_opt
|
|
58
|
+
jmp L_OPTION_AS_REF_END_%out_opt
|
|
59
|
+
L_OPTION_AS_REF_NONE_%out_opt:
|
|
60
|
+
store %out_opt+Option_tag, Option_NONE as u64
|
|
61
|
+
store %out_opt+Option_value, 0 as u64
|
|
62
|
+
!__option_as_ref_some_%out_opt
|
|
63
|
+
!__option_as_ref_tag_%out_opt
|
|
64
|
+
L_OPTION_AS_REF_END_%out_opt:
|
|
65
|
+
[END_MACRO]
|
|
66
|
+
|
|
67
|
+
[MACRO] OPTION_AS_MUT %out_opt, %opt_reg
|
|
68
|
+
EXPAND OPTION_AS_REF %out_opt, %opt_reg
|
|
69
|
+
[END_MACRO]
|
|
70
|
+
|
|
71
|
+
[MACRO] OPTION_COPIED_U64 %out_opt, %opt_reg
|
|
72
|
+
%out_opt = alloc Option_SIZE
|
|
73
|
+
__option_copied_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
74
|
+
__option_copied_some_%out_opt = eq __option_copied_tag_%out_opt, Option_SOME
|
|
75
|
+
br __option_copied_some_%out_opt -> L_OPTION_COPIED_SOME_%out_opt, L_OPTION_COPIED_NONE_%out_opt
|
|
76
|
+
L_OPTION_COPIED_SOME_%out_opt:
|
|
77
|
+
__option_copied_ptr_%out_opt = load %opt_reg+Option_value as ptr
|
|
78
|
+
__option_copied_value_%out_opt = load __option_copied_ptr_%out_opt+0 as u64
|
|
79
|
+
store %out_opt+Option_tag, Option_SOME as u64
|
|
80
|
+
store %out_opt+Option_value, __option_copied_value_%out_opt as u64
|
|
81
|
+
!__option_copied_value_%out_opt
|
|
82
|
+
!__option_copied_ptr_%out_opt
|
|
83
|
+
!__option_copied_some_%out_opt
|
|
84
|
+
!__option_copied_tag_%out_opt
|
|
85
|
+
jmp L_OPTION_COPIED_END_%out_opt
|
|
86
|
+
L_OPTION_COPIED_NONE_%out_opt:
|
|
87
|
+
store %out_opt+Option_tag, Option_NONE as u64
|
|
88
|
+
store %out_opt+Option_value, 0 as u64
|
|
89
|
+
!__option_copied_some_%out_opt
|
|
90
|
+
!__option_copied_tag_%out_opt
|
|
91
|
+
L_OPTION_COPIED_END_%out_opt:
|
|
92
|
+
[END_MACRO]
|
|
93
|
+
|
|
94
|
+
// Rust method-name alias over OPTION_COPIED_U64.
|
|
95
|
+
[MACRO] OPTION_COPIED %out_opt, %opt_reg
|
|
96
|
+
EXPAND OPTION_COPIED_U64 %out_opt, %opt_reg
|
|
97
|
+
[END_MACRO]
|
|
98
|
+
|
|
99
|
+
[MACRO] OPTION_CLONED_U64 %out_opt, %opt_reg
|
|
100
|
+
EXPAND OPTION_COPIED_U64 %out_opt, %opt_reg
|
|
101
|
+
[END_MACRO]
|
|
102
|
+
|
|
103
|
+
// Rust method-name alias over OPTION_CLONED_U64.
|
|
104
|
+
[MACRO] OPTION_CLONED %out_opt, %opt_reg
|
|
105
|
+
EXPAND OPTION_CLONED_U64 %out_opt, %opt_reg
|
|
106
|
+
[END_MACRO]
|
|
107
|
+
|
|
108
|
+
[MACRO] OPTION_AS_SLICE %out_slice, %opt_reg
|
|
109
|
+
%out_slice = alloc Slice_SIZE
|
|
110
|
+
__option_slice_tag_%out_slice = load %opt_reg+Option_tag as u64
|
|
111
|
+
__option_slice_len_%out_slice = eq __option_slice_tag_%out_slice, Option_SOME
|
|
112
|
+
__option_slice_ptr_%out_slice = ptr_add %opt_reg, Option_value
|
|
113
|
+
store %out_slice+Slice_ptr, __option_slice_ptr_%out_slice as ptr
|
|
114
|
+
store %out_slice+Slice_len, __option_slice_len_%out_slice as u64
|
|
115
|
+
!__option_slice_ptr_%out_slice
|
|
116
|
+
!__option_slice_len_%out_slice
|
|
117
|
+
!__option_slice_tag_%out_slice
|
|
118
|
+
[END_MACRO]
|
|
119
|
+
|
|
120
|
+
[MACRO] OPTION_AS_MUT_SLICE %out_slice, %opt_reg
|
|
121
|
+
EXPAND OPTION_AS_SLICE %out_slice, %opt_reg
|
|
122
|
+
[END_MACRO]
|
|
123
|
+
|
|
124
|
+
[MACRO] OPTION_COPY %out_opt, %opt_reg
|
|
125
|
+
%out_opt = alloc Option_SIZE
|
|
126
|
+
__option_copy_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
127
|
+
__option_copy_value_%out_opt = load %opt_reg+Option_value as u64
|
|
128
|
+
store %out_opt+Option_tag, __option_copy_tag_%out_opt as u64
|
|
129
|
+
store %out_opt+Option_value, __option_copy_value_%out_opt as u64
|
|
130
|
+
!__option_copy_value_%out_opt
|
|
131
|
+
!__option_copy_tag_%out_opt
|
|
132
|
+
[END_MACRO]
|
|
133
|
+
|
|
134
|
+
[MACRO] OPTION_CONTAINS_U64 %out_bool, %opt_reg, %value
|
|
135
|
+
__option_contains_tag_%out_bool = load %opt_reg+Option_tag as u64
|
|
136
|
+
__option_contains_some_%out_bool = eq __option_contains_tag_%out_bool, Option_SOME
|
|
137
|
+
br __option_contains_some_%out_bool -> L_OPTION_CONTAINS_SOME_%out_bool, L_OPTION_CONTAINS_NONE_%out_bool
|
|
138
|
+
L_OPTION_CONTAINS_SOME_%out_bool:
|
|
139
|
+
__option_contains_value_%out_bool = load %opt_reg+Option_value as u64
|
|
140
|
+
%out_bool = eq __option_contains_value_%out_bool, %value
|
|
141
|
+
!__option_contains_value_%out_bool
|
|
142
|
+
!__option_contains_some_%out_bool
|
|
143
|
+
!__option_contains_tag_%out_bool
|
|
144
|
+
jmp L_OPTION_CONTAINS_END_%out_bool
|
|
145
|
+
L_OPTION_CONTAINS_NONE_%out_bool:
|
|
146
|
+
%out_bool = add 0, 0
|
|
147
|
+
!__option_contains_some_%out_bool
|
|
148
|
+
!__option_contains_tag_%out_bool
|
|
149
|
+
L_OPTION_CONTAINS_END_%out_bool:
|
|
150
|
+
[END_MACRO]
|
|
151
|
+
|
|
152
|
+
// Rust method-name alias over OPTION_CONTAINS_U64.
|
|
153
|
+
[MACRO] OPTION_CONTAINS %out_bool, %opt_reg, %value
|
|
154
|
+
EXPAND OPTION_CONTAINS_U64 %out_bool, %opt_reg, %value
|
|
155
|
+
[END_MACRO]
|
|
156
|
+
|
|
157
|
+
[MACRO] OPTION_IS_SOME_AND %out_bool, %opt_reg, %pred_fn
|
|
158
|
+
__option_some_and_tag_%out_bool = load %opt_reg+Option_tag as u64
|
|
159
|
+
__option_some_and_some_%out_bool = eq __option_some_and_tag_%out_bool, Option_SOME
|
|
160
|
+
br __option_some_and_some_%out_bool -> L_OPTION_SOME_AND_SOME_%out_bool, L_OPTION_SOME_AND_NONE_%out_bool
|
|
161
|
+
L_OPTION_SOME_AND_SOME_%out_bool:
|
|
162
|
+
__option_some_and_value_%out_bool = load %opt_reg+Option_value as u64
|
|
163
|
+
__option_some_and_pred_%out_bool = call %pred_fn(__option_some_and_value_%out_bool)
|
|
164
|
+
%out_bool = ne __option_some_and_pred_%out_bool, 0
|
|
165
|
+
!__option_some_and_pred_%out_bool
|
|
166
|
+
!__option_some_and_value_%out_bool
|
|
167
|
+
!__option_some_and_some_%out_bool
|
|
168
|
+
!__option_some_and_tag_%out_bool
|
|
169
|
+
jmp L_OPTION_SOME_AND_END_%out_bool
|
|
170
|
+
L_OPTION_SOME_AND_NONE_%out_bool:
|
|
171
|
+
%out_bool = add 0, 0
|
|
172
|
+
!__option_some_and_some_%out_bool
|
|
173
|
+
!__option_some_and_tag_%out_bool
|
|
174
|
+
L_OPTION_SOME_AND_END_%out_bool:
|
|
175
|
+
[END_MACRO]
|
|
176
|
+
|
|
177
|
+
[MACRO] OPTION_IS_NONE_OR %out_bool, %opt_reg, %pred_fn
|
|
178
|
+
__option_none_or_tag_%out_bool = load %opt_reg+Option_tag as u64
|
|
179
|
+
__option_none_or_some_%out_bool = eq __option_none_or_tag_%out_bool, Option_SOME
|
|
180
|
+
br __option_none_or_some_%out_bool -> L_OPTION_NONE_OR_SOME_%out_bool, L_OPTION_NONE_OR_NONE_%out_bool
|
|
181
|
+
L_OPTION_NONE_OR_SOME_%out_bool:
|
|
182
|
+
__option_none_or_value_%out_bool = load %opt_reg+Option_value as u64
|
|
183
|
+
__option_none_or_pred_%out_bool = call %pred_fn(__option_none_or_value_%out_bool)
|
|
184
|
+
%out_bool = ne __option_none_or_pred_%out_bool, 0
|
|
185
|
+
!__option_none_or_pred_%out_bool
|
|
186
|
+
!__option_none_or_value_%out_bool
|
|
187
|
+
!__option_none_or_some_%out_bool
|
|
188
|
+
!__option_none_or_tag_%out_bool
|
|
189
|
+
jmp L_OPTION_NONE_OR_END_%out_bool
|
|
190
|
+
L_OPTION_NONE_OR_NONE_%out_bool:
|
|
191
|
+
%out_bool = add 0, 1
|
|
192
|
+
!__option_none_or_some_%out_bool
|
|
193
|
+
!__option_none_or_tag_%out_bool
|
|
194
|
+
L_OPTION_NONE_OR_END_%out_bool:
|
|
195
|
+
[END_MACRO]
|
|
196
|
+
|
|
197
|
+
[MACRO] OPTION_MAP %out_opt, %opt_reg, %map_fn
|
|
198
|
+
%out_opt = alloc Option_SIZE
|
|
199
|
+
__option_map_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
200
|
+
__option_map_some_%out_opt = eq __option_map_tag_%out_opt, Option_SOME
|
|
201
|
+
br __option_map_some_%out_opt -> L_OPTION_MAP_SOME_%out_opt, L_OPTION_MAP_NONE_%out_opt
|
|
202
|
+
L_OPTION_MAP_SOME_%out_opt:
|
|
203
|
+
__option_map_value_%out_opt = load %opt_reg+Option_value as u64
|
|
204
|
+
__option_map_mapped_%out_opt = call %map_fn(__option_map_value_%out_opt)
|
|
205
|
+
store %out_opt+Option_tag, Option_SOME as u64
|
|
206
|
+
store %out_opt+Option_value, __option_map_mapped_%out_opt as u64
|
|
207
|
+
!__option_map_mapped_%out_opt
|
|
208
|
+
!__option_map_value_%out_opt
|
|
209
|
+
!__option_map_some_%out_opt
|
|
210
|
+
!__option_map_tag_%out_opt
|
|
211
|
+
jmp L_OPTION_MAP_END_%out_opt
|
|
212
|
+
L_OPTION_MAP_NONE_%out_opt:
|
|
213
|
+
store %out_opt+Option_tag, Option_NONE as u64
|
|
214
|
+
store %out_opt+Option_value, 0 as u64
|
|
215
|
+
!__option_map_some_%out_opt
|
|
216
|
+
!__option_map_tag_%out_opt
|
|
217
|
+
L_OPTION_MAP_END_%out_opt:
|
|
218
|
+
[END_MACRO]
|
|
219
|
+
|
|
220
|
+
[MACRO] OPTION_INSPECT %out_opt, %opt_reg, %inspect_fn
|
|
221
|
+
__option_inspect_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
222
|
+
__option_inspect_some_%out_opt = eq __option_inspect_tag_%out_opt, Option_SOME
|
|
223
|
+
br __option_inspect_some_%out_opt -> L_OPTION_INSPECT_SOME_%out_opt, L_OPTION_INSPECT_NONE_%out_opt
|
|
224
|
+
L_OPTION_INSPECT_SOME_%out_opt:
|
|
225
|
+
__option_inspect_value_%out_opt = load %opt_reg+Option_value as u64
|
|
226
|
+
__option_inspect_ignored_%out_opt = call %inspect_fn(__option_inspect_value_%out_opt)
|
|
227
|
+
!__option_inspect_ignored_%out_opt
|
|
228
|
+
!__option_inspect_value_%out_opt
|
|
229
|
+
jmp L_OPTION_INSPECT_COPY_%out_opt
|
|
230
|
+
L_OPTION_INSPECT_NONE_%out_opt:
|
|
231
|
+
jmp L_OPTION_INSPECT_COPY_%out_opt
|
|
232
|
+
L_OPTION_INSPECT_COPY_%out_opt:
|
|
233
|
+
EXPAND OPTION_COPY %out_opt, %opt_reg
|
|
234
|
+
!__option_inspect_some_%out_opt
|
|
235
|
+
!__option_inspect_tag_%out_opt
|
|
236
|
+
[END_MACRO]
|
|
237
|
+
|
|
238
|
+
[MACRO] OPTION_FILTER %out_opt, %opt_reg, %pred_fn
|
|
239
|
+
%out_opt = alloc Option_SIZE
|
|
240
|
+
__option_filter_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
241
|
+
__option_filter_some_%out_opt = eq __option_filter_tag_%out_opt, Option_SOME
|
|
242
|
+
br __option_filter_some_%out_opt -> L_OPTION_FILTER_CHECK_%out_opt, L_OPTION_FILTER_NONE_%out_opt
|
|
243
|
+
L_OPTION_FILTER_CHECK_%out_opt:
|
|
244
|
+
__option_filter_value_%out_opt = load %opt_reg+Option_value as u64
|
|
245
|
+
__option_filter_pred_%out_opt = call %pred_fn(__option_filter_value_%out_opt)
|
|
246
|
+
__option_filter_keep_%out_opt = ne __option_filter_pred_%out_opt, 0
|
|
247
|
+
br __option_filter_keep_%out_opt -> L_OPTION_FILTER_KEEP_%out_opt, L_OPTION_FILTER_DROP_%out_opt
|
|
248
|
+
L_OPTION_FILTER_KEEP_%out_opt:
|
|
249
|
+
store %out_opt+Option_tag, Option_SOME as u64
|
|
250
|
+
store %out_opt+Option_value, __option_filter_value_%out_opt as u64
|
|
251
|
+
jmp L_OPTION_FILTER_CHECK_DONE_%out_opt
|
|
252
|
+
L_OPTION_FILTER_DROP_%out_opt:
|
|
253
|
+
store %out_opt+Option_tag, Option_NONE as u64
|
|
254
|
+
store %out_opt+Option_value, 0 as u64
|
|
255
|
+
jmp L_OPTION_FILTER_CHECK_DONE_%out_opt
|
|
256
|
+
L_OPTION_FILTER_CHECK_DONE_%out_opt:
|
|
257
|
+
!__option_filter_keep_%out_opt
|
|
258
|
+
!__option_filter_pred_%out_opt
|
|
259
|
+
!__option_filter_value_%out_opt
|
|
260
|
+
!__option_filter_some_%out_opt
|
|
261
|
+
!__option_filter_tag_%out_opt
|
|
262
|
+
jmp L_OPTION_FILTER_END_%out_opt
|
|
263
|
+
L_OPTION_FILTER_NONE_%out_opt:
|
|
264
|
+
store %out_opt+Option_tag, Option_NONE as u64
|
|
265
|
+
store %out_opt+Option_value, 0 as u64
|
|
266
|
+
!__option_filter_some_%out_opt
|
|
267
|
+
!__option_filter_tag_%out_opt
|
|
268
|
+
L_OPTION_FILTER_END_%out_opt:
|
|
269
|
+
[END_MACRO]
|
|
270
|
+
|
|
271
|
+
[MACRO] OPTION_AND %out_opt, %opt_reg, %other_opt
|
|
272
|
+
__option_and_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
273
|
+
__option_and_some_%out_opt = eq __option_and_tag_%out_opt, Option_SOME
|
|
274
|
+
br __option_and_some_%out_opt -> L_OPTION_AND_OTHER_%out_opt, L_OPTION_AND_NONE_%out_opt
|
|
275
|
+
L_OPTION_AND_OTHER_%out_opt:
|
|
276
|
+
EXPAND OPTION_COPY %out_opt, %other_opt
|
|
277
|
+
!__option_and_some_%out_opt
|
|
278
|
+
!__option_and_tag_%out_opt
|
|
279
|
+
jmp L_OPTION_AND_END_%out_opt
|
|
280
|
+
L_OPTION_AND_NONE_%out_opt:
|
|
281
|
+
EXPAND OPTION_NEW_NONE %out_opt
|
|
282
|
+
!__option_and_some_%out_opt
|
|
283
|
+
!__option_and_tag_%out_opt
|
|
284
|
+
L_OPTION_AND_END_%out_opt:
|
|
285
|
+
[END_MACRO]
|
|
286
|
+
|
|
287
|
+
[MACRO] OPTION_OR %out_opt, %opt_reg, %other_opt
|
|
288
|
+
__option_or_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
289
|
+
__option_or_some_%out_opt = eq __option_or_tag_%out_opt, Option_SOME
|
|
290
|
+
br __option_or_some_%out_opt -> L_OPTION_OR_SELF_%out_opt, L_OPTION_OR_OTHER_%out_opt
|
|
291
|
+
L_OPTION_OR_SELF_%out_opt:
|
|
292
|
+
EXPAND OPTION_COPY %out_opt, %opt_reg
|
|
293
|
+
!__option_or_some_%out_opt
|
|
294
|
+
!__option_or_tag_%out_opt
|
|
295
|
+
jmp L_OPTION_OR_END_%out_opt
|
|
296
|
+
L_OPTION_OR_OTHER_%out_opt:
|
|
297
|
+
EXPAND OPTION_COPY %out_opt, %other_opt
|
|
298
|
+
!__option_or_some_%out_opt
|
|
299
|
+
!__option_or_tag_%out_opt
|
|
300
|
+
L_OPTION_OR_END_%out_opt:
|
|
301
|
+
[END_MACRO]
|
|
302
|
+
|
|
303
|
+
[MACRO] OPTION_XOR %out_opt, %left_opt, %right_opt
|
|
304
|
+
%out_opt = alloc Option_SIZE
|
|
305
|
+
__option_xor_left_tag_%out_opt = load %left_opt+Option_tag as u64
|
|
306
|
+
__option_xor_right_tag_%out_opt = load %right_opt+Option_tag as u64
|
|
307
|
+
__option_xor_left_some_%out_opt = eq __option_xor_left_tag_%out_opt, Option_SOME
|
|
308
|
+
__option_xor_right_some_%out_opt = eq __option_xor_right_tag_%out_opt, Option_SOME
|
|
309
|
+
__option_xor_one_%out_opt = xor __option_xor_left_some_%out_opt, __option_xor_right_some_%out_opt
|
|
310
|
+
br __option_xor_one_%out_opt -> L_OPTION_XOR_SOME_%out_opt, L_OPTION_XOR_NONE_%out_opt
|
|
311
|
+
L_OPTION_XOR_SOME_%out_opt:
|
|
312
|
+
br __option_xor_left_some_%out_opt -> L_OPTION_XOR_LEFT_%out_opt, L_OPTION_XOR_RIGHT_%out_opt
|
|
313
|
+
L_OPTION_XOR_LEFT_%out_opt:
|
|
314
|
+
__option_xor_left_value_%out_opt = load %left_opt+Option_value as u64
|
|
315
|
+
store %out_opt+Option_tag, Option_SOME as u64
|
|
316
|
+
store %out_opt+Option_value, __option_xor_left_value_%out_opt as u64
|
|
317
|
+
!__option_xor_left_value_%out_opt
|
|
318
|
+
jmp L_OPTION_XOR_SOME_DONE_%out_opt
|
|
319
|
+
L_OPTION_XOR_RIGHT_%out_opt:
|
|
320
|
+
__option_xor_right_value_%out_opt = load %right_opt+Option_value as u64
|
|
321
|
+
store %out_opt+Option_tag, Option_SOME as u64
|
|
322
|
+
store %out_opt+Option_value, __option_xor_right_value_%out_opt as u64
|
|
323
|
+
!__option_xor_right_value_%out_opt
|
|
324
|
+
L_OPTION_XOR_SOME_DONE_%out_opt:
|
|
325
|
+
jmp L_OPTION_XOR_DONE_%out_opt
|
|
326
|
+
L_OPTION_XOR_NONE_%out_opt:
|
|
327
|
+
store %out_opt+Option_tag, Option_NONE as u64
|
|
328
|
+
store %out_opt+Option_value, 0 as u64
|
|
329
|
+
L_OPTION_XOR_DONE_%out_opt:
|
|
330
|
+
!__option_xor_one_%out_opt
|
|
331
|
+
!__option_xor_right_some_%out_opt
|
|
332
|
+
!__option_xor_left_some_%out_opt
|
|
333
|
+
!__option_xor_right_tag_%out_opt
|
|
334
|
+
!__option_xor_left_tag_%out_opt
|
|
335
|
+
[END_MACRO]
|
|
336
|
+
|
|
337
|
+
[MACRO] OPTION_AND_THEN %out_opt, %opt_reg, %then_fn
|
|
338
|
+
__option_then_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
339
|
+
__option_then_some_%out_opt = eq __option_then_tag_%out_opt, Option_SOME
|
|
340
|
+
br __option_then_some_%out_opt -> L_OPTION_AND_THEN_SOME_%out_opt, L_OPTION_AND_THEN_NONE_%out_opt
|
|
341
|
+
L_OPTION_AND_THEN_SOME_%out_opt:
|
|
342
|
+
__option_then_value_%out_opt = load %opt_reg+Option_value as u64
|
|
343
|
+
%out_opt = call %then_fn(__option_then_value_%out_opt)
|
|
344
|
+
!__option_then_value_%out_opt
|
|
345
|
+
!__option_then_some_%out_opt
|
|
346
|
+
!__option_then_tag_%out_opt
|
|
347
|
+
jmp L_OPTION_AND_THEN_END_%out_opt
|
|
348
|
+
L_OPTION_AND_THEN_NONE_%out_opt:
|
|
349
|
+
EXPAND OPTION_NEW_NONE %out_opt
|
|
350
|
+
!__option_then_some_%out_opt
|
|
351
|
+
!__option_then_tag_%out_opt
|
|
352
|
+
L_OPTION_AND_THEN_END_%out_opt:
|
|
353
|
+
[END_MACRO]
|
|
354
|
+
|
|
355
|
+
[MACRO] OPTION_OR_ELSE %out_opt, %opt_reg, %else_fn
|
|
356
|
+
__option_or_else_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
357
|
+
__option_or_else_some_%out_opt = eq __option_or_else_tag_%out_opt, Option_SOME
|
|
358
|
+
br __option_or_else_some_%out_opt -> L_OPTION_OR_ELSE_SELF_%out_opt, L_OPTION_OR_ELSE_DEFAULT_%out_opt
|
|
359
|
+
L_OPTION_OR_ELSE_SELF_%out_opt:
|
|
360
|
+
EXPAND OPTION_COPY %out_opt, %opt_reg
|
|
361
|
+
!__option_or_else_some_%out_opt
|
|
362
|
+
!__option_or_else_tag_%out_opt
|
|
363
|
+
jmp L_OPTION_OR_ELSE_END_%out_opt
|
|
364
|
+
L_OPTION_OR_ELSE_DEFAULT_%out_opt:
|
|
365
|
+
%out_opt = call %else_fn()
|
|
366
|
+
!__option_or_else_some_%out_opt
|
|
367
|
+
!__option_or_else_tag_%out_opt
|
|
368
|
+
L_OPTION_OR_ELSE_END_%out_opt:
|
|
369
|
+
[END_MACRO]
|
|
370
|
+
|
|
371
|
+
[MACRO] OPTION_OK_OR %out_res, %opt_reg, %err_value
|
|
372
|
+
%out_res = alloc Result_SIZE
|
|
373
|
+
__option_ok_or_tag_%out_res = load %opt_reg+Option_tag as u64
|
|
374
|
+
__option_ok_or_some_%out_res = eq __option_ok_or_tag_%out_res, Option_SOME
|
|
375
|
+
br __option_ok_or_some_%out_res -> L_OPTION_OK_OR_SOME_%out_res, L_OPTION_OK_OR_NONE_%out_res
|
|
376
|
+
L_OPTION_OK_OR_SOME_%out_res:
|
|
377
|
+
__option_ok_or_value_%out_res = load %opt_reg+Option_value as u64
|
|
378
|
+
store %out_res+Result_tag, Result_OK as u64
|
|
379
|
+
store %out_res+Result_ok, __option_ok_or_value_%out_res as u64
|
|
380
|
+
store %out_res+Result_err, 0 as u64
|
|
381
|
+
!__option_ok_or_value_%out_res
|
|
382
|
+
!__option_ok_or_some_%out_res
|
|
383
|
+
!__option_ok_or_tag_%out_res
|
|
384
|
+
jmp L_OPTION_OK_OR_END_%out_res
|
|
385
|
+
L_OPTION_OK_OR_NONE_%out_res:
|
|
386
|
+
store %out_res+Result_tag, Result_ERR as u64
|
|
387
|
+
store %out_res+Result_ok, 0 as u64
|
|
388
|
+
store %out_res+Result_err, %err_value as u64
|
|
389
|
+
!__option_ok_or_some_%out_res
|
|
390
|
+
!__option_ok_or_tag_%out_res
|
|
391
|
+
L_OPTION_OK_OR_END_%out_res:
|
|
392
|
+
[END_MACRO]
|
|
393
|
+
|
|
394
|
+
[MACRO] OPTION_OK_OR_ELSE %out_res, %opt_reg, %err_fn
|
|
395
|
+
%out_res = alloc Result_SIZE
|
|
396
|
+
__option_ok_or_else_tag_%out_res = load %opt_reg+Option_tag as u64
|
|
397
|
+
__option_ok_or_else_some_%out_res = eq __option_ok_or_else_tag_%out_res, Option_SOME
|
|
398
|
+
br __option_ok_or_else_some_%out_res -> L_OPTION_OK_OR_ELSE_SOME_%out_res, L_OPTION_OK_OR_ELSE_NONE_%out_res
|
|
399
|
+
L_OPTION_OK_OR_ELSE_SOME_%out_res:
|
|
400
|
+
__option_ok_or_else_value_%out_res = load %opt_reg+Option_value as u64
|
|
401
|
+
store %out_res+Result_tag, Result_OK as u64
|
|
402
|
+
store %out_res+Result_ok, __option_ok_or_else_value_%out_res as u64
|
|
403
|
+
store %out_res+Result_err, 0 as u64
|
|
404
|
+
!__option_ok_or_else_value_%out_res
|
|
405
|
+
!__option_ok_or_else_some_%out_res
|
|
406
|
+
!__option_ok_or_else_tag_%out_res
|
|
407
|
+
jmp L_OPTION_OK_OR_ELSE_END_%out_res
|
|
408
|
+
L_OPTION_OK_OR_ELSE_NONE_%out_res:
|
|
409
|
+
__option_ok_or_else_err_%out_res = call %err_fn()
|
|
410
|
+
store %out_res+Result_tag, Result_ERR as u64
|
|
411
|
+
store %out_res+Result_ok, 0 as u64
|
|
412
|
+
store %out_res+Result_err, __option_ok_or_else_err_%out_res as u64
|
|
413
|
+
!__option_ok_or_else_err_%out_res
|
|
414
|
+
!__option_ok_or_else_some_%out_res
|
|
415
|
+
!__option_ok_or_else_tag_%out_res
|
|
416
|
+
L_OPTION_OK_OR_ELSE_END_%out_res:
|
|
417
|
+
[END_MACRO]
|
|
418
|
+
|
|
419
|
+
[MACRO] OPTION_UNWRAP_OR %out_value, %opt_reg, %default_value
|
|
420
|
+
__option_tag_%out_value = load %opt_reg+Option_tag as u64
|
|
421
|
+
br __option_tag_%out_value -> L_OPTION_UNWRAP_OR_SOME_%out_value, L_OPTION_UNWRAP_OR_NONE_%out_value
|
|
422
|
+
L_OPTION_UNWRAP_OR_SOME_%out_value:
|
|
423
|
+
%out_value = load %opt_reg+Option_value as u64
|
|
424
|
+
!__option_tag_%out_value
|
|
425
|
+
jmp L_OPTION_UNWRAP_OR_END_%out_value
|
|
426
|
+
L_OPTION_UNWRAP_OR_NONE_%out_value:
|
|
427
|
+
%out_value = add %default_value, 0
|
|
428
|
+
!__option_tag_%out_value
|
|
429
|
+
L_OPTION_UNWRAP_OR_END_%out_value:
|
|
430
|
+
[END_MACRO]
|
|
431
|
+
|
|
432
|
+
[MACRO] OPTION_UNWRAP_OR_ELSE %out_value, %opt_reg, %default_fn
|
|
433
|
+
__option_unwrap_else_tag_%out_value = load %opt_reg+Option_tag as u64
|
|
434
|
+
__option_unwrap_else_some_%out_value = eq __option_unwrap_else_tag_%out_value, Option_SOME
|
|
435
|
+
br __option_unwrap_else_some_%out_value -> L_OPTION_UNWRAP_ELSE_SOME_%out_value, L_OPTION_UNWRAP_ELSE_NONE_%out_value
|
|
436
|
+
L_OPTION_UNWRAP_ELSE_SOME_%out_value:
|
|
437
|
+
%out_value = load %opt_reg+Option_value as u64
|
|
438
|
+
!__option_unwrap_else_some_%out_value
|
|
439
|
+
!__option_unwrap_else_tag_%out_value
|
|
440
|
+
jmp L_OPTION_UNWRAP_ELSE_END_%out_value
|
|
441
|
+
L_OPTION_UNWRAP_ELSE_NONE_%out_value:
|
|
442
|
+
%out_value = call %default_fn()
|
|
443
|
+
!__option_unwrap_else_some_%out_value
|
|
444
|
+
!__option_unwrap_else_tag_%out_value
|
|
445
|
+
L_OPTION_UNWRAP_ELSE_END_%out_value:
|
|
446
|
+
[END_MACRO]
|
|
447
|
+
|
|
448
|
+
[MACRO] OPTION_UNWRAP_OR_DEFAULT %out_value, %opt_reg
|
|
449
|
+
EXPAND OPTION_UNWRAP_OR %out_value, %opt_reg, 0
|
|
450
|
+
[END_MACRO]
|
|
451
|
+
|
|
452
|
+
[MACRO] OPTION_UNWRAP_OR_RETURN %out_value, %opt_reg, %default_value
|
|
453
|
+
__option_tag_%out_value = load %opt_reg+Option_tag as u64
|
|
454
|
+
__option_is_some_%out_value = eq __option_tag_%out_value, Option_SOME
|
|
455
|
+
br __option_is_some_%out_value -> L_OPTION_UNWRAP_OR_RETURN_SOME_%out_value, L_OPTION_UNWRAP_OR_RETURN_NONE_%out_value
|
|
456
|
+
L_OPTION_UNWRAP_OR_RETURN_SOME_%out_value:
|
|
457
|
+
%out_value = load %opt_reg+Option_value as u64
|
|
458
|
+
!__option_tag_%out_value
|
|
459
|
+
jmp L_OPTION_UNWRAP_OR_RETURN_END_%out_value
|
|
460
|
+
L_OPTION_UNWRAP_OR_RETURN_NONE_%out_value:
|
|
461
|
+
!__option_tag_%out_value
|
|
462
|
+
return %default_value
|
|
463
|
+
L_OPTION_UNWRAP_OR_RETURN_END_%out_value:
|
|
464
|
+
[END_MACRO]
|
|
465
|
+
|
|
466
|
+
[MACRO] TRY_OPTION %out_value, %opt_reg
|
|
467
|
+
__try_option_tag_%out_value = load %opt_reg+Option_tag as u64
|
|
468
|
+
__try_option_is_some_%out_value = eq __try_option_tag_%out_value, Option_SOME
|
|
469
|
+
br __try_option_is_some_%out_value -> L_TRY_OPTION_SOME_%out_value, L_TRY_OPTION_NONE_%out_value
|
|
470
|
+
L_TRY_OPTION_SOME_%out_value:
|
|
471
|
+
%out_value = load %opt_reg+Option_value as u64
|
|
472
|
+
!__try_option_is_some_%out_value
|
|
473
|
+
!__try_option_tag_%out_value
|
|
474
|
+
jmp L_TRY_OPTION_END_%out_value
|
|
475
|
+
L_TRY_OPTION_NONE_%out_value:
|
|
476
|
+
!__try_option_is_some_%out_value
|
|
477
|
+
!__try_option_tag_%out_value
|
|
478
|
+
return %opt_reg
|
|
479
|
+
L_TRY_OPTION_END_%out_value:
|
|
480
|
+
[END_MACRO]
|
|
481
|
+
|
|
482
|
+
[MACRO] TRY_OPTION_RETURN %out_value, %opt_reg
|
|
483
|
+
EXPAND TRY_OPTION %out_value, %opt_reg
|
|
484
|
+
[END_MACRO]
|
|
485
|
+
|
|
486
|
+
[MACRO] OPTION_UNWRAP %out_value, %opt_reg
|
|
487
|
+
__option_tag_%out_value = load %opt_reg+Option_tag as u64
|
|
488
|
+
br __option_tag_%out_value -> L_OPTION_UNWRAP_SOME_%out_value, L_OPTION_UNWRAP_NONE_%out_value
|
|
489
|
+
L_OPTION_UNWRAP_SOME_%out_value:
|
|
490
|
+
%out_value = load %opt_reg+Option_value as u64
|
|
491
|
+
!__option_tag_%out_value
|
|
492
|
+
jmp L_OPTION_UNWRAP_END_%out_value
|
|
493
|
+
L_OPTION_UNWRAP_NONE_%out_value:
|
|
494
|
+
EXPAND PANIC_MSG 17, *OPTION_UNWRAP_PANIC, 39
|
|
495
|
+
%out_value = add 0, 0
|
|
496
|
+
L_OPTION_UNWRAP_END_%out_value:
|
|
497
|
+
[END_MACRO]
|
|
498
|
+
|
|
499
|
+
[MACRO] OPTION_EXPECT %out_value, %opt_reg, %msg_ptr, %msg_len
|
|
500
|
+
__option_expect_tag_%out_value = load %opt_reg+Option_tag as u64
|
|
501
|
+
__option_expect_some_%out_value = eq __option_expect_tag_%out_value, Option_SOME
|
|
502
|
+
br __option_expect_some_%out_value -> L_OPTION_EXPECT_SOME_%out_value, L_OPTION_EXPECT_NONE_%out_value
|
|
503
|
+
L_OPTION_EXPECT_SOME_%out_value:
|
|
504
|
+
%out_value = load %opt_reg+Option_value as u64
|
|
505
|
+
!__option_expect_some_%out_value
|
|
506
|
+
!__option_expect_tag_%out_value
|
|
507
|
+
jmp L_OPTION_EXPECT_END_%out_value
|
|
508
|
+
L_OPTION_EXPECT_NONE_%out_value:
|
|
509
|
+
EXPAND PANIC_MSG 17, %msg_ptr, %msg_len
|
|
510
|
+
%out_value = add 0, 0
|
|
511
|
+
L_OPTION_EXPECT_END_%out_value:
|
|
512
|
+
[END_MACRO]
|
|
513
|
+
|
|
514
|
+
[MACRO] OPTION_UNWRAP_UNCHECKED %out_value, %opt_reg
|
|
515
|
+
%out_value = load %opt_reg+Option_value as u64
|
|
516
|
+
[END_MACRO]
|
|
517
|
+
|
|
518
|
+
[MACRO] OPTION_MAP_OR %out_value, %opt_reg, %map_fn, %default_value
|
|
519
|
+
__option_tag_%out_value = load %opt_reg+Option_tag as u64
|
|
520
|
+
br __option_tag_%out_value -> L_OPTION_MAP_OR_SOME_%out_value, L_OPTION_MAP_OR_NONE_%out_value
|
|
521
|
+
L_OPTION_MAP_OR_SOME_%out_value:
|
|
522
|
+
__option_value_%out_value = load %opt_reg+Option_value as u64
|
|
523
|
+
%out_value = call %map_fn(__option_value_%out_value)
|
|
524
|
+
!__option_value_%out_value
|
|
525
|
+
!__option_tag_%out_value
|
|
526
|
+
jmp L_OPTION_MAP_OR_END_%out_value
|
|
527
|
+
L_OPTION_MAP_OR_NONE_%out_value:
|
|
528
|
+
%out_value = add %default_value, 0
|
|
529
|
+
!__option_tag_%out_value
|
|
530
|
+
L_OPTION_MAP_OR_END_%out_value:
|
|
531
|
+
[END_MACRO]
|
|
532
|
+
|
|
533
|
+
[MACRO] OPTION_MAP_OR_ELSE %out_value, %opt_reg, %map_fn, %default_fn
|
|
534
|
+
__option_tag_%out_value = load %opt_reg+Option_tag as u64
|
|
535
|
+
br __option_tag_%out_value -> L_OPTION_MAP_OR_ELSE_SOME_%out_value, L_OPTION_MAP_OR_ELSE_NONE_%out_value
|
|
536
|
+
L_OPTION_MAP_OR_ELSE_SOME_%out_value:
|
|
537
|
+
__option_value_%out_value = load %opt_reg+Option_value as u64
|
|
538
|
+
%out_value = call %map_fn(__option_value_%out_value)
|
|
539
|
+
!__option_value_%out_value
|
|
540
|
+
!__option_tag_%out_value
|
|
541
|
+
jmp L_OPTION_MAP_OR_ELSE_END_%out_value
|
|
542
|
+
L_OPTION_MAP_OR_ELSE_NONE_%out_value:
|
|
543
|
+
%out_value = call %default_fn()
|
|
544
|
+
!__option_tag_%out_value
|
|
545
|
+
L_OPTION_MAP_OR_ELSE_END_%out_value:
|
|
546
|
+
[END_MACRO]
|
|
547
|
+
|
|
548
|
+
[MACRO] OPTION_MAP_OR_DEFAULT %out_value, %opt_reg, %map_fn
|
|
549
|
+
EXPAND OPTION_MAP_OR %out_value, %opt_reg, %map_fn, 0
|
|
550
|
+
[END_MACRO]
|
|
551
|
+
|
|
552
|
+
[MACRO] OPTION_SET_NONE %opt_reg
|
|
553
|
+
store %opt_reg+Option_tag, Option_NONE as u64
|
|
554
|
+
store %opt_reg+Option_value, 0 as u64
|
|
555
|
+
[END_MACRO]
|
|
556
|
+
|
|
557
|
+
[MACRO] OPTION_SET_SOME %opt_reg, %value
|
|
558
|
+
store %opt_reg+Option_tag, Option_SOME as u64
|
|
559
|
+
store %opt_reg+Option_value, %value as u64
|
|
560
|
+
[END_MACRO]
|
|
561
|
+
|
|
562
|
+
[MACRO] OPTION_TAKE %out_opt, %opt_reg
|
|
563
|
+
EXPAND OPTION_COPY %out_opt, %opt_reg
|
|
564
|
+
EXPAND OPTION_SET_NONE %opt_reg
|
|
565
|
+
[END_MACRO]
|
|
566
|
+
|
|
567
|
+
[MACRO] OPTION_TAKE_IF %out_opt, %opt_reg, %pred_fn
|
|
568
|
+
__option_take_if_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
569
|
+
__option_take_if_some_%out_opt = eq __option_take_if_tag_%out_opt, Option_SOME
|
|
570
|
+
br __option_take_if_some_%out_opt -> L_OPTION_TAKE_IF_CHECK_%out_opt, L_OPTION_TAKE_IF_NONE_%out_opt
|
|
571
|
+
L_OPTION_TAKE_IF_CHECK_%out_opt:
|
|
572
|
+
__option_take_if_value_%out_opt = load %opt_reg+Option_value as u64
|
|
573
|
+
__option_take_if_pred_%out_opt = call %pred_fn(__option_take_if_value_%out_opt)
|
|
574
|
+
__option_take_if_take_%out_opt = ne __option_take_if_pred_%out_opt, 0
|
|
575
|
+
br __option_take_if_take_%out_opt -> L_OPTION_TAKE_IF_TAKE_%out_opt, L_OPTION_TAKE_IF_KEEP_%out_opt
|
|
576
|
+
L_OPTION_TAKE_IF_TAKE_%out_opt:
|
|
577
|
+
EXPAND OPTION_NEW_SOME %out_opt, __option_take_if_value_%out_opt
|
|
578
|
+
EXPAND OPTION_SET_NONE %opt_reg
|
|
579
|
+
jmp L_OPTION_TAKE_IF_CHECK_DONE_%out_opt
|
|
580
|
+
L_OPTION_TAKE_IF_KEEP_%out_opt:
|
|
581
|
+
EXPAND OPTION_NEW_NONE %out_opt
|
|
582
|
+
jmp L_OPTION_TAKE_IF_CHECK_DONE_%out_opt
|
|
583
|
+
L_OPTION_TAKE_IF_CHECK_DONE_%out_opt:
|
|
584
|
+
!__option_take_if_take_%out_opt
|
|
585
|
+
!__option_take_if_pred_%out_opt
|
|
586
|
+
!__option_take_if_value_%out_opt
|
|
587
|
+
!__option_take_if_some_%out_opt
|
|
588
|
+
!__option_take_if_tag_%out_opt
|
|
589
|
+
jmp L_OPTION_TAKE_IF_END_%out_opt
|
|
590
|
+
L_OPTION_TAKE_IF_NONE_%out_opt:
|
|
591
|
+
EXPAND OPTION_NEW_NONE %out_opt
|
|
592
|
+
!__option_take_if_some_%out_opt
|
|
593
|
+
!__option_take_if_tag_%out_opt
|
|
594
|
+
L_OPTION_TAKE_IF_END_%out_opt:
|
|
595
|
+
[END_MACRO]
|
|
596
|
+
|
|
597
|
+
[MACRO] OPTION_REPLACE %out_opt, %opt_reg, %value
|
|
598
|
+
EXPAND OPTION_COPY %out_opt, %opt_reg
|
|
599
|
+
EXPAND OPTION_SET_SOME %opt_reg, %value
|
|
600
|
+
[END_MACRO]
|
|
601
|
+
|
|
602
|
+
[MACRO] OPTION_INSERT %out_ptr, %opt_reg, %value
|
|
603
|
+
EXPAND OPTION_SET_SOME %opt_reg, %value
|
|
604
|
+
%out_ptr = ptr_add %opt_reg, Option_value
|
|
605
|
+
[END_MACRO]
|
|
606
|
+
|
|
607
|
+
[MACRO] OPTION_GET_OR_INSERT %out_ptr, %opt_reg, %value
|
|
608
|
+
__option_get_or_insert_tag_%out_ptr = load %opt_reg+Option_tag as u64
|
|
609
|
+
__option_get_or_insert_some_%out_ptr = eq __option_get_or_insert_tag_%out_ptr, Option_SOME
|
|
610
|
+
br __option_get_or_insert_some_%out_ptr -> L_OPTION_GET_OR_INSERT_DONE_%out_ptr, L_OPTION_GET_OR_INSERT_SET_%out_ptr
|
|
611
|
+
L_OPTION_GET_OR_INSERT_SET_%out_ptr:
|
|
612
|
+
EXPAND OPTION_SET_SOME %opt_reg, %value
|
|
613
|
+
jmp L_OPTION_GET_OR_INSERT_DONE_%out_ptr
|
|
614
|
+
L_OPTION_GET_OR_INSERT_DONE_%out_ptr:
|
|
615
|
+
%out_ptr = ptr_add %opt_reg, Option_value
|
|
616
|
+
!__option_get_or_insert_some_%out_ptr
|
|
617
|
+
!__option_get_or_insert_tag_%out_ptr
|
|
618
|
+
[END_MACRO]
|
|
619
|
+
|
|
620
|
+
[MACRO] OPTION_GET_OR_INSERT_WITH %out_ptr, %opt_reg, %default_fn
|
|
621
|
+
__option_get_or_with_tag_%out_ptr = load %opt_reg+Option_tag as u64
|
|
622
|
+
__option_get_or_with_some_%out_ptr = eq __option_get_or_with_tag_%out_ptr, Option_SOME
|
|
623
|
+
br __option_get_or_with_some_%out_ptr -> L_OPTION_GET_OR_WITH_DONE_%out_ptr, L_OPTION_GET_OR_WITH_SET_%out_ptr
|
|
624
|
+
L_OPTION_GET_OR_WITH_SET_%out_ptr:
|
|
625
|
+
__option_get_or_with_value_%out_ptr = call %default_fn()
|
|
626
|
+
EXPAND OPTION_SET_SOME %opt_reg, __option_get_or_with_value_%out_ptr
|
|
627
|
+
!__option_get_or_with_value_%out_ptr
|
|
628
|
+
jmp L_OPTION_GET_OR_WITH_DONE_%out_ptr
|
|
629
|
+
L_OPTION_GET_OR_WITH_DONE_%out_ptr:
|
|
630
|
+
%out_ptr = ptr_add %opt_reg, Option_value
|
|
631
|
+
!__option_get_or_with_some_%out_ptr
|
|
632
|
+
!__option_get_or_with_tag_%out_ptr
|
|
633
|
+
[END_MACRO]
|
|
634
|
+
|
|
635
|
+
[MACRO] OPTION_GET_OR_INSERT_DEFAULT %out_ptr, %opt_reg
|
|
636
|
+
EXPAND OPTION_GET_OR_INSERT %out_ptr, %opt_reg, 0
|
|
637
|
+
[END_MACRO]
|
|
638
|
+
|
|
639
|
+
[MACRO] OPTION_FLATTEN %out_opt, %opt_reg
|
|
640
|
+
%out_opt = alloc Option_SIZE
|
|
641
|
+
__option_flatten_tag_%out_opt = load %opt_reg+Option_tag as u64
|
|
642
|
+
__option_flatten_some_%out_opt = eq __option_flatten_tag_%out_opt, Option_SOME
|
|
643
|
+
br __option_flatten_some_%out_opt -> L_OPTION_FLATTEN_SOME_%out_opt, L_OPTION_FLATTEN_NONE_%out_opt
|
|
644
|
+
L_OPTION_FLATTEN_SOME_%out_opt:
|
|
645
|
+
__option_flatten_inner_%out_opt = load %opt_reg+Option_value as ptr
|
|
646
|
+
__option_flatten_inner_tag_%out_opt = load __option_flatten_inner_%out_opt+Option_tag as u64
|
|
647
|
+
__option_flatten_inner_value_%out_opt = load __option_flatten_inner_%out_opt+Option_value as u64
|
|
648
|
+
store %out_opt+Option_tag, __option_flatten_inner_tag_%out_opt as u64
|
|
649
|
+
store %out_opt+Option_value, __option_flatten_inner_value_%out_opt as u64
|
|
650
|
+
!__option_flatten_inner_value_%out_opt
|
|
651
|
+
!__option_flatten_inner_tag_%out_opt
|
|
652
|
+
!__option_flatten_inner_%out_opt
|
|
653
|
+
!__option_flatten_some_%out_opt
|
|
654
|
+
!__option_flatten_tag_%out_opt
|
|
655
|
+
jmp L_OPTION_FLATTEN_END_%out_opt
|
|
656
|
+
L_OPTION_FLATTEN_NONE_%out_opt:
|
|
657
|
+
store %out_opt+Option_tag, Option_NONE as u64
|
|
658
|
+
store %out_opt+Option_value, 0 as u64
|
|
659
|
+
!__option_flatten_some_%out_opt
|
|
660
|
+
!__option_flatten_tag_%out_opt
|
|
661
|
+
L_OPTION_FLATTEN_END_%out_opt:
|
|
662
|
+
[END_MACRO]
|
|
663
|
+
|
|
664
|
+
[MACRO] OPTION_TRANSPOSE %out_res, %opt_reg
|
|
665
|
+
%out_res = alloc Result_SIZE
|
|
666
|
+
__option_transpose_tag_%out_res = load %opt_reg+Option_tag as u64
|
|
667
|
+
__option_transpose_some_%out_res = eq __option_transpose_tag_%out_res, Option_SOME
|
|
668
|
+
br __option_transpose_some_%out_res -> L_OPTION_TRANSPOSE_SOME_%out_res, L_OPTION_TRANSPOSE_NONE_%out_res
|
|
669
|
+
L_OPTION_TRANSPOSE_SOME_%out_res:
|
|
670
|
+
__option_transpose_inner_res_%out_res = load %opt_reg+Option_value as ptr
|
|
671
|
+
__option_transpose_inner_tag_%out_res = load __option_transpose_inner_res_%out_res+Result_tag as u64
|
|
672
|
+
__option_transpose_inner_ok_%out_res = eq __option_transpose_inner_tag_%out_res, Result_OK
|
|
673
|
+
br __option_transpose_inner_ok_%out_res -> L_OPTION_TRANSPOSE_OK_%out_res, L_OPTION_TRANSPOSE_ERR_%out_res
|
|
674
|
+
L_OPTION_TRANSPOSE_OK_%out_res:
|
|
675
|
+
__option_transpose_ok_value_%out_res = load __option_transpose_inner_res_%out_res+Result_ok as u64
|
|
676
|
+
__option_transpose_ok_opt_%out_res = alloc Option_SIZE
|
|
677
|
+
store __option_transpose_ok_opt_%out_res+Option_tag, Option_SOME as u64
|
|
678
|
+
store __option_transpose_ok_opt_%out_res+Option_value, __option_transpose_ok_value_%out_res as u64
|
|
679
|
+
store %out_res+Result_tag, Result_OK as u64
|
|
680
|
+
store %out_res+Result_ok, __option_transpose_ok_opt_%out_res as ptr
|
|
681
|
+
store %out_res+Result_err, 0 as u64
|
|
682
|
+
!__option_transpose_ok_opt_%out_res
|
|
683
|
+
!__option_transpose_ok_value_%out_res
|
|
684
|
+
!__option_transpose_inner_ok_%out_res
|
|
685
|
+
!__option_transpose_inner_tag_%out_res
|
|
686
|
+
!__option_transpose_inner_res_%out_res
|
|
687
|
+
!__option_transpose_some_%out_res
|
|
688
|
+
!__option_transpose_tag_%out_res
|
|
689
|
+
jmp L_OPTION_TRANSPOSE_END_%out_res
|
|
690
|
+
L_OPTION_TRANSPOSE_ERR_%out_res:
|
|
691
|
+
__option_transpose_err_value_%out_res = load __option_transpose_inner_res_%out_res+Result_err as u64
|
|
692
|
+
store %out_res+Result_tag, Result_ERR as u64
|
|
693
|
+
store %out_res+Result_ok, 0 as u64
|
|
694
|
+
store %out_res+Result_err, __option_transpose_err_value_%out_res as u64
|
|
695
|
+
!__option_transpose_err_value_%out_res
|
|
696
|
+
!__option_transpose_inner_ok_%out_res
|
|
697
|
+
!__option_transpose_inner_tag_%out_res
|
|
698
|
+
!__option_transpose_inner_res_%out_res
|
|
699
|
+
!__option_transpose_some_%out_res
|
|
700
|
+
!__option_transpose_tag_%out_res
|
|
701
|
+
jmp L_OPTION_TRANSPOSE_END_%out_res
|
|
702
|
+
L_OPTION_TRANSPOSE_NONE_%out_res:
|
|
703
|
+
__option_transpose_none_opt_%out_res = alloc Option_SIZE
|
|
704
|
+
store __option_transpose_none_opt_%out_res+Option_tag, Option_NONE as u64
|
|
705
|
+
store __option_transpose_none_opt_%out_res+Option_value, 0 as u64
|
|
706
|
+
store %out_res+Result_tag, Result_OK as u64
|
|
707
|
+
store %out_res+Result_ok, __option_transpose_none_opt_%out_res as ptr
|
|
708
|
+
store %out_res+Result_err, 0 as u64
|
|
709
|
+
!__option_transpose_none_opt_%out_res
|
|
710
|
+
!__option_transpose_some_%out_res
|
|
711
|
+
!__option_transpose_tag_%out_res
|
|
712
|
+
L_OPTION_TRANSPOSE_END_%out_res:
|
|
713
|
+
[END_MACRO]
|
|
714
|
+
|
|
715
|
+
[MACRO] OPTION_BRANCH %opt_reg, %some_label, %none_label
|
|
716
|
+
__option_tag_%opt_reg = load %opt_reg+Option_tag as u64
|
|
717
|
+
br __option_tag_%opt_reg -> %some_label, %none_label
|
|
718
|
+
!__option_tag_%opt_reg
|
|
719
|
+
[END_MACRO]
|
|
720
|
+
|
|
721
|
+
[MACRO] MATCH_OPTION %out_value, %opt_reg, %some_label, %none_label
|
|
722
|
+
__match_option_tag_%out_value = load %opt_reg+Option_tag as u64
|
|
723
|
+
__match_option_is_some_%out_value = eq __match_option_tag_%out_value, Option_SOME
|
|
724
|
+
br __match_option_is_some_%out_value -> L_MATCH_OPTION_SOME_%out_value, L_MATCH_OPTION_NONE_%out_value
|
|
725
|
+
L_MATCH_OPTION_SOME_%out_value:
|
|
726
|
+
%out_value = load %opt_reg+Option_value as u64
|
|
727
|
+
!__match_option_tag_%out_value
|
|
728
|
+
jmp %some_label
|
|
729
|
+
L_MATCH_OPTION_NONE_%out_value:
|
|
730
|
+
%out_value = add 0, 0
|
|
731
|
+
!__match_option_tag_%out_value
|
|
732
|
+
jmp %none_label
|
|
733
|
+
[END_MACRO]
|
|
734
|
+
|
|
735
|
+
[MACRO] OPTION_MATCH_SOME_NONE %out_value, %opt_reg, %some_label, %none_label
|
|
736
|
+
EXPAND MATCH_OPTION %out_value, %opt_reg, %some_label, %none_label
|
|
737
|
+
[END_MACRO]
|
|
738
|
+
|
|
739
|
+
[MACRO] MATCHES_OPTION %out_bool, %opt_reg, %expected_tag
|
|
740
|
+
__matches_option_tag_%out_bool = load %opt_reg+Option_tag as u64
|
|
741
|
+
%out_bool = eq __matches_option_tag_%out_bool, %expected_tag
|
|
742
|
+
!__matches_option_tag_%out_bool
|
|
743
|
+
[END_MACRO]
|
|
744
|
+
|
|
745
|
+
[MACRO] OPTION_DEFAULT %out_opt
|
|
746
|
+
EXPAND OPTION_NEW_NONE %out_opt
|
|
747
|
+
[END_MACRO]
|
|
748
|
+
|
|
749
|
+
[MACRO] OPTION_ZIP_U64 %out_opt, %opt_a, %opt_b
|
|
750
|
+
%out_opt = alloc OptionPairU64_SIZE
|
|
751
|
+
__zip_tag_a_%out_opt = load %opt_a+Option_tag as u64
|
|
752
|
+
__zip_some_a_%out_opt = eq __zip_tag_a_%out_opt, Option_SOME
|
|
753
|
+
br __zip_some_a_%out_opt -> L_ZIP_CHECK_B_%out_opt, L_ZIP_NONE_A_%out_opt
|
|
754
|
+
L_ZIP_CHECK_B_%out_opt:
|
|
755
|
+
__zip_tag_b_%out_opt = load %opt_b+Option_tag as u64
|
|
756
|
+
__zip_some_b_%out_opt = eq __zip_tag_b_%out_opt, Option_SOME
|
|
757
|
+
br __zip_some_b_%out_opt -> L_ZIP_SOME_%out_opt, L_ZIP_NONE_B_%out_opt
|
|
758
|
+
L_ZIP_SOME_%out_opt:
|
|
759
|
+
__zip_val_a_%out_opt = load %opt_a+Option_value as u64
|
|
760
|
+
__zip_val_b_%out_opt = load %opt_b+Option_value as u64
|
|
761
|
+
store %out_opt+OptionPairU64_tag, Option_SOME as u64
|
|
762
|
+
store %out_opt+OptionPairU64_value1, __zip_val_a_%out_opt as u64
|
|
763
|
+
store %out_opt+OptionPairU64_value2, __zip_val_b_%out_opt as u64
|
|
764
|
+
!__zip_val_b_%out_opt
|
|
765
|
+
!__zip_val_a_%out_opt
|
|
766
|
+
!__zip_some_b_%out_opt
|
|
767
|
+
!__zip_tag_b_%out_opt
|
|
768
|
+
!__zip_some_a_%out_opt
|
|
769
|
+
!__zip_tag_a_%out_opt
|
|
770
|
+
jmp L_ZIP_END_%out_opt
|
|
771
|
+
L_ZIP_NONE_A_%out_opt:
|
|
772
|
+
store %out_opt+OptionPairU64_tag, Option_NONE as u64
|
|
773
|
+
store %out_opt+OptionPairU64_value1, 0 as u64
|
|
774
|
+
store %out_opt+OptionPairU64_value2, 0 as u64
|
|
775
|
+
!__zip_some_a_%out_opt
|
|
776
|
+
!__zip_tag_a_%out_opt
|
|
777
|
+
jmp L_ZIP_END_%out_opt
|
|
778
|
+
L_ZIP_NONE_B_%out_opt:
|
|
779
|
+
store %out_opt+OptionPairU64_tag, Option_NONE as u64
|
|
780
|
+
store %out_opt+OptionPairU64_value1, 0 as u64
|
|
781
|
+
store %out_opt+OptionPairU64_value2, 0 as u64
|
|
782
|
+
!__zip_some_b_%out_opt
|
|
783
|
+
!__zip_tag_b_%out_opt
|
|
784
|
+
!__zip_some_a_%out_opt
|
|
785
|
+
!__zip_tag_a_%out_opt
|
|
786
|
+
L_ZIP_END_%out_opt:
|
|
787
|
+
[END_MACRO]
|
|
788
|
+
|
|
789
|
+
// Rust method-name alias over OPTION_ZIP_U64.
|
|
790
|
+
[MACRO] OPTION_ZIP %out_opt, %opt_a, %opt_b
|
|
791
|
+
EXPAND OPTION_ZIP_U64 %out_opt, %opt_a, %opt_b
|
|
792
|
+
[END_MACRO]
|
|
793
|
+
|
|
794
|
+
[MACRO] OPTION_UNZIP_TO_U64 %out_opt_a, %out_opt_b, %pair_opt
|
|
795
|
+
%out_opt_a = alloc Option_SIZE
|
|
796
|
+
%out_opt_b = alloc Option_SIZE
|
|
797
|
+
__unzip_tag_%out_opt_a = load %pair_opt+OptionPairU64_tag as u64
|
|
798
|
+
__unzip_some_%out_opt_a = eq __unzip_tag_%out_opt_a, Option_SOME
|
|
799
|
+
br __unzip_some_%out_opt_a -> L_UNZIP_SOME_%out_opt_a, L_UNZIP_NONE_%out_opt_a
|
|
800
|
+
L_UNZIP_SOME_%out_opt_a:
|
|
801
|
+
__unzip_v1_%out_opt_a = load %pair_opt+OptionPairU64_value1 as u64
|
|
802
|
+
__unzip_v2_%out_opt_a = load %pair_opt+OptionPairU64_value2 as u64
|
|
803
|
+
store %out_opt_a+Option_tag, Option_SOME as u64
|
|
804
|
+
store %out_opt_a+Option_value, __unzip_v1_%out_opt_a as u64
|
|
805
|
+
store %out_opt_b+Option_tag, Option_SOME as u64
|
|
806
|
+
store %out_opt_b+Option_value, __unzip_v2_%out_opt_a as u64
|
|
807
|
+
!__unzip_v2_%out_opt_a
|
|
808
|
+
!__unzip_v1_%out_opt_a
|
|
809
|
+
!__unzip_some_%out_opt_a
|
|
810
|
+
!__unzip_tag_%out_opt_a
|
|
811
|
+
jmp L_UNZIP_END_%out_opt_a
|
|
812
|
+
L_UNZIP_NONE_%out_opt_a:
|
|
813
|
+
store %out_opt_a+Option_tag, Option_NONE as u64
|
|
814
|
+
store %out_opt_a+Option_value, 0 as u64
|
|
815
|
+
store %out_opt_b+Option_tag, Option_NONE as u64
|
|
816
|
+
store %out_opt_b+Option_value, 0 as u64
|
|
817
|
+
!__unzip_some_%out_opt_a
|
|
818
|
+
!__unzip_tag_%out_opt_a
|
|
819
|
+
L_UNZIP_END_%out_opt_a:
|
|
820
|
+
[END_MACRO]
|
|
821
|
+
|
|
822
|
+
// Rust method-name alias over OPTION_UNZIP_TO_U64.
|
|
823
|
+
[MACRO] OPTION_UNZIP_TO %out_opt_a, %out_opt_b, %pair_opt
|
|
824
|
+
EXPAND OPTION_UNZIP_TO_U64 %out_opt_a, %out_opt_b, %pair_opt
|
|
825
|
+
[END_MACRO]
|