@zigc/lib 0.16.0-test.0 → 0.16.0
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/LICENSE +19 -0
- package/c/math.zig +135 -35
- package/c/stropts.zig +17 -0
- package/c.zig +1 -0
- package/compiler/aro/aro/Attribute/names.zig +604 -589
- package/compiler/aro/aro/Attribute.zig +202 -116
- package/compiler/aro/aro/Builtins/common.zig +874 -863
- package/compiler/aro/aro/Builtins/eval.zig +15 -7
- package/compiler/aro/aro/Builtins.zig +0 -1
- package/compiler/aro/aro/CodeGen.zig +3 -1
- package/compiler/aro/aro/Compilation.zig +120 -97
- package/compiler/aro/aro/Diagnostics.zig +21 -17
- package/compiler/aro/aro/Driver/GCCDetector.zig +635 -0
- package/compiler/aro/aro/Driver.zig +124 -50
- package/compiler/aro/aro/LangOpts.zig +12 -2
- package/compiler/aro/aro/Parser/Diagnostic.zig +79 -19
- package/compiler/aro/aro/Parser.zig +336 -142
- package/compiler/aro/aro/Preprocessor/Diagnostic.zig +21 -0
- package/compiler/aro/aro/Preprocessor.zig +127 -56
- package/compiler/aro/aro/Target.zig +17 -12
- package/compiler/aro/aro/Tokenizer.zig +31 -14
- package/compiler/aro/aro/Toolchain.zig +4 -7
- package/compiler/aro/aro/Tree.zig +178 -148
- package/compiler/aro/aro/TypeStore.zig +82 -24
- package/compiler/aro/aro/Value.zig +13 -17
- package/compiler/aro/aro/features.zig +1 -0
- package/compiler/aro/aro/pragmas/once.zig +0 -1
- package/compiler/aro/aro/record_layout.zig +3 -3
- package/compiler/aro/assembly_backend/x86_64.zig +3 -4
- package/compiler/aro/backend/Assembly.zig +1 -2
- package/compiler/aro/backend/Interner.zig +2 -2
- package/compiler/aro/backend/Ir.zig +100 -92
- package/compiler/aro/include/ptrcheck.h +49 -0
- package/compiler/aro/main.zig +26 -10
- package/compiler/build_runner.zig +1 -0
- package/compiler/objdump.zig +93 -0
- package/compiler/reduce.zig +5 -1
- package/compiler/resinator/compile.zig +2 -2
- package/compiler/resinator/main.zig +7 -1
- package/compiler/resinator/preprocess.zig +1 -3
- package/compiler/std-docs.zig +8 -1
- package/compiler/test_runner.zig +193 -61
- package/compiler/translate-c/MacroTranslator.zig +80 -11
- package/compiler/translate-c/PatternList.zig +1 -9
- package/compiler/translate-c/Scope.zig +43 -6
- package/compiler/translate-c/Translator.zig +364 -126
- package/compiler/translate-c/ast.zig +19 -11
- package/compiler/translate-c/main.zig +75 -16
- package/compiler_rt/cos.zig +141 -52
- package/compiler_rt/limb64.zig +266 -0
- package/compiler_rt/long_double.zig +37 -0
- package/compiler_rt/mulo.zig +6 -1
- package/compiler_rt/rem_pio2l.zig +173 -0
- package/compiler_rt/sin.zig +140 -55
- package/compiler_rt/sincos.zig +279 -72
- package/compiler_rt/tan.zig +118 -47
- package/compiler_rt/trig.zig +256 -6
- package/compiler_rt.zig +2 -0
- package/fuzzer.zig +855 -307
- package/libc/musl/src/math/pow.c +343 -0
- package/package.json +1 -1
- package/std/Build/Fuzz.zig +6 -19
- package/std/Build/Module.zig +1 -1
- package/std/Build/Step/CheckObject.zig +3 -3
- package/std/Build/Step/Compile.zig +18 -0
- package/std/Build/Step/ConfigHeader.zig +49 -33
- package/std/Build/Step/InstallArtifact.zig +18 -0
- package/std/Build/Step/Run.zig +536 -87
- package/std/Build/Step/TranslateC.zig +0 -6
- package/std/Build/Step.zig +8 -15
- package/std/Build/WebServer.zig +29 -17
- package/std/Build/abi.zig +47 -11
- package/std/Build.zig +17 -14
- package/std/Io/Dispatch.zig +2 -0
- package/std/Io/File/Reader.zig +3 -1
- package/std/Io/File.zig +1 -0
- package/std/Io/Kqueue.zig +2 -2
- package/std/Io/Threaded.zig +181 -143
- package/std/Io/Uring.zig +2 -1
- package/std/Io.zig +970 -2
- package/std/Target.zig +3 -2
- package/std/Thread.zig +8 -3
- package/std/array_hash_map.zig +96 -555
- package/std/array_list.zig +22 -31
- package/std/bit_set.zig +22 -6
- package/std/builtin/assembly.zig +68 -0
- package/std/c.zig +17 -17
- package/std/compress/flate/Compress.zig +3 -3
- package/std/crypto/Certificate/Bundle.zig +15 -1
- package/std/crypto/codecs/asn1.zig +33 -18
- package/std/crypto/codecs/base64_hex_ct.zig +14 -4
- package/std/debug/Dwarf.zig +29 -9
- package/std/debug/Info.zig +4 -0
- package/std/debug/MachOFile.zig +46 -8
- package/std/debug/Pdb.zig +539 -36
- package/std/debug/SelfInfo/Elf.zig +19 -18
- package/std/debug/SelfInfo/MachO.zig +18 -7
- package/std/debug/SelfInfo/Windows.zig +138 -36
- package/std/debug.zig +179 -65
- package/std/enums.zig +25 -19
- package/std/heap/ArenaAllocator.zig +145 -154
- package/std/heap/debug_allocator.zig +7 -7
- package/std/http/Client.zig +10 -6
- package/std/http.zig +11 -9
- package/std/json/Stringify.zig +3 -3
- package/std/json/dynamic.zig +4 -4
- package/std/math/big/int.zig +16 -17
- package/std/mem/Allocator.zig +4 -5
- package/std/mem.zig +48 -0
- package/std/os/emscripten.zig +1 -17
- package/std/os/linux.zig +7 -2
- package/std/os/windows.zig +2 -2
- package/std/pdb.zig +143 -4
- package/std/posix.zig +6 -12
- package/std/priority_dequeue.zig +13 -12
- package/std/priority_queue.zig +5 -4
- package/std/process/Child.zig +1 -1
- package/std/process/Environ.zig +1 -1
- package/std/start.zig +17 -4
- package/std/std.zig +19 -6
- package/std/testing/FailingAllocator.zig +4 -4
- package/std/testing/Smith.zig +37 -2
- package/std/zig/Ast/Render.zig +186 -458
- package/std/zig/Ast.zig +0 -4
- package/std/zig/AstGen.zig +44 -7
- package/std/zig/AstSmith.zig +2602 -0
- package/std/zig/Client.zig +8 -3
- package/std/zig/Parse.zig +83 -74
- package/std/zig/Server.zig +26 -0
- package/std/zig/Zir.zig +17 -0
- package/std/zig/c_translation/helpers.zig +14 -9
- package/std/zig/llvm/Builder.zig +107 -48
- package/std/zig/system.zig +20 -4
- package/std/zig/tokenizer.zig +2 -1
- package/std/zig.zig +6 -0
- package/compiler/aro/aro/Driver/Filesystem.zig +0 -241
- package/libc/mingw/complex/cabs.c +0 -48
- package/libc/mingw/complex/cabsf.c +0 -48
- package/libc/mingw/complex/cacos.c +0 -50
- package/libc/mingw/complex/cacosf.c +0 -50
- package/libc/mingw/complex/carg.c +0 -48
- package/libc/mingw/complex/cargf.c +0 -48
- package/libc/mingw/complex/casin.c +0 -50
- package/libc/mingw/complex/casinf.c +0 -50
- package/libc/mingw/complex/catan.c +0 -50
- package/libc/mingw/complex/catanf.c +0 -50
- package/libc/mingw/complex/ccos.c +0 -50
- package/libc/mingw/complex/ccosf.c +0 -50
- package/libc/mingw/complex/cexp.c +0 -48
- package/libc/mingw/complex/cexpf.c +0 -48
- package/libc/mingw/complex/cimag.c +0 -48
- package/libc/mingw/complex/cimagf.c +0 -48
- package/libc/mingw/complex/clog.c +0 -48
- package/libc/mingw/complex/clog10.c +0 -49
- package/libc/mingw/complex/clog10f.c +0 -49
- package/libc/mingw/complex/clogf.c +0 -48
- package/libc/mingw/complex/conj.c +0 -48
- package/libc/mingw/complex/conjf.c +0 -48
- package/libc/mingw/complex/cpow.c +0 -48
- package/libc/mingw/complex/cpowf.c +0 -48
- package/libc/mingw/complex/cproj.c +0 -48
- package/libc/mingw/complex/cprojf.c +0 -48
- package/libc/mingw/complex/creal.c +0 -48
- package/libc/mingw/complex/crealf.c +0 -48
- package/libc/mingw/complex/csin.c +0 -50
- package/libc/mingw/complex/csinf.c +0 -50
- package/libc/mingw/complex/csqrt.c +0 -48
- package/libc/mingw/complex/csqrtf.c +0 -48
- package/libc/mingw/complex/ctan.c +0 -50
- package/libc/mingw/complex/ctanf.c +0 -50
- package/libc/mingw/math/arm/s_rint.c +0 -86
- package/libc/mingw/math/arm/s_rintf.c +0 -51
- package/libc/mingw/math/arm/sincos.S +0 -30
- package/libc/mingw/math/arm-common/sincosl.c +0 -13
- package/libc/mingw/math/arm64/rint.c +0 -12
- package/libc/mingw/math/arm64/rintf.c +0 -12
- package/libc/mingw/math/arm64/sincos.S +0 -32
- package/libc/mingw/math/bsd_private_base.h +0 -148
- package/libc/mingw/math/frexpf.c +0 -13
- package/libc/mingw/math/frexpl.c +0 -71
- package/libc/mingw/math/x86/acosf.c +0 -29
- package/libc/mingw/math/x86/atanf.c +0 -23
- package/libc/mingw/math/x86/atanl.c +0 -18
- package/libc/mingw/math/x86/cos.def.h +0 -65
- package/libc/mingw/math/x86/cosl.c +0 -46
- package/libc/mingw/math/x86/cosl_internal.S +0 -55
- package/libc/mingw/math/x86/ldexp.c +0 -23
- package/libc/mingw/math/x86/scalbn.S +0 -41
- package/libc/mingw/math/x86/scalbnf.S +0 -40
- package/libc/mingw/math/x86/sin.def.h +0 -65
- package/libc/mingw/math/x86/sinl.c +0 -46
- package/libc/mingw/math/x86/sinl_internal.S +0 -58
- package/libc/mingw/math/x86/tanl.S +0 -62
- package/libc/mingw/misc/btowc.c +0 -28
- package/libc/mingw/misc/wcstof.c +0 -66
- package/libc/mingw/misc/wcstoimax.c +0 -132
- package/libc/mingw/misc/wcstoumax.c +0 -126
- package/libc/mingw/misc/wctob.c +0 -29
- package/libc/mingw/misc/winbs_uint64.c +0 -6
- package/libc/mingw/misc/winbs_ulong.c +0 -6
- package/libc/mingw/misc/winbs_ushort.c +0 -6
- package/libc/mingw/stdio/_Exit.c +0 -10
- package/libc/mingw/stdio/_findfirst64i32.c +0 -21
- package/libc/mingw/stdio/_findnext64i32.c +0 -21
- package/libc/mingw/stdio/_fstat64i32.c +0 -37
- package/libc/mingw/stdio/_stat64i32.c +0 -37
- package/libc/mingw/stdio/_wfindfirst64i32.c +0 -21
- package/libc/mingw/stdio/_wfindnext64i32.c +0 -21
- package/libc/mingw/stdio/_wstat64i32.c +0 -37
- package/libc/musl/src/legacy/isastream.c +0 -7
- package/libc/musl/src/legacy/valloc.c +0 -8
- package/libc/musl/src/math/__cosl.c +0 -96
- package/libc/musl/src/math/__sinl.c +0 -78
- package/libc/musl/src/math/__tanl.c +0 -143
- package/libc/musl/src/math/aarch64/lrint.c +0 -10
- package/libc/musl/src/math/aarch64/lrintf.c +0 -10
- package/libc/musl/src/math/aarch64/rintf.c +0 -7
- package/libc/musl/src/math/cosl.c +0 -39
- package/libc/musl/src/math/fdim.c +0 -10
- package/libc/musl/src/math/finite.c +0 -7
- package/libc/musl/src/math/finitef.c +0 -7
- package/libc/musl/src/math/frexp.c +0 -23
- package/libc/musl/src/math/frexpf.c +0 -23
- package/libc/musl/src/math/frexpl.c +0 -29
- package/libc/musl/src/math/i386/lrint.c +0 -8
- package/libc/musl/src/math/i386/lrintf.c +0 -8
- package/libc/musl/src/math/i386/rintf.c +0 -7
- package/libc/musl/src/math/lrint.c +0 -72
- package/libc/musl/src/math/lrintf.c +0 -8
- package/libc/musl/src/math/powerpc64/lrint.c +0 -16
- package/libc/musl/src/math/powerpc64/lrintf.c +0 -16
- package/libc/musl/src/math/rintf.c +0 -30
- package/libc/musl/src/math/s390x/rintf.c +0 -15
- package/libc/musl/src/math/sincosl.c +0 -60
- package/libc/musl/src/math/sinl.c +0 -41
- package/libc/musl/src/math/tanl.c +0 -29
- package/libc/musl/src/math/x32/lrint.s +0 -5
- package/libc/musl/src/math/x32/lrintf.s +0 -5
- package/libc/musl/src/math/x86_64/lrint.c +0 -8
- package/libc/musl/src/math/x86_64/lrintf.c +0 -8
- package/libc/wasi/libc-bottom-half/sources/reallocarray.c +0 -14
package/std/math/big/int.zig
CHANGED
|
@@ -628,12 +628,12 @@ pub const Mutable = struct {
|
|
|
628
628
|
|
|
629
629
|
// Slice of the upper bits if they exist, these will be ignored and allows us to use addCarry to determine
|
|
630
630
|
// if an overflow occurred.
|
|
631
|
-
const x =
|
|
631
|
+
const x: Const = .{
|
|
632
632
|
.positive = a.positive,
|
|
633
633
|
.limbs = a.limbs[0..@min(req_limbs, a.limbs.len)],
|
|
634
634
|
};
|
|
635
635
|
|
|
636
|
-
const y =
|
|
636
|
+
const y: Const = .{
|
|
637
637
|
.positive = b.positive,
|
|
638
638
|
.limbs = b.limbs[0..@min(req_limbs, b.limbs.len)],
|
|
639
639
|
};
|
|
@@ -647,9 +647,8 @@ pub const Mutable = struct {
|
|
|
647
647
|
// Note: after this we still might need to wrap.
|
|
648
648
|
const msl = @max(a.limbs.len, b.limbs.len);
|
|
649
649
|
if (msl < req_limbs) {
|
|
650
|
+
r.len = msl + 1;
|
|
650
651
|
r.limbs[msl] = 1;
|
|
651
|
-
r.len = req_limbs;
|
|
652
|
-
@memset(r.limbs[msl + 1 .. req_limbs], 0);
|
|
653
652
|
} else {
|
|
654
653
|
carry_truncated = true;
|
|
655
654
|
}
|
|
@@ -673,12 +672,12 @@ pub const Mutable = struct {
|
|
|
673
672
|
|
|
674
673
|
// Slice of the upper bits if they exist, these will be ignored and allows us to use addCarry to determine
|
|
675
674
|
// if an overflow occurred.
|
|
676
|
-
const x =
|
|
675
|
+
const x: Const = .{
|
|
677
676
|
.positive = a.positive,
|
|
678
677
|
.limbs = a.limbs[0..@min(req_limbs, a.limbs.len)],
|
|
679
678
|
};
|
|
680
679
|
|
|
681
|
-
const y =
|
|
680
|
+
const y: Const = .{
|
|
682
681
|
.positive = b.positive,
|
|
683
682
|
.limbs = b.limbs[0..@min(req_limbs, b.limbs.len)],
|
|
684
683
|
};
|
|
@@ -690,12 +689,12 @@ pub const Mutable = struct {
|
|
|
690
689
|
// Note: In this case, might _also_ need to saturate.
|
|
691
690
|
const msl = @max(a.limbs.len, b.limbs.len);
|
|
692
691
|
if (msl < req_limbs) {
|
|
692
|
+
r.len = msl + 1;
|
|
693
693
|
r.limbs[msl] = 1;
|
|
694
|
-
r.len = req_limbs;
|
|
695
694
|
// Note: Saturation may still be required if msl == req_limbs - 1
|
|
696
695
|
} else {
|
|
697
696
|
// Overflowed req_limbs, definitely saturate.
|
|
698
|
-
r.setTwosCompIntLimit(if (r.positive) .max else .min, signedness, bit_count);
|
|
697
|
+
return r.setTwosCompIntLimit(if (r.positive) .max else .min, signedness, bit_count);
|
|
699
698
|
}
|
|
700
699
|
}
|
|
701
700
|
|
|
@@ -1374,7 +1373,7 @@ pub const Mutable = struct {
|
|
|
1374
1373
|
/// r is `calcTwosCompLimbCount(bit_count)`.
|
|
1375
1374
|
pub fn bitNotWrap(r: *Mutable, a: Const, signedness: Signedness, bit_count: usize) void {
|
|
1376
1375
|
r.copy(a.negate());
|
|
1377
|
-
const negative_one =
|
|
1376
|
+
const negative_one: Const = .{ .limbs = &.{1}, .positive = false };
|
|
1378
1377
|
_ = r.addWrap(r.toConst(), negative_one, signedness, bit_count);
|
|
1379
1378
|
}
|
|
1380
1379
|
|
|
@@ -1740,13 +1739,13 @@ pub const Mutable = struct {
|
|
|
1740
1739
|
r.positive = r_positive;
|
|
1741
1740
|
} else {
|
|
1742
1741
|
// Shrink x, y such that the trailing zero limbs shared between are removed.
|
|
1743
|
-
var x0 =
|
|
1742
|
+
var x0: Mutable = .{
|
|
1744
1743
|
.limbs = x.limbs[xy_trailing..],
|
|
1745
1744
|
.len = x.len - xy_trailing,
|
|
1746
1745
|
.positive = true,
|
|
1747
1746
|
};
|
|
1748
1747
|
|
|
1749
|
-
var y0 =
|
|
1748
|
+
var y0: Mutable = .{
|
|
1750
1749
|
.limbs = y.limbs[xy_trailing..],
|
|
1751
1750
|
.len = y.len - xy_trailing,
|
|
1752
1751
|
.positive = true,
|
|
@@ -1809,7 +1808,7 @@ pub const Mutable = struct {
|
|
|
1809
1808
|
// x >= y * b^(n - t) can be replaced by x/b^(n - t) >= y.
|
|
1810
1809
|
|
|
1811
1810
|
// 'divide' x by b^(n - t)
|
|
1812
|
-
var tmp =
|
|
1811
|
+
var tmp: Mutable = .{
|
|
1813
1812
|
.limbs = x.limbs[shift..],
|
|
1814
1813
|
.len = x.len - shift,
|
|
1815
1814
|
.positive = true,
|
|
@@ -2108,7 +2107,7 @@ pub const Const = struct {
|
|
|
2108
2107
|
pub fn toManaged(self: Const, allocator: Allocator) Allocator.Error!Managed {
|
|
2109
2108
|
const limbs = try allocator.alloc(Limb, @max(Managed.default_capacity, self.limbs.len));
|
|
2110
2109
|
@memcpy(limbs[0..self.limbs.len], self.limbs);
|
|
2111
|
-
return
|
|
2110
|
+
return .{
|
|
2112
2111
|
.allocator = allocator,
|
|
2113
2112
|
.limbs = limbs,
|
|
2114
2113
|
.metadata = if (self.positive)
|
|
@@ -2802,7 +2801,7 @@ pub const Managed = struct {
|
|
|
2802
2801
|
/// default capacity will be used instead.
|
|
2803
2802
|
/// The integer value after initializing is `0`.
|
|
2804
2803
|
pub fn initCapacity(allocator: Allocator, capacity: usize) !Managed {
|
|
2805
|
-
return
|
|
2804
|
+
return .{
|
|
2806
2805
|
.allocator = allocator,
|
|
2807
2806
|
.metadata = 1,
|
|
2808
2807
|
.limbs = block: {
|
|
@@ -2868,7 +2867,7 @@ pub const Managed = struct {
|
|
|
2868
2867
|
}
|
|
2869
2868
|
|
|
2870
2869
|
pub fn cloneWithDifferentAllocator(other: Managed, allocator: Allocator) !Managed {
|
|
2871
|
-
return
|
|
2870
|
+
return .{
|
|
2872
2871
|
.allocator = allocator,
|
|
2873
2872
|
.metadata = other.metadata,
|
|
2874
2873
|
.limbs = block: {
|
|
@@ -3454,7 +3453,7 @@ pub const Managed = struct {
|
|
|
3454
3453
|
const tmp = try rma.allocator.alloc(Limb, a_len);
|
|
3455
3454
|
defer rma.allocator.free(tmp);
|
|
3456
3455
|
@memcpy(tmp[0..a_len], a.limbs[0..a_len]);
|
|
3457
|
-
const a_const =
|
|
3456
|
+
const a_const: Const = .{ .limbs = tmp[0..a_len], .positive = a.isPositive() };
|
|
3458
3457
|
var rma_mut = rma.toMutable();
|
|
3459
3458
|
rma_mut.sqrNoAlias(a_const, rma.allocator);
|
|
3460
3459
|
rma.setMetadata(rma_mut.positive, rma_mut.len);
|
|
@@ -3479,7 +3478,7 @@ pub const Managed = struct {
|
|
|
3479
3478
|
const tmp = try rma.allocator.alloc(Limb, a_len);
|
|
3480
3479
|
defer rma.allocator.free(tmp);
|
|
3481
3480
|
@memcpy(tmp[0..a_len], a.limbs[0..a_len]);
|
|
3482
|
-
const a_const =
|
|
3481
|
+
const a_const: Const = .{ .limbs = tmp[0..a_len], .positive = a.isPositive() };
|
|
3483
3482
|
var rma_mut = rma.toMutable();
|
|
3484
3483
|
rma_mut.pow(a_const, b, limbs_buffer);
|
|
3485
3484
|
rma.setMetadata(rma_mut.positive, rma_mut.len);
|
package/std/mem/Allocator.zig
CHANGED
|
@@ -322,7 +322,7 @@ pub fn resize(self: Allocator, allocation: anytype, new_len: usize) bool {
|
|
|
322
322
|
if (allocation.len == 0) {
|
|
323
323
|
return false;
|
|
324
324
|
}
|
|
325
|
-
const old_memory = mem.
|
|
325
|
+
const old_memory: []u8 = @ptrCast(@constCast(mem.absorbSentinel(allocation)));
|
|
326
326
|
// I would like to use saturating multiplication here, but LLVM cannot lower it
|
|
327
327
|
// on WebAssembly: https://github.com/ziglang/zig/issues/9660
|
|
328
328
|
//const new_len_bytes = new_len *| @sizeOf(T);
|
|
@@ -368,7 +368,7 @@ pub fn remap(self: Allocator, allocation: anytype, new_len: usize) ?@TypeOf(allo
|
|
|
368
368
|
new_memory.len = new_len;
|
|
369
369
|
return new_memory;
|
|
370
370
|
}
|
|
371
|
-
const old_memory = mem.
|
|
371
|
+
const old_memory: []u8 = @ptrCast(@constCast(mem.absorbSentinel(allocation)));
|
|
372
372
|
// I would like to use saturating multiplication here, but LLVM cannot lower it
|
|
373
373
|
// on WebAssembly: https://github.com/ziglang/zig/issues/9660
|
|
374
374
|
//const new_len_bytes = new_len *| @sizeOf(T);
|
|
@@ -420,7 +420,7 @@ pub fn reallocAdvanced(
|
|
|
420
420
|
return ptr;
|
|
421
421
|
}
|
|
422
422
|
|
|
423
|
-
const old_byte_slice = mem.
|
|
423
|
+
const old_byte_slice: []u8 = @ptrCast(@constCast(mem.absorbSentinel(old_mem)));
|
|
424
424
|
const byte_count = math.mul(usize, @sizeOf(T), new_n) catch return error.OutOfMemory;
|
|
425
425
|
// Note: can't set shrunk memory to undefined as memory shouldn't be modified on realloc failure
|
|
426
426
|
if (self.rawRemap(old_byte_slice, .fromByteUnits(slice_info.alignment orelse @alignOf(T)), byte_count, return_address)) |p| {
|
|
@@ -443,8 +443,7 @@ pub fn reallocAdvanced(
|
|
|
443
443
|
pub fn free(self: Allocator, memory: anytype) void {
|
|
444
444
|
const slice_info = @typeInfo(@TypeOf(memory)).pointer;
|
|
445
445
|
comptime assert(slice_info.size == .slice);
|
|
446
|
-
const
|
|
447
|
-
const bytes: []u8 = @ptrCast(@constCast(mem_with_sent));
|
|
446
|
+
const bytes: []u8 = @ptrCast(@constCast(mem.absorbSentinel(memory)));
|
|
448
447
|
if (bytes.len == 0) return;
|
|
449
448
|
@memset(bytes, undefined);
|
|
450
449
|
self.rawFree(bytes, .fromByteUnits(slice_info.alignment orelse @alignOf(slice_info.child)), @returnAddress());
|
package/std/mem.zig
CHANGED
|
@@ -4709,6 +4709,54 @@ test "sliceAsBytes preserves pointer attributes" {
|
|
|
4709
4709
|
try testing.expectEqual(in.alignment, out.alignment);
|
|
4710
4710
|
}
|
|
4711
4711
|
|
|
4712
|
+
fn AbsorbSentinelReturnType(comptime Slice: type) type {
|
|
4713
|
+
const info = @typeInfo(Slice).pointer;
|
|
4714
|
+
assert(info.size == .slice);
|
|
4715
|
+
return @Pointer(.slice, .{
|
|
4716
|
+
.@"const" = info.is_const,
|
|
4717
|
+
.@"volatile" = info.is_volatile,
|
|
4718
|
+
.@"allowzero" = info.is_allowzero,
|
|
4719
|
+
.@"addrspace" = info.address_space,
|
|
4720
|
+
.@"align" = info.alignment,
|
|
4721
|
+
}, info.child, null);
|
|
4722
|
+
}
|
|
4723
|
+
|
|
4724
|
+
/// If the provided slice is not sentinel terminated, do nothing and return that slice.
|
|
4725
|
+
/// If it is sentinel-terminated, return a non-sentinel-terminated slice with the
|
|
4726
|
+
/// length increased by one to include the absorbed sentinel element.
|
|
4727
|
+
pub fn absorbSentinel(slice: anytype) AbsorbSentinelReturnType(@TypeOf(slice)) {
|
|
4728
|
+
const info = @typeInfo(@TypeOf(slice)).pointer;
|
|
4729
|
+
comptime assert(info.size == .slice);
|
|
4730
|
+
if (info.sentinel_ptr == null) {
|
|
4731
|
+
return slice;
|
|
4732
|
+
} else {
|
|
4733
|
+
return slice.ptr[0 .. slice.len + 1];
|
|
4734
|
+
}
|
|
4735
|
+
}
|
|
4736
|
+
|
|
4737
|
+
test absorbSentinel {
|
|
4738
|
+
{
|
|
4739
|
+
var buffer: [3:0]u8 = .{ 1, 2, 3 };
|
|
4740
|
+
const foo: [:0]const u8 = &buffer;
|
|
4741
|
+
const bar: []const u8 = &buffer;
|
|
4742
|
+
try testing.expectEqual([]const u8, @TypeOf(absorbSentinel(foo)));
|
|
4743
|
+
try testing.expectEqual([]const u8, @TypeOf(absorbSentinel(bar)));
|
|
4744
|
+
try testing.expectEqualSlices(u8, &.{ 1, 2, 3, 0 }, absorbSentinel(foo));
|
|
4745
|
+
try testing.expectEqualSlices(u8, &.{ 1, 2, 3 }, absorbSentinel(bar));
|
|
4746
|
+
}
|
|
4747
|
+
{
|
|
4748
|
+
var buffer: [3:0]u8 = .{ 1, 2, 3 };
|
|
4749
|
+
const foo: [:0]u8 = &buffer;
|
|
4750
|
+
const bar: []u8 = &buffer;
|
|
4751
|
+
try testing.expectEqual([]u8, @TypeOf(absorbSentinel(foo)));
|
|
4752
|
+
try testing.expectEqual([]u8, @TypeOf(absorbSentinel(bar)));
|
|
4753
|
+
var expected_foo = [_]u8{ 1, 2, 3, 0 };
|
|
4754
|
+
try testing.expectEqualSlices(u8, &expected_foo, absorbSentinel(foo));
|
|
4755
|
+
var expected_bar = [_]u8{ 1, 2, 3 };
|
|
4756
|
+
try testing.expectEqualSlices(u8, &expected_bar, absorbSentinel(bar));
|
|
4757
|
+
}
|
|
4758
|
+
}
|
|
4759
|
+
|
|
4712
4760
|
/// Round an address down to the next (or current) aligned address.
|
|
4713
4761
|
/// Unlike `alignForward`, `alignment` can be any positive number, not just a power of 2.
|
|
4714
4762
|
pub fn alignForwardAnyAlign(comptime T: type, addr: T, alignment: T) T {
|
package/std/os/emscripten.zig
CHANGED
|
@@ -11,22 +11,6 @@ const c = std.c;
|
|
|
11
11
|
|
|
12
12
|
pub const FILE = c.FILE;
|
|
13
13
|
|
|
14
|
-
var __stack_chk_guard: usize = 0;
|
|
15
|
-
fn __stack_chk_fail() callconv(.c) void {
|
|
16
|
-
std.debug.print("stack smashing detected: terminated\n", .{});
|
|
17
|
-
emscripten_force_exit(127);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
comptime {
|
|
21
|
-
if (builtin.os.tag == .emscripten) {
|
|
22
|
-
if (builtin.mode == .Debug or builtin.mode == .ReleaseSafe) {
|
|
23
|
-
// Emscripten does not provide these symbols, so we must export our own
|
|
24
|
-
@export(&__stack_chk_guard, .{ .name = "__stack_chk_guard", .linkage = .strong });
|
|
25
|
-
@export(&__stack_chk_fail, .{ .name = "__stack_chk_fail", .linkage = .strong });
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
14
|
pub const PF = linux.PF;
|
|
31
15
|
pub const AF = linux.AF;
|
|
32
16
|
pub const CLOCK = linux.CLOCK;
|
|
@@ -228,7 +212,7 @@ pub const W = struct {
|
|
|
228
212
|
return @enumFromInt(s & 0x7f);
|
|
229
213
|
}
|
|
230
214
|
pub fn STOPSIG(s: u32) u32 {
|
|
231
|
-
return EXITSTATUS(s);
|
|
215
|
+
return @enumFromInt(EXITSTATUS(s));
|
|
232
216
|
}
|
|
233
217
|
pub fn IFEXITED(s: u32) bool {
|
|
234
218
|
return (s & 0x7f) == 0;
|
package/std/os/linux.zig
CHANGED
|
@@ -1584,6 +1584,11 @@ pub fn clone2(flags: u32, child_stack_ptr: usize) usize {
|
|
|
1584
1584
|
return syscall2(.clone, flags, child_stack_ptr);
|
|
1585
1585
|
}
|
|
1586
1586
|
|
|
1587
|
+
/// This call cannot fail, and the return value is the caller's thread id
|
|
1588
|
+
pub fn set_tid_address(tidptr: ?*pid_t) pid_t {
|
|
1589
|
+
return @intCast(@as(u32, @truncate(syscall1(.set_tid_address, @intFromPtr(tidptr)))));
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1587
1592
|
pub fn close(fd: fd_t) usize {
|
|
1588
1593
|
return syscall1(.close, @as(usize, @bitCast(@as(isize, fd))));
|
|
1589
1594
|
}
|
|
@@ -3878,8 +3883,8 @@ pub const W = struct {
|
|
|
3878
3883
|
pub fn TERMSIG(s: u32) SIG {
|
|
3879
3884
|
return @enumFromInt(s & 0x7f);
|
|
3880
3885
|
}
|
|
3881
|
-
pub fn STOPSIG(s: u32)
|
|
3882
|
-
return EXITSTATUS(s);
|
|
3886
|
+
pub fn STOPSIG(s: u32) SIG {
|
|
3887
|
+
return @enumFromInt(EXITSTATUS(s));
|
|
3883
3888
|
}
|
|
3884
3889
|
pub fn IFEXITED(s: u32) bool {
|
|
3885
3890
|
return (s & 0x7f) == 0;
|
package/std/os/windows.zig
CHANGED
|
@@ -3952,7 +3952,7 @@ inline fn MAKELANGID(p: c_ushort, s: c_ushort) LANGID {
|
|
|
3952
3952
|
/// and you get an unexpected error.
|
|
3953
3953
|
pub fn unexpectedError(err: Win32Error) UnexpectedError {
|
|
3954
3954
|
@branchHint(.cold);
|
|
3955
|
-
if (std.
|
|
3955
|
+
if (std.options.unexpected_error_tracing) {
|
|
3956
3956
|
std.debug.print("error.Unexpected: GetLastError({d}): {t}\n", .{ err, err });
|
|
3957
3957
|
std.debug.dumpCurrentStackTrace(.{ .first_address = @returnAddress() });
|
|
3958
3958
|
}
|
|
@@ -3962,7 +3962,7 @@ pub fn unexpectedError(err: Win32Error) UnexpectedError {
|
|
|
3962
3962
|
/// Call this when you made a windows NtDll call
|
|
3963
3963
|
/// and you get an unexpected status.
|
|
3964
3964
|
pub fn unexpectedStatus(status: NTSTATUS) UnexpectedError {
|
|
3965
|
-
if (std.
|
|
3965
|
+
if (std.options.unexpected_error_tracing) {
|
|
3966
3966
|
std.debug.print("error.Unexpected NTSTATUS=0x{x} ({s})\n", .{
|
|
3967
3967
|
@intFromEnum(status),
|
|
3968
3968
|
std.enums.tagName(NTSTATUS, status) orelse "<unnamed>",
|
package/std/pdb.zig
CHANGED
|
@@ -314,11 +314,9 @@ pub const SymbolKind = enum(u16) {
|
|
|
314
314
|
|
|
315
315
|
pub const TypeIndex = u32;
|
|
316
316
|
|
|
317
|
-
// TODO According to this header:
|
|
318
|
-
// https://github.com/microsoft/microsoft-pdb/blob/082c5290e5aff028ae84e43affa8be717aa7af73/include/cvinfo.h#L3722
|
|
319
|
-
// we should define RecordPrefix as part of the ProcSym structure.
|
|
320
|
-
// This might be important when we start generating PDB in self-hosted with our own PE linker.
|
|
321
317
|
pub const ProcSym = extern struct {
|
|
318
|
+
record_len: u16,
|
|
319
|
+
record_kind: SymbolKind,
|
|
322
320
|
parent: u32,
|
|
323
321
|
end: u32,
|
|
324
322
|
next: u32,
|
|
@@ -508,3 +506,144 @@ pub const SuperBlock = extern struct {
|
|
|
508
506
|
// implement it so we're kind of safe making this assumption for now.
|
|
509
507
|
block_map_addr: u32,
|
|
510
508
|
};
|
|
509
|
+
|
|
510
|
+
pub const IpiStreamVersion = enum(u32) {
|
|
511
|
+
v40 = 19950410,
|
|
512
|
+
v41 = 19951122,
|
|
513
|
+
v50 = 19961031,
|
|
514
|
+
v70 = 19990903,
|
|
515
|
+
v80 = 20040203,
|
|
516
|
+
_,
|
|
517
|
+
};
|
|
518
|
+
|
|
519
|
+
pub const IpiStreamHeader = extern struct {
|
|
520
|
+
version: IpiStreamVersion,
|
|
521
|
+
header_size: u32,
|
|
522
|
+
type_index_begin: u32,
|
|
523
|
+
type_index_end: u32,
|
|
524
|
+
type_record_bytes: u32,
|
|
525
|
+
hash_stream_index: u16,
|
|
526
|
+
hash_aux_stream_index: u16,
|
|
527
|
+
hash_key_size: u32,
|
|
528
|
+
num_hash_buckets: u32,
|
|
529
|
+
hash_value_buffer_offset: i32,
|
|
530
|
+
hash_value_buffer_length: u32,
|
|
531
|
+
index_offset_buffer_offset: i32,
|
|
532
|
+
index_offset_buffer_length: u32,
|
|
533
|
+
hash_adj_buffer_offset: i32,
|
|
534
|
+
hash_adj_buffer_length: u32,
|
|
535
|
+
};
|
|
536
|
+
|
|
537
|
+
pub const LfRecordPrefix = extern struct {
|
|
538
|
+
len: u16,
|
|
539
|
+
kind: LfRecordKind,
|
|
540
|
+
};
|
|
541
|
+
|
|
542
|
+
pub const LfRecordKind = enum(u16) {
|
|
543
|
+
pointer = 0x1002,
|
|
544
|
+
modifier = 0x1001,
|
|
545
|
+
procedure = 0x1008,
|
|
546
|
+
mfunction = 0x1009,
|
|
547
|
+
label = 0x000e,
|
|
548
|
+
arglist = 0x1201,
|
|
549
|
+
fieldlist = 0x1203,
|
|
550
|
+
array = 0x1503,
|
|
551
|
+
class = 0x1504,
|
|
552
|
+
structure = 0x1505,
|
|
553
|
+
interface = 0x1519,
|
|
554
|
+
@"union" = 0x1506,
|
|
555
|
+
@"enum" = 0x1507,
|
|
556
|
+
typeserver2 = 0x1515,
|
|
557
|
+
vftable = 0x151d,
|
|
558
|
+
vtshape = 0x000a,
|
|
559
|
+
bitfield = 0x1205,
|
|
560
|
+
func_id = 0x1601,
|
|
561
|
+
mfunc_id = 0x1602,
|
|
562
|
+
buildinfo = 0x1603,
|
|
563
|
+
substr_list = 0x1604,
|
|
564
|
+
string_id = 0x1605,
|
|
565
|
+
udt_src_line = 0x1606,
|
|
566
|
+
udt_mod_src_line = 0x1607,
|
|
567
|
+
methodlist = 0x1206,
|
|
568
|
+
precomp = 0x1509,
|
|
569
|
+
endprecomp = 0x0014,
|
|
570
|
+
bclass = 0x1400,
|
|
571
|
+
binterface = 0x151a,
|
|
572
|
+
vbclass = 0x1401,
|
|
573
|
+
ivbclass = 0x1402,
|
|
574
|
+
vfunctab = 0x1409,
|
|
575
|
+
stmember = 0x150e,
|
|
576
|
+
method = 0x150f,
|
|
577
|
+
member = 0x150d,
|
|
578
|
+
nesttype = 0x1510,
|
|
579
|
+
onemethod = 0x1511,
|
|
580
|
+
enumerate = 0x1502,
|
|
581
|
+
index = 0x1404,
|
|
582
|
+
pad0 = 0xf0,
|
|
583
|
+
_,
|
|
584
|
+
};
|
|
585
|
+
|
|
586
|
+
pub const LfFuncId = extern struct {
|
|
587
|
+
len: u16,
|
|
588
|
+
kind: LfRecordKind,
|
|
589
|
+
scope_id: u32,
|
|
590
|
+
type: u32,
|
|
591
|
+
name: [1]u8, // null-terminated
|
|
592
|
+
};
|
|
593
|
+
|
|
594
|
+
pub const LfMFuncId = extern struct {
|
|
595
|
+
len: u16,
|
|
596
|
+
kind: LfRecordKind,
|
|
597
|
+
parent_type: u32,
|
|
598
|
+
type: u32,
|
|
599
|
+
name: [1]u8, // null-terminated
|
|
600
|
+
};
|
|
601
|
+
|
|
602
|
+
pub const InlineSiteSym = extern struct {
|
|
603
|
+
record_len: u16,
|
|
604
|
+
record_kind: SymbolKind,
|
|
605
|
+
parent: u32,
|
|
606
|
+
end: u32,
|
|
607
|
+
inlinee: u32,
|
|
608
|
+
};
|
|
609
|
+
|
|
610
|
+
pub const InlineSiteSym2 = extern struct {
|
|
611
|
+
record_len: u16,
|
|
612
|
+
record_kind: SymbolKind,
|
|
613
|
+
parent: u32,
|
|
614
|
+
end: u32,
|
|
615
|
+
inlinee: u32,
|
|
616
|
+
invocations: u32,
|
|
617
|
+
};
|
|
618
|
+
|
|
619
|
+
pub const InlineeSourceLineSignature = enum(u32) { normal = 0, ex = 1, _ };
|
|
620
|
+
|
|
621
|
+
pub const InlineeSourceLine = extern struct {
|
|
622
|
+
inlinee: u32,
|
|
623
|
+
file_id: u32,
|
|
624
|
+
source_line_num: u32,
|
|
625
|
+
};
|
|
626
|
+
|
|
627
|
+
pub const InlineeSourceLineEx = extern struct {
|
|
628
|
+
inlinee: u32,
|
|
629
|
+
file_id: u32,
|
|
630
|
+
source_line_num: u32,
|
|
631
|
+
count_of_extra_files: u32,
|
|
632
|
+
};
|
|
633
|
+
|
|
634
|
+
pub const BinaryAnnotationOpcode = enum(u8) {
|
|
635
|
+
invalid = 0,
|
|
636
|
+
code_offset = 1,
|
|
637
|
+
change_code_offset_base = 2,
|
|
638
|
+
change_code_offset = 3,
|
|
639
|
+
change_code_length = 4,
|
|
640
|
+
change_file = 5,
|
|
641
|
+
change_line_offset = 6,
|
|
642
|
+
change_line_end_delta = 7,
|
|
643
|
+
change_range_kind = 8,
|
|
644
|
+
change_column_start = 9,
|
|
645
|
+
change_column_end_delta = 10,
|
|
646
|
+
change_code_offset_and_line_offset = 11,
|
|
647
|
+
change_code_length_and_code_offset = 12,
|
|
648
|
+
change_column_end = 13,
|
|
649
|
+
};
|
package/std/posix.zig
CHANGED
|
@@ -513,6 +513,9 @@ pub const GetSockNameError = error{
|
|
|
513
513
|
SocketNotBound,
|
|
514
514
|
|
|
515
515
|
FileDescriptorNotASocket,
|
|
516
|
+
|
|
517
|
+
/// The socket is not connected (connection-oriented sockets only).
|
|
518
|
+
SocketUnconnected,
|
|
516
519
|
} || UnexpectedError;
|
|
517
520
|
|
|
518
521
|
pub fn getpeername(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSockNameError!void {
|
|
@@ -529,6 +532,7 @@ pub fn getpeername(sock: socket_t, addr: *sockaddr, addrlen: *socklen_t) GetSock
|
|
|
529
532
|
.INVAL => unreachable, // invalid parameters
|
|
530
533
|
.NOTSOCK => return error.FileDescriptorNotASocket,
|
|
531
534
|
.NOBUFS => return error.SystemResources,
|
|
535
|
+
.NOTCONN => return error.SocketUnconnected,
|
|
532
536
|
}
|
|
533
537
|
}
|
|
534
538
|
}
|
|
@@ -682,7 +686,7 @@ pub fn munmap(memory: []align(page_size_min) const u8) void {
|
|
|
682
686
|
.SUCCESS => return,
|
|
683
687
|
.INVAL => unreachable, // Invalid parameters.
|
|
684
688
|
.NOMEM => unreachable, // Attempted to unmap a region in the middle of an existing mapping.
|
|
685
|
-
else => |e| if (unexpected_error_tracing) {
|
|
689
|
+
else => |e| if (std.options.unexpected_error_tracing) {
|
|
686
690
|
std.debug.panic("unexpected errno: {d} ({t})", .{ @intFromEnum(e), e });
|
|
687
691
|
} else unreachable,
|
|
688
692
|
}
|
|
@@ -1658,22 +1662,12 @@ pub fn name_to_handle_atZ(
|
|
|
1658
1662
|
|
|
1659
1663
|
pub const lfs64_abi = native_os == .linux and builtin.link_libc and (builtin.abi.isGnu() or builtin.abi.isAndroid());
|
|
1660
1664
|
|
|
1661
|
-
/// Whether or not `error.Unexpected` will print its value and a stack trace.
|
|
1662
|
-
///
|
|
1663
|
-
/// If this happens the fix is to add the error code to the corresponding
|
|
1664
|
-
/// switch expression, possibly introduce a new error in the error set, and
|
|
1665
|
-
/// send a patch to Zig.
|
|
1666
|
-
pub const unexpected_error_tracing = builtin.mode == .Debug and switch (builtin.zig_backend) {
|
|
1667
|
-
.stage2_llvm, .stage2_x86_64 => true,
|
|
1668
|
-
else => false,
|
|
1669
|
-
};
|
|
1670
|
-
|
|
1671
1665
|
pub const UnexpectedError = std.Io.UnexpectedError;
|
|
1672
1666
|
|
|
1673
1667
|
/// Call this when you made a syscall or something that sets errno
|
|
1674
1668
|
/// and you get an unexpected error.
|
|
1675
1669
|
pub fn unexpectedErrno(err: E) UnexpectedError {
|
|
1676
|
-
if (unexpected_error_tracing) {
|
|
1670
|
+
if (std.options.unexpected_error_tracing) {
|
|
1677
1671
|
std.debug.print("unexpected errno: {d}\n", .{@intFromEnum(err)});
|
|
1678
1672
|
std.debug.dumpCurrentStackTrace(.{});
|
|
1679
1673
|
}
|
package/std/priority_dequeue.zig
CHANGED
|
@@ -40,8 +40,9 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
/// Free memory used by the dequeue.
|
|
43
|
-
pub fn deinit(self: Self, allocator: Allocator) void {
|
|
43
|
+
pub fn deinit(self: *Self, allocator: Allocator) void {
|
|
44
44
|
allocator.free(self.items);
|
|
45
|
+
self.* = undefined;
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
/// Insert a new element, maintaining priority.
|
|
@@ -77,7 +78,7 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
|
|
|
77
78
|
return 1 == @clz(index +% 1) & 1;
|
|
78
79
|
}
|
|
79
80
|
|
|
80
|
-
fn nextIsMinLayer(self: Self) bool {
|
|
81
|
+
fn nextIsMinLayer(self: *const Self) bool {
|
|
81
82
|
return isMinLayer(self.len);
|
|
82
83
|
}
|
|
83
84
|
|
|
@@ -86,7 +87,7 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
|
|
|
86
87
|
min_layer: bool,
|
|
87
88
|
};
|
|
88
89
|
|
|
89
|
-
fn getStartForSiftUp(self: Self, child: T, index: usize) StartIndexAndLayer {
|
|
90
|
+
fn getStartForSiftUp(self: *const Self, child: T, index: usize) StartIndexAndLayer {
|
|
90
91
|
const child_index = index;
|
|
91
92
|
const parent_index = parentIndex(child_index);
|
|
92
93
|
const parent = self.items[parent_index];
|
|
@@ -136,20 +137,20 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
|
|
|
136
137
|
|
|
137
138
|
/// Look at the smallest element in the dequeue. Returns
|
|
138
139
|
/// `null` if empty.
|
|
139
|
-
pub fn peekMin(self: *Self) ?T {
|
|
140
|
+
pub fn peekMin(self: *const Self) ?T {
|
|
140
141
|
return if (self.len > 0) self.items[0] else null;
|
|
141
142
|
}
|
|
142
143
|
|
|
143
144
|
/// Look at the largest element in the dequeue. Returns
|
|
144
145
|
/// `null` if empty.
|
|
145
|
-
pub fn peekMax(self: *Self) ?T {
|
|
146
|
+
pub fn peekMax(self: *const Self) ?T {
|
|
146
147
|
if (self.len == 0) return null;
|
|
147
148
|
if (self.len == 1) return self.items[0];
|
|
148
149
|
if (self.len == 2) return self.items[1];
|
|
149
150
|
return self.bestItemAtIndices(1, 2, .gt).item;
|
|
150
151
|
}
|
|
151
152
|
|
|
152
|
-
fn maxIndex(self: Self) ?usize {
|
|
153
|
+
fn maxIndex(self: *const Self) ?usize {
|
|
153
154
|
if (self.len == 0) return null;
|
|
154
155
|
if (self.len == 1) return 0;
|
|
155
156
|
if (self.len == 2) return 1;
|
|
@@ -261,14 +262,14 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
|
|
|
261
262
|
index: usize,
|
|
262
263
|
};
|
|
263
264
|
|
|
264
|
-
fn getItem(self: Self, index: usize) ItemAndIndex {
|
|
265
|
+
fn getItem(self: *const Self, index: usize) ItemAndIndex {
|
|
265
266
|
return .{
|
|
266
267
|
.item = self.items[index],
|
|
267
268
|
.index = index,
|
|
268
269
|
};
|
|
269
270
|
}
|
|
270
271
|
|
|
271
|
-
fn bestItem(self: Self, item1: ItemAndIndex, item2: ItemAndIndex, target_order: Order) ItemAndIndex {
|
|
272
|
+
fn bestItem(self: *const Self, item1: ItemAndIndex, item2: ItemAndIndex, target_order: Order) ItemAndIndex {
|
|
272
273
|
if (compareFn(self.context, item1.item, item2.item) == target_order) {
|
|
273
274
|
return item1;
|
|
274
275
|
} else {
|
|
@@ -276,13 +277,13 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
|
|
|
276
277
|
}
|
|
277
278
|
}
|
|
278
279
|
|
|
279
|
-
fn bestItemAtIndices(self: Self, index1: usize, index2: usize, target_order: Order) ItemAndIndex {
|
|
280
|
+
fn bestItemAtIndices(self: *const Self, index1: usize, index2: usize, target_order: Order) ItemAndIndex {
|
|
280
281
|
const item1 = self.getItem(index1);
|
|
281
282
|
const item2 = self.getItem(index2);
|
|
282
283
|
return self.bestItem(item1, item2, target_order);
|
|
283
284
|
}
|
|
284
285
|
|
|
285
|
-
fn bestDescendent(self: Self, first_child_index: usize, first_grandchild_index: usize, target_order: Order) ItemAndIndex {
|
|
286
|
+
fn bestDescendent(self: *const Self, first_child_index: usize, first_grandchild_index: usize, target_order: Order) ItemAndIndex {
|
|
286
287
|
const second_child_index = first_child_index + 1;
|
|
287
288
|
if (first_grandchild_index >= self.len) {
|
|
288
289
|
// No grandchildren, find the best child (second may not exist)
|
|
@@ -314,13 +315,13 @@ pub fn PriorityDequeue(comptime T: type, comptime Context: type, comptime compar
|
|
|
314
315
|
}
|
|
315
316
|
|
|
316
317
|
/// Return the number of elements remaining in the dequeue
|
|
317
|
-
pub fn count(self: Self) usize {
|
|
318
|
+
pub fn count(self: *const Self) usize {
|
|
318
319
|
return self.len;
|
|
319
320
|
}
|
|
320
321
|
|
|
321
322
|
/// Return the number of elements that can be added to the
|
|
322
323
|
/// dequeue before more memory is allocated.
|
|
323
|
-
pub fn capacity(self: Self) usize {
|
|
324
|
+
pub fn capacity(self: *const Self) usize {
|
|
324
325
|
return self.items.len;
|
|
325
326
|
}
|
|
326
327
|
|
package/std/priority_queue.zig
CHANGED
|
@@ -41,6 +41,7 @@ pub fn PriorityQueue(comptime T: type, comptime Context: type, comptime compareF
|
|
|
41
41
|
/// Free memory used by the queue.
|
|
42
42
|
pub fn deinit(self: *Self, allocator: Allocator) void {
|
|
43
43
|
allocator.free(self.allocatedSlice());
|
|
44
|
+
self.* = undefined;
|
|
44
45
|
}
|
|
45
46
|
|
|
46
47
|
/// Insert a new element, maintaining priority.
|
|
@@ -78,7 +79,7 @@ pub fn PriorityQueue(comptime T: type, comptime Context: type, comptime compareF
|
|
|
78
79
|
|
|
79
80
|
/// Look at the highest priority element in the queue. Returns
|
|
80
81
|
/// `null` if empty.
|
|
81
|
-
pub fn peek(self: *Self) ?T {
|
|
82
|
+
pub fn peek(self: *const Self) ?T {
|
|
82
83
|
return if (self.items.len > 0) self.items[0] else null;
|
|
83
84
|
}
|
|
84
85
|
|
|
@@ -117,19 +118,19 @@ pub fn PriorityQueue(comptime T: type, comptime Context: type, comptime compareF
|
|
|
117
118
|
|
|
118
119
|
/// Return the number of elements remaining in the priority
|
|
119
120
|
/// queue.
|
|
120
|
-
pub fn count(self: Self) usize {
|
|
121
|
+
pub fn count(self: *const Self) usize {
|
|
121
122
|
return self.items.len;
|
|
122
123
|
}
|
|
123
124
|
|
|
124
125
|
/// Return the number of elements that can be added to the
|
|
125
126
|
/// queue before more memory is allocated.
|
|
126
|
-
pub fn capacity(self: Self) usize {
|
|
127
|
+
pub fn capacity(self: *const Self) usize {
|
|
127
128
|
return self.cap;
|
|
128
129
|
}
|
|
129
130
|
|
|
130
131
|
/// Returns a slice of all the items plus the extra capacity, whose memory
|
|
131
132
|
/// contents are `undefined`.
|
|
132
|
-
fn allocatedSlice(self: Self) []T {
|
|
133
|
+
fn allocatedSlice(self: *const Self) []T {
|
|
133
134
|
// `items.len` is the length, not the capacity.
|
|
134
135
|
return self.items.ptr[0..self.cap];
|
|
135
136
|
}
|
package/std/process/Child.zig
CHANGED
package/std/process/Environ.zig
CHANGED
|
@@ -24,7 +24,7 @@ pub const empty: Environ = .{ .block = .empty };
|
|
|
24
24
|
/// operating system `void` is also used.
|
|
25
25
|
pub const Block = switch (native_os) {
|
|
26
26
|
.windows => GlobalBlock,
|
|
27
|
-
.wasi => switch (builtin.link_libc) {
|
|
27
|
+
.wasi, .emscripten => switch (builtin.link_libc) {
|
|
28
28
|
false => GlobalBlock,
|
|
29
29
|
true => PosixBlock,
|
|
30
30
|
},
|