@shd101wyy/yo 0.1.28 → 0.1.30
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/.github/skills/yo-async-effects/SKILL.md +15 -15
- package/.github/skills/yo-async-effects/async-effects-recipes.md +118 -121
- package/.github/skills/yo-core-patterns/core-patterns-cheatsheet.md +33 -13
- package/.github/skills/yo-project-workflow/workflow-cheatsheet.md +1 -1
- package/.github/skills/yo-syntax/SKILL.md +2 -2
- package/.github/skills/yo-syntax/syntax-cheatsheet.md +108 -96
- package/README.md +6 -3
- package/out/cjs/index.cjs +812 -706
- package/out/cjs/yo-cli.cjs +1023 -907
- package/out/cjs/yo-lsp.cjs +836 -730
- package/out/esm/index.mjs +757 -651
- package/out/types/src/codegen/exprs/async.d.ts +2 -0
- package/out/types/src/codegen/exprs/await.d.ts +1 -0
- package/out/types/src/codegen/exprs/closures.d.ts +4 -0
- package/out/types/src/codegen/functions/context.d.ts +6 -0
- package/out/types/src/codegen/functions/declarations.d.ts +1 -1
- package/out/types/src/doc/model.d.ts +0 -1
- package/out/types/src/env.d.ts +2 -2
- package/out/types/src/evaluator/builtins/pragma.d.ts +9 -0
- package/out/types/src/evaluator/builtins/unsafe.d.ts +8 -0
- package/out/types/src/evaluator/context.d.ts +3 -1
- package/out/types/src/evaluator/exprs/{escape.d.ts → unwind.d.ts} +1 -1
- package/out/types/src/evaluator/index.d.ts +1 -1
- package/out/types/src/evaluator/memory-safety.d.ts +14 -0
- package/out/types/src/evaluator/types/flowability.d.ts +6 -0
- package/out/types/src/evaluator/types/function.d.ts +1 -2
- package/out/types/src/evaluator/utils.d.ts +0 -1
- package/out/types/src/expr-traversal.d.ts +1 -0
- package/out/types/src/expr.d.ts +9 -7
- package/out/types/src/public-safe-report.d.ts +19 -0
- package/out/types/src/tests/comptime-ref-gate.test.d.ts +1 -0
- package/out/types/src/tests/pragma-validation.test.d.ts +1 -0
- package/out/types/src/tests/public-safe-report.test.d.ts +1 -0
- package/out/types/src/tests/type-representation-pointer.test.d.ts +1 -0
- package/out/types/src/tests/unsafe-gate.test.d.ts +1 -0
- package/out/types/src/tests/unsafe-report-classify.test.d.ts +1 -0
- package/out/types/src/types/creators.d.ts +4 -6
- package/out/types/src/types/definitions.d.ts +9 -16
- package/out/types/src/types/guards.d.ts +1 -2
- package/out/types/src/types/tags.d.ts +0 -1
- package/out/types/src/types/utils.d.ts +5 -0
- package/out/types/src/unsafe-report.d.ts +29 -0
- package/out/types/src/value.d.ts +1 -0
- package/out/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/scripts/add-pragma-for-pointer-decls.ts +134 -0
- package/scripts/add-pragma.ts +58 -0
- package/scripts/migrate-amp-method-calls.ts +186 -0
- package/scripts/migrate-clone-calls.ts +93 -0
- package/scripts/migrate-get-unwrap.ts +166 -0
- package/scripts/migrate-index-patterns.ts +210 -0
- package/scripts/migrate-index-trait.ts +142 -0
- package/scripts/migrate-iterator.ts +150 -0
- package/scripts/migrate-self-ptr.ts +220 -0
- package/scripts/migrate-skip-pragmas.ts +109 -0
- package/scripts/migrate-tostring.ts +134 -0
- package/scripts/trim-pragma.ts +130 -0
- package/scripts/wrap-extern-calls.ts +161 -0
- package/std/alg/hash.yo +3 -2
- package/std/allocator.yo +6 -5
- package/std/async.yo +2 -2
- package/std/collections/array_list.yo +59 -40
- package/std/collections/btree_map.yo +19 -18
- package/std/collections/deque.yo +9 -8
- package/std/collections/hash_map.yo +101 -13
- package/std/collections/hash_set.yo +5 -4
- package/std/collections/linked_list.yo +39 -4
- package/std/collections/ordered_map.yo +3 -3
- package/std/collections/priority_queue.yo +14 -13
- package/std/crypto/md5.yo +2 -1
- package/std/crypto/random.yo +21 -20
- package/std/crypto/sha256.yo +2 -1
- package/std/encoding/base64.yo +18 -18
- package/std/encoding/hex.yo +5 -5
- package/std/encoding/json.yo +62 -13
- package/std/encoding/punycode.yo +24 -23
- package/std/encoding/toml.yo +4 -3
- package/std/encoding/utf16.yo +3 -3
- package/std/env.yo +43 -28
- package/std/error.yo +15 -3
- package/std/fmt/display.yo +2 -2
- package/std/fmt/index.yo +6 -5
- package/std/fmt/to_string.yo +39 -38
- package/std/fmt/writer.yo +9 -8
- package/std/fs/dir.yo +61 -66
- package/std/fs/file.yo +121 -126
- package/std/fs/metadata.yo +13 -18
- package/std/fs/temp.yo +35 -30
- package/std/fs/walker.yo +14 -19
- package/std/gc.yo +1 -0
- package/std/glob.yo +7 -7
- package/std/http/client.yo +33 -36
- package/std/http/http.yo +6 -6
- package/std/http/index.yo +4 -4
- package/std/imm/list.yo +33 -0
- package/std/imm/map.yo +2 -1
- package/std/imm/set.yo +1 -0
- package/std/imm/sorted_map.yo +1 -0
- package/std/imm/sorted_set.yo +1 -0
- package/std/imm/string.yo +27 -23
- package/std/imm/vec.yo +18 -2
- package/std/io/reader.yo +2 -1
- package/std/io/writer.yo +3 -2
- package/std/libc/assert.yo +1 -0
- package/std/libc/ctype.yo +1 -0
- package/std/libc/dirent.yo +1 -0
- package/std/libc/errno.yo +1 -0
- package/std/libc/fcntl.yo +1 -0
- package/std/libc/float.yo +1 -0
- package/std/libc/limits.yo +1 -0
- package/std/libc/math.yo +1 -0
- package/std/libc/signal.yo +1 -0
- package/std/libc/stdatomic.yo +1 -0
- package/std/libc/stdint.yo +1 -0
- package/std/libc/stdio.yo +1 -0
- package/std/libc/stdlib.yo +1 -0
- package/std/libc/string.yo +1 -0
- package/std/libc/sys/stat.yo +1 -0
- package/std/libc/time.yo +1 -0
- package/std/libc/unistd.yo +1 -0
- package/std/libc/wctype.yo +1 -0
- package/std/libc/windows.yo +2 -0
- package/std/log.yo +7 -6
- package/std/net/addr.yo +6 -5
- package/std/net/dns.yo +13 -16
- package/std/net/errors.yo +9 -9
- package/std/net/tcp.yo +71 -74
- package/std/net/udp.yo +40 -43
- package/std/os/signal.yo +5 -5
- package/std/path.yo +1 -0
- package/std/prelude.yo +377 -200
- package/std/process/command.yo +57 -46
- package/std/process/index.yo +2 -1
- package/std/regex/compiler.yo +10 -9
- package/std/regex/index.yo +41 -41
- package/std/regex/match.yo +2 -2
- package/std/regex/parser.yo +31 -31
- package/std/regex/vm.yo +42 -41
- package/std/string/string.yo +95 -40
- package/std/string/string_builder.yo +9 -9
- package/std/string/unicode.yo +50 -49
- package/std/sync/channel.yo +2 -1
- package/std/sync/cond.yo +5 -4
- package/std/sync/mutex.yo +4 -3
- package/std/sys/advise.yo +1 -0
- package/std/sys/bufio/buf_reader.yo +27 -26
- package/std/sys/bufio/buf_writer.yo +22 -21
- package/std/sys/clock.yo +1 -0
- package/std/sys/copy.yo +1 -0
- package/std/sys/dir.yo +10 -9
- package/std/sys/dns.yo +6 -5
- package/std/sys/errors.yo +12 -12
- package/std/sys/events.yo +1 -0
- package/std/sys/externs.yo +38 -37
- package/std/sys/file.yo +17 -16
- package/std/sys/future.yo +4 -3
- package/std/sys/iov.yo +1 -0
- package/std/sys/mmap.yo +1 -0
- package/std/sys/path.yo +1 -0
- package/std/sys/perm.yo +2 -1
- package/std/sys/pipe.yo +1 -0
- package/std/sys/process.yo +5 -4
- package/std/sys/signal.yo +1 -0
- package/std/sys/socketpair.yo +1 -0
- package/std/sys/sockinfo.yo +1 -0
- package/std/sys/statfs.yo +2 -1
- package/std/sys/statx.yo +1 -0
- package/std/sys/sysinfo.yo +1 -0
- package/std/sys/tcp.yo +15 -14
- package/std/sys/temp.yo +1 -0
- package/std/sys/time.yo +2 -1
- package/std/sys/timer.yo +6 -6
- package/std/sys/tty.yo +2 -1
- package/std/sys/udp.yo +13 -12
- package/std/sys/unix.yo +12 -11
- package/std/testing/bench.yo +4 -3
- package/std/thread.yo +7 -6
- package/std/time/datetime.yo +18 -15
- package/std/time/duration.yo +11 -10
- package/std/time/instant.yo +4 -4
- package/std/time/sleep.yo +1 -0
- package/std/url/index.yo +5 -5
- package/std/worker.yo +4 -3
|
@@ -10,16 +10,17 @@
|
|
|
10
10
|
//! IO_file :: import "std/sys/file";
|
|
11
11
|
//!
|
|
12
12
|
//! reader := BufReader.new(fd);
|
|
13
|
-
//! line := io.await(reader.read_line(
|
|
13
|
+
//! line := io.await(reader.read_line(io));
|
|
14
14
|
//! match(line,
|
|
15
15
|
//! .Ok(.Some(s)) => println(s),
|
|
16
16
|
//! .Ok(.None) => println("EOF"),
|
|
17
17
|
//! .Err(e) => println(e.to_string())
|
|
18
18
|
//! );
|
|
19
19
|
//! ```
|
|
20
|
+
pragma(Pragma.AllowUnsafe);
|
|
20
21
|
{ ArrayList } :: import("../../collections/array_list");
|
|
21
22
|
open(import("../../string"));
|
|
22
|
-
{
|
|
23
|
+
{ IoError } :: import("../errors");
|
|
23
24
|
IO_file :: import("../file");
|
|
24
25
|
{ GlobalAllocator } :: import("../../allocator");
|
|
25
26
|
{ malloc, free } :: GlobalAllocator;
|
|
@@ -68,19 +69,19 @@ impl(
|
|
|
68
69
|
// Read a line from the reader (up to and including '\n').
|
|
69
70
|
// Returns .None on EOF when no data is available.
|
|
70
71
|
// Returns .Some(line) with the line content (without the trailing '\n').
|
|
71
|
-
read_line : (fn(self : Self,
|
|
72
|
+
read_line : (fn(self : Self, io : Io) -> Impl(Future(Result(Option(String), IoError), Io)))({
|
|
72
73
|
the_fd := self._fd;
|
|
73
|
-
io.async((
|
|
74
|
+
io.async((io) => {
|
|
74
75
|
line_bytes := ArrayList(u8).new();
|
|
75
76
|
found_newline := false;
|
|
76
77
|
hit_eof := false;
|
|
77
|
-
(read_err : Option(
|
|
78
|
+
(read_err : Option(IoError)) =.None;
|
|
78
79
|
while(runtime(((!(found_newline)) && (!(hit_eof))) && read_err.is_none()), {
|
|
79
80
|
cond(
|
|
80
81
|
(self._pos < self._filled) => {
|
|
81
82
|
scan := self._pos;
|
|
82
83
|
while(runtime((scan < self._filled) && (!(found_newline))), {
|
|
83
|
-
b := self._buf
|
|
84
|
+
b := self._buf(scan);
|
|
84
85
|
cond(
|
|
85
86
|
(b == _NEWLINE) => {
|
|
86
87
|
found_newline = true;
|
|
@@ -95,11 +96,11 @@ impl(
|
|
|
95
96
|
},
|
|
96
97
|
true => {
|
|
97
98
|
raw_buf := *(u8)(malloc(self._capacity).unwrap());
|
|
98
|
-
n := io.await(IO_file.read(the_fd, raw_buf, u32(self._capacity), self._offset));
|
|
99
|
+
n := io.await(IO_file.read(the_fd, raw_buf, u32(self._capacity), self._offset), io);
|
|
99
100
|
cond(
|
|
100
101
|
(n < i32(0)) => {
|
|
101
102
|
free(.Some(*(void)(raw_buf)));
|
|
102
|
-
read_err =.Some(
|
|
103
|
+
read_err =.Some(IoError.from_errno(i32(0) - n));
|
|
103
104
|
},
|
|
104
105
|
(n == i32(0)) => {
|
|
105
106
|
free(.Some(*(void)(raw_buf)));
|
|
@@ -134,11 +135,11 @@ impl(
|
|
|
134
135
|
}),
|
|
135
136
|
// Read up to `size` bytes into a provided buffer.
|
|
136
137
|
// Returns the number of bytes actually read.
|
|
137
|
-
read : (fn(self : Self, buf : *(u8), size : u32,
|
|
138
|
+
read : (fn(self : Self, buf : *(u8), size : u32, io : Io) -> Impl(Future(Result(i32, IoError), Io)))({
|
|
138
139
|
the_fd := self._fd;
|
|
139
|
-
io.async((
|
|
140
|
+
io.async((io) => {
|
|
140
141
|
available := (self._filled - self._pos);
|
|
141
|
-
(read_err : Option(
|
|
142
|
+
(read_err : Option(IoError)) =.None;
|
|
142
143
|
(read_n : i32) = i32(0);
|
|
143
144
|
done := false;
|
|
144
145
|
// If there's data already buffered, serve from buffer
|
|
@@ -150,7 +151,7 @@ impl(
|
|
|
150
151
|
);
|
|
151
152
|
i := usize(0);
|
|
152
153
|
while(runtime(i < to_copy), {
|
|
153
|
-
b := self._buf
|
|
154
|
+
b := self._buf(self._pos + i);
|
|
154
155
|
(buf &+ i).* = b;
|
|
155
156
|
i = (i + usize(1));
|
|
156
157
|
});
|
|
@@ -163,10 +164,10 @@ impl(
|
|
|
163
164
|
// Buffer is empty and large read: bypass buffer
|
|
164
165
|
cond(
|
|
165
166
|
((!(done)) && (usize(size) >= self._capacity)) => {
|
|
166
|
-
n := io.await(IO_file.read(the_fd, buf, size, self._offset));
|
|
167
|
+
n := io.await(IO_file.read(the_fd, buf, size, self._offset), io);
|
|
167
168
|
cond(
|
|
168
169
|
(n < i32(0)) => {
|
|
169
|
-
read_err =.Some(
|
|
170
|
+
read_err =.Some(IoError.from_errno(i32(0) - n));
|
|
170
171
|
},
|
|
171
172
|
true => {
|
|
172
173
|
self._offset = (self._offset + u64(n));
|
|
@@ -181,11 +182,11 @@ impl(
|
|
|
181
182
|
cond(
|
|
182
183
|
(!(done)) => {
|
|
183
184
|
raw_buf := *(u8)(malloc(self._capacity).unwrap());
|
|
184
|
-
n := io.await(IO_file.read(the_fd, raw_buf, u32(self._capacity), self._offset));
|
|
185
|
+
n := io.await(IO_file.read(the_fd, raw_buf, u32(self._capacity), self._offset), io);
|
|
185
186
|
cond(
|
|
186
187
|
(n < i32(0)) => {
|
|
187
188
|
free(.Some(*(void)(raw_buf)));
|
|
188
|
-
read_err =.Some(
|
|
189
|
+
read_err =.Some(IoError.from_errno(i32(0) - n));
|
|
189
190
|
},
|
|
190
191
|
(n == i32(0)) => {
|
|
191
192
|
free(.Some(*(void)(raw_buf)));
|
|
@@ -208,7 +209,7 @@ impl(
|
|
|
208
209
|
);
|
|
209
210
|
j := usize(0);
|
|
210
211
|
while(runtime(j < to_copy), {
|
|
211
|
-
b := self._buf
|
|
212
|
+
b := self._buf(j);
|
|
212
213
|
(buf &+ j).* = b;
|
|
213
214
|
j = (j + usize(1));
|
|
214
215
|
});
|
|
@@ -227,16 +228,16 @@ impl(
|
|
|
227
228
|
})
|
|
228
229
|
}),
|
|
229
230
|
// Read all remaining data into an ArrayList of bytes.
|
|
230
|
-
read_bytes : (fn(self : Self,
|
|
231
|
+
read_bytes : (fn(self : Self, io : Io) -> Impl(Future(Result(ArrayList(u8), IoError), Io)))({
|
|
231
232
|
the_fd := self._fd;
|
|
232
|
-
io.async((
|
|
233
|
+
io.async((io) => {
|
|
233
234
|
result := ArrayList(u8).new();
|
|
234
235
|
// First drain any buffered data
|
|
235
236
|
cond(
|
|
236
237
|
(self._pos < self._filled) => {
|
|
237
238
|
i := self._pos;
|
|
238
239
|
while(runtime(i < self._filled), {
|
|
239
|
-
result.push(self._buf
|
|
240
|
+
result.push(self._buf(i));
|
|
240
241
|
i = (i + usize(1));
|
|
241
242
|
});
|
|
242
243
|
self._pos = self._filled;
|
|
@@ -245,12 +246,12 @@ impl(
|
|
|
245
246
|
);
|
|
246
247
|
// Then read the rest from fd
|
|
247
248
|
raw_buf := *(u8)(malloc(self._capacity).unwrap());
|
|
248
|
-
(read_err : Option(
|
|
249
|
+
(read_err : Option(IoError)) =.None;
|
|
249
250
|
while(runtime(true), {
|
|
250
|
-
n := io.await(IO_file.read(the_fd, raw_buf, u32(self._capacity), self._offset));
|
|
251
|
+
n := io.await(IO_file.read(the_fd, raw_buf, u32(self._capacity), self._offset), io);
|
|
251
252
|
cond(
|
|
252
253
|
(n < i32(0)) => {
|
|
253
|
-
read_err =.Some(
|
|
254
|
+
read_err =.Some(IoError.from_errno(i32(0) - n));
|
|
254
255
|
break;
|
|
255
256
|
},
|
|
256
257
|
(n == i32(0)) => break,
|
|
@@ -273,9 +274,9 @@ impl(
|
|
|
273
274
|
})
|
|
274
275
|
}),
|
|
275
276
|
// Read all remaining data as a String.
|
|
276
|
-
read_to_string : (fn(self : Self,
|
|
277
|
-
io.async((
|
|
278
|
-
bytes_result := io.await(self.read_bytes(
|
|
277
|
+
read_to_string : (fn(self : Self, io : Io) -> Impl(Future(Result(String, IoError), Io)))(
|
|
278
|
+
io.async((io) => {
|
|
279
|
+
bytes_result := io.await(self.read_bytes(io), io);
|
|
279
280
|
match(
|
|
280
281
|
bytes_result,
|
|
281
282
|
.Ok(bytes) =>.Ok(String.from_bytes(bytes)),
|
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
//! { BufWriter } :: import "std/sys/bufio/buf_writer";
|
|
10
10
|
//!
|
|
11
11
|
//! writer := BufWriter.new(fd);
|
|
12
|
-
//! io.await(writer.write_string(`hello\n`,
|
|
13
|
-
//! io.await(writer.flush(
|
|
12
|
+
//! io.await(writer.write_string(`hello\n`, io));
|
|
13
|
+
//! io.await(writer.flush(io));
|
|
14
14
|
//! ```
|
|
15
|
+
pragma(Pragma.AllowUnsafe);
|
|
15
16
|
{ ArrayList } :: import("../../collections/array_list");
|
|
16
17
|
open(import("../../string"));
|
|
17
|
-
{
|
|
18
|
+
{ IoError } :: import("../errors");
|
|
18
19
|
IO_file :: import("../file");
|
|
19
20
|
{ GlobalAllocator } :: import("../../allocator");
|
|
20
21
|
{ malloc, free } :: GlobalAllocator;
|
|
@@ -54,10 +55,10 @@ impl(
|
|
|
54
55
|
self._buf.len()
|
|
55
56
|
),
|
|
56
57
|
// Internal: flush the buffer contents to fd.
|
|
57
|
-
_flush_inner : (fn(self : Self,
|
|
58
|
+
_flush_inner : (fn(self : Self, io : Io) -> Impl(Future(Result(unit, IoError), Io)))({
|
|
58
59
|
the_fd := self._fd;
|
|
59
|
-
io.async((
|
|
60
|
-
(write_err : Option(
|
|
60
|
+
io.async((io) => {
|
|
61
|
+
(write_err : Option(IoError)) =.None;
|
|
61
62
|
cond(
|
|
62
63
|
(self._buf.len() > usize(0)) => {
|
|
63
64
|
written := usize(0);
|
|
@@ -65,10 +66,10 @@ impl(
|
|
|
65
66
|
while(runtime((written < total) && write_err.is_none()), {
|
|
66
67
|
remaining := u32(total - written);
|
|
67
68
|
buf_ptr := self._buf.ptr().unwrap();
|
|
68
|
-
n := io.await(IO_file.write(the_fd, buf_ptr &+ written, remaining, self._offset));
|
|
69
|
+
n := io.await(IO_file.write(the_fd, buf_ptr &+ written, remaining, self._offset), io);
|
|
69
70
|
cond(
|
|
70
71
|
(n < i32(0)) => {
|
|
71
|
-
write_err =.Some(
|
|
72
|
+
write_err =.Some(IoError.from_errno(i32(0) - n));
|
|
72
73
|
},
|
|
73
74
|
true => {
|
|
74
75
|
written = (written + usize(n));
|
|
@@ -90,18 +91,18 @@ impl(
|
|
|
90
91
|
// Write bytes from a pointer into the buffer.
|
|
91
92
|
// Automatically flushes when the buffer is full.
|
|
92
93
|
// Returns total number of bytes written.
|
|
93
|
-
write : (fn(self : Self, data : *(u8), size : u32,
|
|
94
|
+
write : (fn(self : Self, data : *(u8), size : u32, io : Io) -> Impl(Future(Result(i32, IoError), Io)))({
|
|
94
95
|
the_fd := self._fd;
|
|
95
|
-
io.async((
|
|
96
|
+
io.async((io) => {
|
|
96
97
|
remaining := usize(size);
|
|
97
98
|
src_pos := usize(0);
|
|
98
|
-
(write_err : Option(
|
|
99
|
+
(write_err : Option(IoError)) =.None;
|
|
99
100
|
while(runtime((remaining > usize(0)) && write_err.is_none()), {
|
|
100
101
|
space := (self._capacity - self._buf.len());
|
|
101
102
|
cond(
|
|
102
103
|
(space == usize(0)) => {
|
|
103
104
|
// Buffer full, flush it
|
|
104
|
-
flush_result := io.await(self._flush_inner(
|
|
105
|
+
flush_result := io.await(self._flush_inner(io), io);
|
|
105
106
|
match(
|
|
106
107
|
flush_result,
|
|
107
108
|
.Err(e) => {
|
|
@@ -133,24 +134,24 @@ impl(
|
|
|
133
134
|
})
|
|
134
135
|
}),
|
|
135
136
|
// Write a String to the buffer.
|
|
136
|
-
write_string : (fn(self : Self, s : String,
|
|
137
|
-
io.async((
|
|
137
|
+
write_string : (fn(self : Self, s : String, io : Io) -> Impl(Future(Result(i32, IoError), Io)))(
|
|
138
|
+
io.async((io) => {
|
|
138
139
|
bytes := s.as_bytes();
|
|
139
|
-
result := io.await(self.write(bytes.ptr().unwrap(), u32(bytes.len()),
|
|
140
|
+
result := io.await(self.write(bytes.ptr().unwrap(), u32(bytes.len()), io), io);
|
|
140
141
|
result
|
|
141
142
|
})
|
|
142
143
|
),
|
|
143
144
|
// Write bytes from an ArrayList to the buffer.
|
|
144
|
-
write_bytes : (fn(self : Self, data : ArrayList(u8),
|
|
145
|
-
io.async((
|
|
146
|
-
result := io.await(self.write(data.ptr().unwrap(), u32(data.len()),
|
|
145
|
+
write_bytes : (fn(self : Self, data : ArrayList(u8), io : Io) -> Impl(Future(Result(i32, IoError), Io)))(
|
|
146
|
+
io.async((io) => {
|
|
147
|
+
result := io.await(self.write(data.ptr().unwrap(), u32(data.len()), io), io);
|
|
147
148
|
result
|
|
148
149
|
})
|
|
149
150
|
),
|
|
150
151
|
// Flush all buffered data to the underlying file descriptor.
|
|
151
|
-
flush : (fn(self : Self,
|
|
152
|
-
io.async((
|
|
153
|
-
flush_result := io.await(self._flush_inner(
|
|
152
|
+
flush : (fn(self : Self, io : Io) -> Impl(Future(Result(unit, IoError), Io)))(
|
|
153
|
+
io.async((io) => {
|
|
154
|
+
flush_result := io.await(self._flush_inner(io), io);
|
|
154
155
|
flush_result
|
|
155
156
|
})
|
|
156
157
|
)
|
package/std/sys/clock.yo
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
//!
|
|
3
3
|
//! Provides a synchronous wrapper for reading wall-clock and monotonic time.
|
|
4
4
|
//! Returns 0 on success, -errno / negative platform error on failure.
|
|
5
|
+
pragma(Pragma.AllowUnsafe);
|
|
5
6
|
{ platform, Platform } :: import("../process");
|
|
6
7
|
{ __yo_sync_clock_gettime } :: import("./externs.yo");
|
|
7
8
|
// Wall clock time (Unix epoch seconds + nanoseconds)
|
package/std/sys/copy.yo
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
//!
|
|
8
8
|
//! - `copyfile`: 0 on success, -errno on failure
|
|
9
9
|
//! - `sendfile`: bytes transferred on success, -errno on failure
|
|
10
|
+
pragma(Pragma.AllowUnsafe);
|
|
10
11
|
{ __yo_sync_copyfile, __yo_sync_sendfile } :: import("./externs.yo");
|
|
11
12
|
// Copy a file using kernel-accelerated copy.
|
|
12
13
|
// flags: 0 = default, 1 = COPYFILE_EXCL (fail if dst exists)
|
package/std/sys/dir.yo
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//! Provides low-level directory manipulation wrappers around C runtime externs.
|
|
4
4
|
//!
|
|
5
5
|
//! Async operations (`mkdir`, `unlink`, `rename`, `symlink`, `link`, `getdents`)
|
|
6
|
-
//! return `
|
|
6
|
+
//! return `IoFuture` which resolves to:
|
|
7
7
|
//! - 0 on success (for mkdir, unlink, rename, symlink, link)
|
|
8
8
|
//! - Bytes read for getdents
|
|
9
9
|
//! - Negative value: -errno on failure
|
|
@@ -20,35 +20,36 @@
|
|
|
20
20
|
// result := await mkdir(AT_FDCWD, *(u8)("/tmp/yo_test_dir"), i32(0o755));
|
|
21
21
|
// assert(result == i32(0));
|
|
22
22
|
// };
|
|
23
|
-
|
|
23
|
+
pragma(Pragma.AllowUnsafe);
|
|
24
|
+
{ IoFuture } :: import("./future.yo");
|
|
24
25
|
{ __yo_async_mkdirat_start, __yo_async_unlinkat_start, __yo_async_renameat_start, __yo_async_symlinkat_start, __yo_async_linkat_start, __yo_sync_readlinkat, __yo_async_getdents_start, __yo_dirent_size, __yo_dirent_reclen, __yo_dirent_type, __yo_dirent_name, __yo_dirent_ino } :: import("./externs.yo");
|
|
25
26
|
// ============================================================================
|
|
26
|
-
// Async Directory Operations (return
|
|
27
|
+
// Async Directory Operations (return IoFuture, use with await)
|
|
27
28
|
// ============================================================================
|
|
28
29
|
// Create a directory relative to dirfd. Use AT_FDCWD for current directory.
|
|
29
30
|
// Returns 0 on success, -errno on failure.
|
|
30
|
-
mkdir :: (fn(dirfd : i32, path : *(u8), mode : i32) ->
|
|
31
|
+
mkdir :: (fn(dirfd : i32, path : *(u8), mode : i32) -> IoFuture)(
|
|
31
32
|
__yo_async_mkdirat_start(dirfd, path, mode)
|
|
32
33
|
);
|
|
33
34
|
// Remove a file or directory relative to dirfd.
|
|
34
35
|
// Use flags=0 for files, flags=AT_REMOVEDIR (0x200) for directories.
|
|
35
36
|
// Returns 0 on success, -errno on failure.
|
|
36
|
-
unlink :: (fn(dirfd : i32, path : *(u8), flags : i32) ->
|
|
37
|
+
unlink :: (fn(dirfd : i32, path : *(u8), flags : i32) -> IoFuture)(
|
|
37
38
|
__yo_async_unlinkat_start(dirfd, path, flags)
|
|
38
39
|
);
|
|
39
40
|
// Rename/move a file or directory.
|
|
40
41
|
// Returns 0 on success, -errno on failure.
|
|
41
|
-
rename :: (fn(olddirfd : i32, oldpath : *(u8), newdirfd : i32, newpath : *(u8)) ->
|
|
42
|
+
rename :: (fn(olddirfd : i32, oldpath : *(u8), newdirfd : i32, newpath : *(u8)) -> IoFuture)(
|
|
42
43
|
__yo_async_renameat_start(olddirfd, oldpath, newdirfd, newpath)
|
|
43
44
|
);
|
|
44
45
|
// Create a symbolic link at linkpath pointing to target.
|
|
45
46
|
// Returns 0 on success, -errno on failure.
|
|
46
|
-
symlink :: (fn(target : *(u8), newdirfd : i32, linkpath : *(u8)) ->
|
|
47
|
+
symlink :: (fn(target : *(u8), newdirfd : i32, linkpath : *(u8)) -> IoFuture)(
|
|
47
48
|
__yo_async_symlinkat_start(target, newdirfd, linkpath)
|
|
48
49
|
);
|
|
49
50
|
// Create a hard link from oldpath to newpath.
|
|
50
51
|
// Returns 0 on success, -errno on failure.
|
|
51
|
-
link :: (fn(olddirfd : i32, oldpath : *(u8), newdirfd : i32, newpath : *(u8), flags : i32) ->
|
|
52
|
+
link :: (fn(olddirfd : i32, oldpath : *(u8), newdirfd : i32, newpath : *(u8), flags : i32) -> IoFuture)(
|
|
52
53
|
__yo_async_linkat_start(olddirfd, oldpath, newdirfd, newpath, flags)
|
|
53
54
|
);
|
|
54
55
|
// Read the target of a symbolic link into buf.
|
|
@@ -93,7 +94,7 @@ readlink :: (fn(dirfd : i32, path : *(u8), buf : *(u8), bufsize : usize) -> i32)
|
|
|
93
94
|
// free(.Some(*(void)(buf)));
|
|
94
95
|
// await close(fd);
|
|
95
96
|
// };
|
|
96
|
-
getdents :: (fn(fd : i32, buf : *(u8), buf_size : u32) ->
|
|
97
|
+
getdents :: (fn(fd : i32, buf : *(u8), buf_size : u32) -> IoFuture)(
|
|
97
98
|
__yo_async_getdents_start(fd, buf, buf_size)
|
|
98
99
|
);
|
|
99
100
|
// ============================================================================
|
package/std/sys/dns.yo
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//! Provides async DNS resolution wrapping `getaddrinfo`/`getnameinfo`, plus
|
|
4
4
|
//! accessors for iterating the linked list of `addrinfo` results.
|
|
5
5
|
//!
|
|
6
|
-
//! All async operations return `
|
|
6
|
+
//! All async operations return `IoFuture` which resolves to:
|
|
7
7
|
//! - 0: success
|
|
8
8
|
//! - Non-zero: raw `gai_error` code (`EAI_NONAME`, `EAI_AGAIN`, etc.)
|
|
9
9
|
//
|
|
@@ -36,12 +36,13 @@
|
|
|
36
36
|
// );
|
|
37
37
|
// dns.free_result(result_ptr);
|
|
38
38
|
// };
|
|
39
|
+
pragma(Pragma.AllowUnsafe);
|
|
39
40
|
{ GlobalAllocator } :: import("../allocator");
|
|
40
41
|
{ malloc, free } :: GlobalAllocator;
|
|
41
|
-
{
|
|
42
|
+
{ IoFuture } :: import("./future.yo");
|
|
42
43
|
{ __yo_async_getaddrinfo_start, __yo_async_getnameinfo_start, __yo_freeaddrinfo, __yo_addrinfo_size, __yo_addrinfo_flags, __yo_addrinfo_family, __yo_addrinfo_socktype, __yo_addrinfo_protocol, __yo_addrinfo_addrlen, __yo_addrinfo_addr, __yo_addrinfo_canonname, __yo_addrinfo_next } :: import("./externs.yo");
|
|
43
44
|
// ============================================================================
|
|
44
|
-
// DNS Resolution (return
|
|
45
|
+
// DNS Resolution (return IoFuture, use with await)
|
|
45
46
|
// ============================================================================
|
|
46
47
|
// Resolve hostname to a linked list of addrinfo results.
|
|
47
48
|
// node: hostname or IP string (e.g. "localhost", "example.com")
|
|
@@ -50,7 +51,7 @@
|
|
|
50
51
|
// result: pointer to a ?*(u8) that will receive the head of the result list
|
|
51
52
|
// Returns 0 on success, non-zero gai_error on failure.
|
|
52
53
|
// Caller must call freeaddrinfo() on the result when done.
|
|
53
|
-
getaddrinfo :: (fn(node : *(u8), service : ?*(u8), hints : ?*(u8), result : *(?*(u8))) ->
|
|
54
|
+
getaddrinfo :: (fn(node : *(u8), service : ?*(u8), hints : ?*(u8), result : *(?*(u8))) -> IoFuture)(
|
|
54
55
|
__yo_async_getaddrinfo_start(node, service, hints, result)
|
|
55
56
|
);
|
|
56
57
|
// Reverse lookup: convert a socket address to hostname and service strings.
|
|
@@ -62,7 +63,7 @@ getaddrinfo :: (fn(node : *(u8), service : ?*(u8), hints : ?*(u8), result : *(?*
|
|
|
62
63
|
// servlen: size of service buffer
|
|
63
64
|
// flags: NI_NUMERICHOST, NI_NUMERICSERV, etc.
|
|
64
65
|
// Returns 0 on success, -gai_error on failure.
|
|
65
|
-
getnameinfo :: (fn(addr : *(u8), addrlen : u32, host : *(u8), hostlen : usize, service : *(u8), servlen : usize, flags : i32) ->
|
|
66
|
+
getnameinfo :: (fn(addr : *(u8), addrlen : u32, host : *(u8), hostlen : usize, service : *(u8), servlen : usize, flags : i32) -> IoFuture)(
|
|
66
67
|
__yo_async_getnameinfo_start(addr, addrlen, host, hostlen, service, servlen, flags)
|
|
67
68
|
);
|
|
68
69
|
// Free an addrinfo result list returned by getaddrinfo.
|
package/std/sys/errors.yo
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
//! `
|
|
1
|
+
//! `IoError` type — comprehensive I/O error type with errno-to-error mapping.
|
|
2
2
|
{ String } :: import("../string");
|
|
3
3
|
{ ToString } :: import("../fmt");
|
|
4
4
|
{ Error, Exception } :: import("../error");
|
|
5
5
|
{ ENOENT, EPERM, EACCES, EEXIST, ENOTDIR, EISDIR, ENOTEMPTY, EPIPE, EAGAIN, EWOULDBLOCK, EINVAL, EINTR, EMFILE, ENFILE, EFBIG, ENOSPC, EROFS, EXDEV, EMLINK, ENAMETOOLONG, ENOTSUP, EOPNOTSUPP, ETIMEDOUT, EBUSY, ECONNREFUSED, ECONNRESET, ECONNABORTED, ENOTCONN, EADDRINUSE, EADDRNOTAVAIL, ENETUNREACH, EHOSTUNREACH, ENETDOWN, EISCONN, EBADF, EIO } :: import("../libc/errno");
|
|
6
6
|
// ============================================================================
|
|
7
|
-
//
|
|
7
|
+
// IoError - I/O error type
|
|
8
8
|
// ============================================================================
|
|
9
9
|
/// Comprehensive I/O error type with errno-to-error mapping.
|
|
10
|
-
|
|
10
|
+
IoError :: enum(
|
|
11
11
|
/// File or directory not found (ENOENT).
|
|
12
12
|
NotFound,
|
|
13
13
|
/// Permission denied (EACCES, EPERM).
|
|
@@ -51,7 +51,7 @@ IOError :: enum(
|
|
|
51
51
|
/// Bad file descriptor (EBADF).
|
|
52
52
|
BadFileDescriptor,
|
|
53
53
|
/// Generic I/O error (EIO).
|
|
54
|
-
|
|
54
|
+
IoError,
|
|
55
55
|
/// Connection refused (ECONNREFUSED).
|
|
56
56
|
ConnectionRefused,
|
|
57
57
|
/// Connection reset by peer (ECONNRESET).
|
|
@@ -76,7 +76,7 @@ IOError :: enum(
|
|
|
76
76
|
Other(code : i32)
|
|
77
77
|
);
|
|
78
78
|
impl(
|
|
79
|
-
|
|
79
|
+
IoError,
|
|
80
80
|
from_errno : (fn(errno : i32) -> Self)(
|
|
81
81
|
cond(
|
|
82
82
|
(errno == i32(ENOENT)) =>.NotFound,
|
|
@@ -100,7 +100,7 @@ impl(
|
|
|
100
100
|
(errno == i32(ETIMEDOUT)) =>.TimedOut,
|
|
101
101
|
(errno == i32(EBUSY)) =>.Busy,
|
|
102
102
|
(errno == i32(EBADF)) =>.BadFileDescriptor,
|
|
103
|
-
(errno == i32(EIO)) =>.
|
|
103
|
+
(errno == i32(EIO)) =>.IoError,
|
|
104
104
|
(errno == i32(ECONNREFUSED)) =>.ConnectionRefused,
|
|
105
105
|
(errno == i32(ECONNRESET)) =>.ConnectionReset,
|
|
106
106
|
(errno == i32(ECONNABORTED)) =>.ConnectionAborted,
|
|
@@ -122,7 +122,7 @@ impl(
|
|
|
122
122
|
)
|
|
123
123
|
);
|
|
124
124
|
impl(
|
|
125
|
-
|
|
125
|
+
IoError,
|
|
126
126
|
ToString(
|
|
127
127
|
to_string : (
|
|
128
128
|
self -> {
|
|
@@ -149,7 +149,7 @@ impl(
|
|
|
149
149
|
.TimedOut => String.from("operation timed out"),
|
|
150
150
|
.Busy => String.from("resource busy"),
|
|
151
151
|
.BadFileDescriptor => String.from("bad file descriptor"),
|
|
152
|
-
.
|
|
152
|
+
.IoError => String.from("I/O error"),
|
|
153
153
|
.ConnectionRefused => String.from("connection refused"),
|
|
154
154
|
.ConnectionReset => String.from("connection reset by peer"),
|
|
155
155
|
.ConnectionAborted => String.from("connection aborted"),
|
|
@@ -167,15 +167,15 @@ impl(
|
|
|
167
167
|
)
|
|
168
168
|
)
|
|
169
169
|
);
|
|
170
|
-
impl(
|
|
170
|
+
impl(IoError, Error());
|
|
171
171
|
impl(
|
|
172
|
-
|
|
172
|
+
IoError,
|
|
173
173
|
// Check a raw result code, throwing on error via Exception effect.
|
|
174
|
-
check : (fn(result : i32,
|
|
174
|
+
check : (fn(result : i32, exn : Exception) -> i32)(
|
|
175
175
|
cond(
|
|
176
176
|
(result >= i32(0)) => result,
|
|
177
177
|
true => exn.throw(dyn(Self.from_errno(i32(0) - result)))
|
|
178
178
|
)
|
|
179
179
|
)
|
|
180
180
|
);
|
|
181
|
-
export(
|
|
181
|
+
export(IoError);
|
package/std/sys/events.yo
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
//! TTY, Poll, and FS Event constants.
|
|
2
|
+
pragma(Pragma.AllowUnsafe);
|
|
2
3
|
{ __yo_fs_event_init, __yo_fs_event_start, __yo_fs_event_stop, __yo_fs_event_close, __yo_poll_init, __yo_poll_start, __yo_poll_stop, __yo_poll_close } :: import("./externs.yo");
|
|
3
4
|
// ============================================================================
|
|
4
5
|
// TTY Mode Constants (libuv uv_tty_mode_t equivalent)
|
package/std/sys/externs.yo
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
//! Extern C runtime function declarations.
|
|
2
2
|
//!
|
|
3
3
|
//! All low-level extern functions for async I/O operations.
|
|
4
|
-
|
|
4
|
+
pragma(Pragma.AllowUnsafe);
|
|
5
|
+
{ IoFuture } :: import("./future.yo");
|
|
5
6
|
// ============================================================================
|
|
6
7
|
// Extern C runtime functions
|
|
7
8
|
// ============================================================================
|
|
@@ -10,23 +11,23 @@ extern(
|
|
|
10
11
|
// ========================================================================
|
|
11
12
|
// File Operations
|
|
12
13
|
// ========================================================================
|
|
13
|
-
__yo_async_read_start : (fn(fd : i32, buffer : *(u8), size : u32, offset : u64) ->
|
|
14
|
-
__yo_async_write_start : (fn(fd : i32, buffer : *(u8), size : u32, offset : u64) ->
|
|
15
|
-
__yo_async_openat_start : (fn(dirfd : i32, path : *(u8), flags : i32, mode : i32) ->
|
|
16
|
-
__yo_async_close_start : (fn(fd : i32) ->
|
|
17
|
-
__yo_async_statx_start : (fn(dirfd : i32, path : *(u8), flags : i32, mask : u32, statxbuf : *(u8)) ->
|
|
18
|
-
__yo_async_mkdirat_start : (fn(dirfd : i32, path : *(u8), mode : i32) ->
|
|
19
|
-
__yo_async_unlinkat_start : (fn(dirfd : i32, path : *(u8), flags : i32) ->
|
|
20
|
-
__yo_async_renameat_start : (fn(olddirfd : i32, oldpath : *(u8), newdirfd : i32, newpath : *(u8)) ->
|
|
21
|
-
__yo_async_symlinkat_start : (fn(target : *(u8), newdirfd : i32, linkpath : *(u8)) ->
|
|
22
|
-
__yo_async_linkat_start : (fn(olddirfd : i32, oldpath : *(u8), newdirfd : i32, newpath : *(u8), flags : i32) ->
|
|
23
|
-
__yo_async_fsync_start : (fn(fd : i32) ->
|
|
24
|
-
__yo_async_fdatasync_start : (fn(fd : i32) ->
|
|
25
|
-
__yo_async_ftruncate_start : (fn(fd : i32, length : i64) ->
|
|
14
|
+
__yo_async_read_start : (fn(fd : i32, buffer : *(u8), size : u32, offset : u64) -> IoFuture),
|
|
15
|
+
__yo_async_write_start : (fn(fd : i32, buffer : *(u8), size : u32, offset : u64) -> IoFuture),
|
|
16
|
+
__yo_async_openat_start : (fn(dirfd : i32, path : *(u8), flags : i32, mode : i32) -> IoFuture),
|
|
17
|
+
__yo_async_close_start : (fn(fd : i32) -> IoFuture),
|
|
18
|
+
__yo_async_statx_start : (fn(dirfd : i32, path : *(u8), flags : i32, mask : u32, statxbuf : *(u8)) -> IoFuture),
|
|
19
|
+
__yo_async_mkdirat_start : (fn(dirfd : i32, path : *(u8), mode : i32) -> IoFuture),
|
|
20
|
+
__yo_async_unlinkat_start : (fn(dirfd : i32, path : *(u8), flags : i32) -> IoFuture),
|
|
21
|
+
__yo_async_renameat_start : (fn(olddirfd : i32, oldpath : *(u8), newdirfd : i32, newpath : *(u8)) -> IoFuture),
|
|
22
|
+
__yo_async_symlinkat_start : (fn(target : *(u8), newdirfd : i32, linkpath : *(u8)) -> IoFuture),
|
|
23
|
+
__yo_async_linkat_start : (fn(olddirfd : i32, oldpath : *(u8), newdirfd : i32, newpath : *(u8), flags : i32) -> IoFuture),
|
|
24
|
+
__yo_async_fsync_start : (fn(fd : i32) -> IoFuture),
|
|
25
|
+
__yo_async_fdatasync_start : (fn(fd : i32) -> IoFuture),
|
|
26
|
+
__yo_async_ftruncate_start : (fn(fd : i32, length : i64) -> IoFuture),
|
|
26
27
|
// ========================================================================
|
|
27
28
|
// Directory Listing (for fs.readdir)
|
|
28
29
|
// ========================================================================
|
|
29
|
-
__yo_async_getdents_start : (fn(fd : i32, buf : *(u8), buf_size : u32) ->
|
|
30
|
+
__yo_async_getdents_start : (fn(fd : i32, buf : *(u8), buf_size : u32) -> IoFuture),
|
|
30
31
|
__yo_dirent_size : (fn() -> usize),
|
|
31
32
|
__yo_dirent_reclen : (fn(entry : *(u8)) -> u16),
|
|
32
33
|
__yo_dirent_type : (fn(entry : *(u8)) -> u8),
|
|
@@ -41,18 +42,18 @@ extern(
|
|
|
41
42
|
// ========================================================================
|
|
42
43
|
// Socket Operations (for tcp, udp, unix sockets)
|
|
43
44
|
// ========================================================================
|
|
44
|
-
__yo_async_socket_start : (fn(domain : i32, sock_type : i32, protocol : i32) ->
|
|
45
|
-
__yo_async_bind_start : (fn(sockfd : i32, addr : *(u8), addrlen : u32) ->
|
|
46
|
-
__yo_async_listen_start : (fn(sockfd : i32, backlog : i32) ->
|
|
47
|
-
__yo_async_accept_start : (fn(sockfd : i32, addr : *(u8), addrlen : *(u32)) ->
|
|
48
|
-
__yo_async_connect_start : (fn(sockfd : i32, addr : *(u8), addrlen : u32) ->
|
|
49
|
-
__yo_async_send_start : (fn(sockfd : i32, buf : *(u8), len : usize, flags : i32) ->
|
|
50
|
-
__yo_async_recv_start : (fn(sockfd : i32, buf : *(u8), len : usize, flags : i32) ->
|
|
51
|
-
__yo_async_sendto_start : (fn(sockfd : i32, buf : *(u8), len : usize, flags : i32, dest_addr : *(u8), addrlen : u32) ->
|
|
52
|
-
__yo_async_recvfrom_start : (fn(sockfd : i32, buf : *(u8), len : usize, flags : i32, src_addr : *(u8), addrlen : *(u32)) ->
|
|
53
|
-
__yo_async_shutdown_start : (fn(sockfd : i32, how : i32) ->
|
|
54
|
-
__yo_async_setsockopt_start : (fn(sockfd : i32, level : i32, optname : i32, optval : *(u8), optlen : u32) ->
|
|
55
|
-
__yo_async_getsockopt_start : (fn(sockfd : i32, level : i32, optname : i32, optval : *(u8), optlen : *(u32)) ->
|
|
45
|
+
__yo_async_socket_start : (fn(domain : i32, sock_type : i32, protocol : i32) -> IoFuture),
|
|
46
|
+
__yo_async_bind_start : (fn(sockfd : i32, addr : *(u8), addrlen : u32) -> IoFuture),
|
|
47
|
+
__yo_async_listen_start : (fn(sockfd : i32, backlog : i32) -> IoFuture),
|
|
48
|
+
__yo_async_accept_start : (fn(sockfd : i32, addr : *(u8), addrlen : *(u32)) -> IoFuture),
|
|
49
|
+
__yo_async_connect_start : (fn(sockfd : i32, addr : *(u8), addrlen : u32) -> IoFuture),
|
|
50
|
+
__yo_async_send_start : (fn(sockfd : i32, buf : *(u8), len : usize, flags : i32) -> IoFuture),
|
|
51
|
+
__yo_async_recv_start : (fn(sockfd : i32, buf : *(u8), len : usize, flags : i32) -> IoFuture),
|
|
52
|
+
__yo_async_sendto_start : (fn(sockfd : i32, buf : *(u8), len : usize, flags : i32, dest_addr : *(u8), addrlen : u32) -> IoFuture),
|
|
53
|
+
__yo_async_recvfrom_start : (fn(sockfd : i32, buf : *(u8), len : usize, flags : i32, src_addr : *(u8), addrlen : *(u32)) -> IoFuture),
|
|
54
|
+
__yo_async_shutdown_start : (fn(sockfd : i32, how : i32) -> IoFuture),
|
|
55
|
+
__yo_async_setsockopt_start : (fn(sockfd : i32, level : i32, optname : i32, optval : *(u8), optlen : u32) -> IoFuture),
|
|
56
|
+
__yo_async_getsockopt_start : (fn(sockfd : i32, level : i32, optname : i32, optval : *(u8), optlen : *(u32)) -> IoFuture),
|
|
56
57
|
__yo_sync_getsockname : (fn(sockfd : i32, addr : *(u8), addrlen : *(u32)) -> i32),
|
|
57
58
|
__yo_sync_getpeername : (fn(sockfd : i32, addr : *(u8), addrlen : *(u32)) -> i32),
|
|
58
59
|
__yo_sync_setsockopt : (fn(sockfd : i32, level : i32, optname : i32, optval : *(u8), optlen : u32) -> i32),
|
|
@@ -68,8 +69,8 @@ extern(
|
|
|
68
69
|
// ========================================================================
|
|
69
70
|
// Process Operations
|
|
70
71
|
// ========================================================================
|
|
71
|
-
__yo_async_spawn_start : (fn(file : *(u8), argv : *(?*(u8)), envp : ?*(?*(u8)), stdin_fd : i32, stdout_fd : i32, stderr_fd : i32) ->
|
|
72
|
-
__yo_async_waitpid_start : (fn(pid : i32, options : i32) ->
|
|
72
|
+
__yo_async_spawn_start : (fn(file : *(u8), argv : *(?*(u8)), envp : ?*(?*(u8)), stdin_fd : i32, stdout_fd : i32, stderr_fd : i32) -> IoFuture),
|
|
73
|
+
__yo_async_waitpid_start : (fn(pid : i32, options : i32) -> IoFuture),
|
|
73
74
|
__yo_process_exit_status : (fn(status : i32) -> i32),
|
|
74
75
|
__yo_process_term_signal : (fn(status : i32) -> i32),
|
|
75
76
|
// ========================================================================
|
|
@@ -128,7 +129,7 @@ extern(
|
|
|
128
129
|
// ========================================================================
|
|
129
130
|
// Timer Operations
|
|
130
131
|
// ========================================================================
|
|
131
|
-
__yo_async_sleep_start : (fn(milliseconds : u64) ->
|
|
132
|
+
__yo_async_sleep_start : (fn(milliseconds : u64) -> IoFuture),
|
|
132
133
|
// ========================================================================
|
|
133
134
|
// File Extra Operations (async only: sleep remains async)
|
|
134
135
|
// ========================================================================
|
|
@@ -143,15 +144,15 @@ extern(
|
|
|
143
144
|
// ========================================================================
|
|
144
145
|
// Directory Scanning
|
|
145
146
|
// ========================================================================
|
|
146
|
-
__yo_async_scandir_start : (fn(dirfd : i32, path : *(u8)) ->
|
|
147
|
-
__yo_async_opendir_start : (fn(path : *(u8)) ->
|
|
148
|
-
__yo_async_readdir_start : (fn(dir : *(u8), entries : *(u8), max_entries : usize) ->
|
|
149
|
-
__yo_async_closedir_start : (fn(dir : *(u8)) ->
|
|
147
|
+
__yo_async_scandir_start : (fn(dirfd : i32, path : *(u8)) -> IoFuture),
|
|
148
|
+
__yo_async_opendir_start : (fn(path : *(u8)) -> IoFuture),
|
|
149
|
+
__yo_async_readdir_start : (fn(dir : *(u8), entries : *(u8), max_entries : usize) -> IoFuture),
|
|
150
|
+
__yo_async_closedir_start : (fn(dir : *(u8)) -> IoFuture),
|
|
150
151
|
// ========================================================================
|
|
151
152
|
// DNS Operations
|
|
152
153
|
// ========================================================================
|
|
153
|
-
__yo_async_getaddrinfo_start : (fn(node : *(u8), service : ?*(u8), hints : ?*(u8), result : *(?*(u8))) ->
|
|
154
|
-
__yo_async_getnameinfo_start : (fn(addr : *(u8), addrlen : u32, host : *(u8), hostlen : usize, service : *(u8), servlen : usize, flags : i32) ->
|
|
154
|
+
__yo_async_getaddrinfo_start : (fn(node : *(u8), service : ?*(u8), hints : ?*(u8), result : *(?*(u8))) -> IoFuture),
|
|
155
|
+
__yo_async_getnameinfo_start : (fn(addr : *(u8), addrlen : u32, host : *(u8), hostlen : usize, service : *(u8), servlen : usize, flags : i32) -> IoFuture),
|
|
155
156
|
__yo_freeaddrinfo : (fn(res : *(u8)) -> unit),
|
|
156
157
|
__yo_addrinfo_size : (fn() -> usize),
|
|
157
158
|
__yo_addrinfo_flags : (fn(ai : *(u8)) -> i32),
|
|
@@ -191,7 +192,7 @@ extern(
|
|
|
191
192
|
__yo_poll_stop : (fn(handle : *(u8)) -> i32),
|
|
192
193
|
__yo_poll_close : (fn(handle : *(u8)) -> unit),
|
|
193
194
|
// ========================================================================
|
|
194
|
-
// Synchronous Operations (no
|
|
195
|
+
// Synchronous Operations (no IoFuture overhead)
|
|
195
196
|
// ========================================================================
|
|
196
197
|
__yo_sync_pipe : (fn(pipefd : *(i32)) -> i32),
|
|
197
198
|
__yo_sync_dup : (fn(oldfd : i32) -> i32),
|