@shd101wyy/yo 0.1.31 → 0.1.32
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-syntax/syntax-cheatsheet.md +38 -0
- package/out/cjs/index.cjs +626 -618
- package/out/cjs/yo-cli.cjs +647 -639
- package/out/cjs/yo-lsp.cjs +519 -511
- package/out/esm/index.mjs +469 -461
- package/out/types/src/evaluator/builtins/contracts.d.ts +35 -0
- package/out/types/src/evaluator/memory-safety.d.ts +1 -1
- package/out/types/src/evaluator/types/function.d.ts +2 -0
- package/out/types/src/expr.d.ts +6 -0
- package/out/types/src/tests/contracts-comptime-violation.test.d.ts +1 -0
- package/out/types/src/tests/contracts-runtime-violation.test.d.ts +1 -0
- package/out/types/src/types/creators.d.ts +3 -1
- package/out/types/src/types/definitions.d.ts +2 -0
- package/out/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/std/libc/stdatomic.yo +49 -14
- package/std/prelude.yo +11 -1
- package/std/spec/numeric.yo +30 -0
- package/std/spec/refine.yo +43 -0
package/package.json
CHANGED
package/std/libc/stdatomic.yo
CHANGED
|
@@ -284,8 +284,13 @@ extern(
|
|
|
284
284
|
__yo_atomic_exchange_schar :
|
|
285
285
|
fn(obj : *(atomic_schar), desired : i8, order : memory_order) -> i8,
|
|
286
286
|
__yo_atomic_compare_exchange_schar :
|
|
287
|
-
fn(
|
|
288
|
-
|
|
287
|
+
fn(
|
|
288
|
+
obj : *(atomic_schar),
|
|
289
|
+
expected : *(i8),
|
|
290
|
+
desired : i8,
|
|
291
|
+
success : memory_order,
|
|
292
|
+
failure : memory_order
|
|
293
|
+
) -> bool,
|
|
289
294
|
__yo_atomic_load_short :
|
|
290
295
|
fn(obj : *(atomic_short), order : memory_order) -> i16,
|
|
291
296
|
__yo_atomic_store_short :
|
|
@@ -293,8 +298,13 @@ extern(
|
|
|
293
298
|
__yo_atomic_exchange_short :
|
|
294
299
|
fn(obj : *(atomic_short), desired : i16, order : memory_order) -> i16,
|
|
295
300
|
__yo_atomic_compare_exchange_short :
|
|
296
|
-
fn(
|
|
297
|
-
|
|
301
|
+
fn(
|
|
302
|
+
obj : *(atomic_short),
|
|
303
|
+
expected : *(i16),
|
|
304
|
+
desired : i16,
|
|
305
|
+
success : memory_order,
|
|
306
|
+
failure : memory_order
|
|
307
|
+
) -> bool,
|
|
298
308
|
__yo_atomic_load_uchar :
|
|
299
309
|
fn(obj : *(atomic_uchar), order : memory_order) -> u8,
|
|
300
310
|
__yo_atomic_store_uchar :
|
|
@@ -302,8 +312,13 @@ extern(
|
|
|
302
312
|
__yo_atomic_exchange_uchar :
|
|
303
313
|
fn(obj : *(atomic_uchar), desired : u8, order : memory_order) -> u8,
|
|
304
314
|
__yo_atomic_compare_exchange_uchar :
|
|
305
|
-
fn(
|
|
306
|
-
|
|
315
|
+
fn(
|
|
316
|
+
obj : *(atomic_uchar),
|
|
317
|
+
expected : *(u8),
|
|
318
|
+
desired : u8,
|
|
319
|
+
success : memory_order,
|
|
320
|
+
failure : memory_order
|
|
321
|
+
) -> bool,
|
|
307
322
|
__yo_atomic_load_ushort :
|
|
308
323
|
fn(obj : *(atomic_ushort), order : memory_order) -> u16,
|
|
309
324
|
__yo_atomic_store_ushort :
|
|
@@ -311,8 +326,13 @@ extern(
|
|
|
311
326
|
__yo_atomic_exchange_ushort :
|
|
312
327
|
fn(obj : *(atomic_ushort), desired : u16, order : memory_order) -> u16,
|
|
313
328
|
__yo_atomic_compare_exchange_ushort :
|
|
314
|
-
fn(
|
|
315
|
-
|
|
329
|
+
fn(
|
|
330
|
+
obj : *(atomic_ushort),
|
|
331
|
+
expected : *(u16),
|
|
332
|
+
desired : u16,
|
|
333
|
+
success : memory_order,
|
|
334
|
+
failure : memory_order
|
|
335
|
+
) -> bool,
|
|
316
336
|
__yo_atomic_load_uint :
|
|
317
337
|
fn(obj : *(atomic_uint), order : memory_order) -> u32,
|
|
318
338
|
__yo_atomic_store_uint :
|
|
@@ -320,8 +340,13 @@ extern(
|
|
|
320
340
|
__yo_atomic_exchange_uint :
|
|
321
341
|
fn(obj : *(atomic_uint), desired : u32, order : memory_order) -> u32,
|
|
322
342
|
__yo_atomic_compare_exchange_uint :
|
|
323
|
-
fn(
|
|
324
|
-
|
|
343
|
+
fn(
|
|
344
|
+
obj : *(atomic_uint),
|
|
345
|
+
expected : *(u32),
|
|
346
|
+
desired : u32,
|
|
347
|
+
success : memory_order,
|
|
348
|
+
failure : memory_order
|
|
349
|
+
) -> bool,
|
|
325
350
|
__yo_atomic_load_ullong :
|
|
326
351
|
fn(obj : *(atomic_ullong), order : memory_order) -> u64,
|
|
327
352
|
__yo_atomic_store_ullong :
|
|
@@ -329,8 +354,13 @@ extern(
|
|
|
329
354
|
__yo_atomic_exchange_ullong :
|
|
330
355
|
fn(obj : *(atomic_ullong), desired : u64, order : memory_order) -> u64,
|
|
331
356
|
__yo_atomic_compare_exchange_ullong :
|
|
332
|
-
fn(
|
|
333
|
-
|
|
357
|
+
fn(
|
|
358
|
+
obj : *(atomic_ullong),
|
|
359
|
+
expected : *(u64),
|
|
360
|
+
desired : u64,
|
|
361
|
+
success : memory_order,
|
|
362
|
+
failure : memory_order
|
|
363
|
+
) -> bool,
|
|
334
364
|
__yo_atomic_load_ptrdiff :
|
|
335
365
|
fn(obj : *(atomic_ptrdiff_t), order : memory_order) -> isize,
|
|
336
366
|
__yo_atomic_store_ptrdiff :
|
|
@@ -338,8 +368,13 @@ extern(
|
|
|
338
368
|
__yo_atomic_exchange_ptrdiff :
|
|
339
369
|
fn(obj : *(atomic_ptrdiff_t), desired : isize, order : memory_order) -> isize,
|
|
340
370
|
__yo_atomic_compare_exchange_ptrdiff :
|
|
341
|
-
fn(
|
|
342
|
-
|
|
371
|
+
fn(
|
|
372
|
+
obj : *(atomic_ptrdiff_t),
|
|
373
|
+
expected : *(isize),
|
|
374
|
+
desired : isize,
|
|
375
|
+
success : memory_order,
|
|
376
|
+
failure : memory_order
|
|
377
|
+
) -> bool
|
|
343
378
|
);
|
|
344
379
|
export(
|
|
345
380
|
// Atomic types
|
package/std/prelude.yo
CHANGED
|
@@ -59,7 +59,17 @@ Pragma :: enum(
|
|
|
59
59
|
/// Test-runner directive: skip when target is wasm32-emscripten.
|
|
60
60
|
SkipWasm32Emscripten,
|
|
61
61
|
/// Test-runner directive: skip when target is wasm32-wasi.
|
|
62
|
-
SkipWasm32Wasi
|
|
62
|
+
SkipWasm32Wasi,
|
|
63
|
+
/// Formal verification: contracts in this file are proof obligations.
|
|
64
|
+
/// Phase 0 only registers the pragma; later phases will hook in
|
|
65
|
+
/// verification. See plans/FORMAL_VERIFICATION.md.
|
|
66
|
+
Verify,
|
|
67
|
+
/// Formal verification: try to prove, fall back to runtime assert
|
|
68
|
+
/// when proof times out. The production mode for verified code.
|
|
69
|
+
VerifyOrAssert,
|
|
70
|
+
/// Formal verification: erase contract clauses entirely (no proof,
|
|
71
|
+
/// no runtime assert). For release/benchmark builds.
|
|
72
|
+
NoContracts
|
|
63
73
|
);
|
|
64
74
|
export(Pragma);
|
|
65
75
|
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Phase 0 of plans/FORMAL_VERIFICATION.md task #7.
|
|
2
|
+
//
|
|
3
|
+
// Numeric refinement aliases. All Phase 0 implementations are
|
|
4
|
+
// type aliases; the verifier (Phase 2+) will attach concrete
|
|
5
|
+
// predicates and enforce them.
|
|
6
|
+
{ Refine } :: import("./refine.yo");
|
|
7
|
+
|
|
8
|
+
/// Even integer.
|
|
9
|
+
Even :: (fn(comptime(T) : Type) -> comptime(Type))(Refine(T));
|
|
10
|
+
export(Even);
|
|
11
|
+
|
|
12
|
+
/// Odd integer.
|
|
13
|
+
Odd :: (fn(comptime(T) : Type) -> comptime(Type))(Refine(T));
|
|
14
|
+
export(Odd);
|
|
15
|
+
|
|
16
|
+
/// Strictly positive value (> 0).
|
|
17
|
+
Positive :: (fn(comptime(T) : Type) -> comptime(Type))(Refine(T));
|
|
18
|
+
export(Positive);
|
|
19
|
+
|
|
20
|
+
/// Strictly negative value (< 0).
|
|
21
|
+
Negative :: (fn(comptime(T) : Type) -> comptime(Type))(Refine(T));
|
|
22
|
+
export(Negative);
|
|
23
|
+
|
|
24
|
+
/// Non-negative value (>= 0).
|
|
25
|
+
NonNegative :: (fn(comptime(T) : Type) -> comptime(Type))(Refine(T));
|
|
26
|
+
export(NonNegative);
|
|
27
|
+
|
|
28
|
+
/// Non-positive value (<= 0).
|
|
29
|
+
NonPositive :: (fn(comptime(T) : Type) -> comptime(Type))(Refine(T));
|
|
30
|
+
export(NonPositive);
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Phase 0 of plans/FORMAL_VERIFICATION.md task #7.
|
|
2
|
+
//
|
|
3
|
+
// `Refine`, `NonZero`, `Bounded` are comptime type constructors.
|
|
4
|
+
// In Phase 0 they all return their underlying type unchanged —
|
|
5
|
+
// effectively `Refine(T) = T`. The refinement predicate is
|
|
6
|
+
// documented as a future parameter; the verifier (Phase 2) will
|
|
7
|
+
// extend the surface to `Refine(T, predicate)` and enforce the
|
|
8
|
+
// predicate at construction sites.
|
|
9
|
+
//
|
|
10
|
+
// Even without enforcement, these aliases serve as
|
|
11
|
+
// human-and-LLM-readable signatures that signal intent. A function
|
|
12
|
+
// taking `denom : NonZero(i32)` documents the precondition; callers
|
|
13
|
+
// that want runtime enforcement can pair the alias with a
|
|
14
|
+
// `requires(denom != i32(0))` clause until the verifier lands.
|
|
15
|
+
/// A value of type `T` paired with a (compile-time) refinement
|
|
16
|
+
/// predicate. Phase 0 ignores the predicate; later phases will
|
|
17
|
+
/// require it as a second parameter and enforce it via
|
|
18
|
+
/// the SMT backend.
|
|
19
|
+
Refine :: (fn(comptime(T) : Type) -> comptime(Type))(T);
|
|
20
|
+
export(Refine);
|
|
21
|
+
|
|
22
|
+
/// `NonZero(T)` — values of `T` that are not zero. Phase 0 is a
|
|
23
|
+
/// type alias for `T`; future phases will enforce via verification.
|
|
24
|
+
NonZero :: (fn(comptime(T) : Type) -> comptime(Type))(Refine(T));
|
|
25
|
+
export(NonZero);
|
|
26
|
+
|
|
27
|
+
/// `Bounded(T, lo, hi)` — values of `T` in the closed range
|
|
28
|
+
/// `[lo, hi]`. Phase 0 is a type alias for `T`. T must be `Comptime`
|
|
29
|
+
/// so the bounds can be compile-time-known.
|
|
30
|
+
Bounded :: (
|
|
31
|
+
fn(
|
|
32
|
+
comptime(T) : Type,
|
|
33
|
+
comptime(_lo) : T,
|
|
34
|
+
comptime(_hi) : T,
|
|
35
|
+
where(T <: Comptime)
|
|
36
|
+
) -> comptime(Type)
|
|
37
|
+
)(Refine(T));
|
|
38
|
+
export(Bounded);
|
|
39
|
+
|
|
40
|
+
/// `NonEmpty(T)` — collection types with at least one element.
|
|
41
|
+
/// Phase 0 is a type alias for `T`.
|
|
42
|
+
NonEmpty :: (fn(comptime(T) : Type) -> comptime(Type))(Refine(T));
|
|
43
|
+
export(NonEmpty);
|