@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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@shd101wyy/yo",
3
3
  "displayName": "Yo",
4
- "version": "0.1.31",
4
+ "version": "0.1.32",
5
5
  "main": "./out/cjs/index.cjs",
6
6
  "module": "./out/esm/index.mjs",
7
7
  "types": "./out/types/src/index.d.ts",
@@ -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(obj : *(atomic_schar), expected : *(i8), desired : i8,
288
- success : memory_order, failure : memory_order) -> bool,
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(obj : *(atomic_short), expected : *(i16), desired : i16,
297
- success : memory_order, failure : memory_order) -> bool,
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(obj : *(atomic_uchar), expected : *(u8), desired : u8,
306
- success : memory_order, failure : memory_order) -> bool,
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(obj : *(atomic_ushort), expected : *(u16), desired : u16,
315
- success : memory_order, failure : memory_order) -> bool,
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(obj : *(atomic_uint), expected : *(u32), desired : u32,
324
- success : memory_order, failure : memory_order) -> bool,
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(obj : *(atomic_ullong), expected : *(u64), desired : u64,
333
- success : memory_order, failure : memory_order) -> bool,
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(obj : *(atomic_ptrdiff_t), expected : *(isize), desired : isize,
342
- success : memory_order, failure : memory_order) -> bool
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);