Commit 8944935499
Changed files (7)
lib
lib/std/heap/general_purpose_allocator.zig
@@ -454,18 +454,19 @@ pub fn GeneralPurposeAllocator(comptime config: Config) type {
}
}
- pub usingnamespace if (config.retain_metadata) struct {
- pub fn flushRetainedMetadata(self: *Self) void {
- self.freeRetainedMetadata();
- // also remove entries from large_allocations
- var it = self.large_allocations.iterator();
- while (it.next()) |large| {
- if (large.value_ptr.freed) {
- _ = self.large_allocations.remove(@intFromPtr(large.value_ptr.bytes.ptr));
- }
+ pub fn flushRetainedMetadata(self: *Self) void {
+ if (!config.retain_metadata) {
+ @compileError("'flushRetainedMetadata' requires 'config.retain_metadata = true'");
+ }
+ self.freeRetainedMetadata();
+ // also remove entries from large_allocations
+ var it = self.large_allocations.iterator();
+ while (it.next()) |large| {
+ if (large.value_ptr.freed) {
+ _ = self.large_allocations.remove(@intFromPtr(large.value_ptr.bytes.ptr));
}
}
- } else struct {};
+ }
/// Returns `Check.leak` if there were leaks; `Check.ok` otherwise.
pub fn deinit(self: *Self) Check {
lib/std/io/peek_stream.zig
@@ -1,4 +1,5 @@
const std = @import("../std.zig");
+const assert = std.debug.assert;
const io = std.io;
const mem = std.mem;
const testing = std.testing;
@@ -20,33 +21,36 @@ pub fn PeekStream(
const Self = @This();
const FifoType = std.fifo.LinearFifo(u8, buffer_type);
- pub usingnamespace switch (buffer_type) {
- .Static => struct {
- pub fn init(base: ReaderType) Self {
- return .{
- .unbuffered_reader = base,
- .fifo = FifoType.init(),
- };
- }
- },
- .Slice => struct {
- pub fn init(base: ReaderType, buf: []u8) Self {
- return .{
- .unbuffered_reader = base,
- .fifo = FifoType.init(buf),
- };
- }
- },
- .Dynamic => struct {
- pub fn init(base: ReaderType, allocator: mem.Allocator) Self {
- return .{
- .unbuffered_reader = base,
- .fifo = FifoType.init(allocator),
- };
- }
- },
+ pub const init = switch (buffer_type) {
+ .Static => initStatic,
+ .Slice => initSlice,
+ .Dynamic => initDynamic,
};
+ fn initStatic(base: ReaderType) Self {
+ comptime assert(buffer_type == .Static);
+ return .{
+ .unbuffered_reader = base,
+ .fifo = FifoType.init(),
+ };
+ }
+
+ fn initSlice(base: ReaderType, buf: []u8) Self {
+ comptime assert(buffer_type == .Slice);
+ return .{
+ .unbuffered_reader = base,
+ .fifo = FifoType.init(buf),
+ };
+ }
+
+ fn initDynamic(base: ReaderType, allocator: mem.Allocator) Self {
+ comptime assert(buffer_type == .Dynamic);
+ return .{
+ .unbuffered_reader = base,
+ .fifo = FifoType.init(allocator),
+ };
+ }
+
pub fn putBackByte(self: *Self, byte: u8) !void {
try self.putBack(&[_]u8{byte});
}
lib/std/os/uefi/tables/boot_services.zig
@@ -6,6 +6,15 @@ const Handle = uefi.Handle;
const Status = uefi.Status;
const TableHeader = uefi.tables.TableHeader;
const DevicePathProtocol = uefi.protocol.DevicePath;
+const AllocateType = uefi.tables.AllocateType;
+const MemoryType = uefi.tables.MemoryType;
+const MemoryDescriptor = uefi.tables.MemoryDescriptor;
+const TimerDelay = uefi.tables.TimerDelay;
+const EfiInterfaceType = uefi.tables.EfiInterfaceType;
+const LocateSearchType = uefi.tables.LocateSearchType;
+const OpenProtocolAttributes = uefi.tables.OpenProtocolAttributes;
+const ProtocolInformationEntry = uefi.tables.ProtocolInformationEntry;
+const EfiEventNotify = uefi.tables.EfiEventNotify;
const cc = uefi.cc;
/// Boot services are services provided by the system's firmware until the operating system takes
@@ -193,91 +202,3 @@ pub const BootServices = extern struct {
pub const tpl_notify: usize = 16;
pub const tpl_high_level: usize = 31;
};
-
-pub const EfiEventNotify = *const fn (event: Event, ctx: *anyopaque) callconv(cc) void;
-
-pub const TimerDelay = enum(u32) {
- TimerCancel,
- TimerPeriodic,
- TimerRelative,
-};
-
-pub const MemoryType = enum(u32) {
- ReservedMemoryType,
- LoaderCode,
- LoaderData,
- BootServicesCode,
- BootServicesData,
- RuntimeServicesCode,
- RuntimeServicesData,
- ConventionalMemory,
- UnusableMemory,
- ACPIReclaimMemory,
- ACPIMemoryNVS,
- MemoryMappedIO,
- MemoryMappedIOPortSpace,
- PalCode,
- PersistentMemory,
- MaxMemoryType,
- _,
-};
-
-pub const MemoryDescriptorAttribute = packed struct(u64) {
- uc: bool,
- wc: bool,
- wt: bool,
- wb: bool,
- uce: bool,
- _pad1: u7 = 0,
- wp: bool,
- rp: bool,
- xp: bool,
- nv: bool,
- more_reliable: bool,
- ro: bool,
- sp: bool,
- cpu_crypto: bool,
- _pad2: u43 = 0,
- memory_runtime: bool,
-};
-
-pub const MemoryDescriptor = extern struct {
- type: MemoryType,
- physical_start: u64,
- virtual_start: u64,
- number_of_pages: u64,
- attribute: MemoryDescriptorAttribute,
-};
-
-pub const LocateSearchType = enum(u32) {
- AllHandles,
- ByRegisterNotify,
- ByProtocol,
-};
-
-pub const OpenProtocolAttributes = packed struct(u32) {
- by_handle_protocol: bool = false,
- get_protocol: bool = false,
- test_protocol: bool = false,
- by_child_controller: bool = false,
- by_driver: bool = false,
- exclusive: bool = false,
- reserved: u26 = 0,
-};
-
-pub const ProtocolInformationEntry = extern struct {
- agent_handle: ?Handle,
- controller_handle: ?Handle,
- attributes: OpenProtocolAttributes,
- open_count: u32,
-};
-
-pub const EfiInterfaceType = enum(u32) {
- EfiNativeInterface,
-};
-
-pub const AllocateType = enum(u32) {
- AllocateAnyPages,
- AllocateMaxAddress,
- AllocateAddress,
-};
lib/std/os/uefi/tables/runtime_services.zig
@@ -6,6 +6,9 @@ const Time = uefi.Time;
const TimeCapabilities = uefi.TimeCapabilities;
const Status = uefi.Status;
const MemoryDescriptor = uefi.tables.MemoryDescriptor;
+const ResetType = uefi.tables.ResetType;
+const CapsuleHeader = uefi.tables.CapsuleHeader;
+const EfiPhysicalAddress = uefi.tables.EfiPhysicalAddress;
const cc = uefi.cc;
/// Runtime services are provided by the firmware before and after exitBootServices has been called.
@@ -67,36 +70,3 @@ pub const RuntimeServices = extern struct {
pub const signature: u64 = 0x56524553544e5552;
};
-
-const EfiPhysicalAddress = u64;
-
-pub const CapsuleHeader = extern struct {
- capsuleGuid: Guid align(8),
- headerSize: u32,
- flags: u32,
- capsuleImageSize: u32,
-};
-
-pub const UefiCapsuleBlockDescriptor = extern struct {
- length: u64,
- address: extern union {
- dataBlock: EfiPhysicalAddress,
- continuationPointer: EfiPhysicalAddress,
- },
-};
-
-pub const ResetType = enum(u32) {
- ResetCold,
- ResetWarm,
- ResetShutdown,
- ResetPlatformSpecific,
-};
-
-pub const global_variable align(8) = Guid{
- .time_low = 0x8be4df61,
- .time_mid = 0x93ca,
- .time_high_and_version = 0x11d2,
- .clock_seq_high_and_reserved = 0xaa,
- .clock_seq_low = 0x0d,
- .node = [_]u8{ 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c },
-};
lib/std/os/uefi/tables.zig
@@ -1,9 +1,137 @@
-pub usingnamespace @import("tables/boot_services.zig");
-pub usingnamespace @import("tables/runtime_services.zig");
-pub usingnamespace @import("tables/configuration_table.zig");
-pub usingnamespace @import("tables/system_table.zig");
-pub usingnamespace @import("tables/table_header.zig");
+pub const BootServices = @import("tables/boot_services.zig").BootServices;
+pub const RuntimeServices = @import("tables/runtime_services.zig").RuntimeServices;
+pub const ConfigurationTable = @import("tables/configuration_table.zig").ConfigurationTable;
+pub const SystemTable = @import("tables/system_table.zig").SystemTable;
+pub const TableHeader = @import("tables/table_header.zig").TableHeader;
+
+pub const EfiEventNotify = *const fn (event: Event, ctx: *anyopaque) callconv(cc) void;
+
+pub const TimerDelay = enum(u32) {
+ TimerCancel,
+ TimerPeriodic,
+ TimerRelative,
+};
+
+pub const MemoryType = enum(u32) {
+ ReservedMemoryType,
+ LoaderCode,
+ LoaderData,
+ BootServicesCode,
+ BootServicesData,
+ RuntimeServicesCode,
+ RuntimeServicesData,
+ ConventionalMemory,
+ UnusableMemory,
+ ACPIReclaimMemory,
+ ACPIMemoryNVS,
+ MemoryMappedIO,
+ MemoryMappedIOPortSpace,
+ PalCode,
+ PersistentMemory,
+ MaxMemoryType,
+ _,
+};
+
+pub const MemoryDescriptorAttribute = packed struct(u64) {
+ uc: bool,
+ wc: bool,
+ wt: bool,
+ wb: bool,
+ uce: bool,
+ _pad1: u7 = 0,
+ wp: bool,
+ rp: bool,
+ xp: bool,
+ nv: bool,
+ more_reliable: bool,
+ ro: bool,
+ sp: bool,
+ cpu_crypto: bool,
+ _pad2: u43 = 0,
+ memory_runtime: bool,
+};
+
+pub const MemoryDescriptor = extern struct {
+ type: MemoryType,
+ physical_start: u64,
+ virtual_start: u64,
+ number_of_pages: u64,
+ attribute: MemoryDescriptorAttribute,
+};
+
+pub const LocateSearchType = enum(u32) {
+ AllHandles,
+ ByRegisterNotify,
+ ByProtocol,
+};
+
+pub const OpenProtocolAttributes = packed struct(u32) {
+ by_handle_protocol: bool = false,
+ get_protocol: bool = false,
+ test_protocol: bool = false,
+ by_child_controller: bool = false,
+ by_driver: bool = false,
+ exclusive: bool = false,
+ reserved: u26 = 0,
+};
+
+pub const ProtocolInformationEntry = extern struct {
+ agent_handle: ?Handle,
+ controller_handle: ?Handle,
+ attributes: OpenProtocolAttributes,
+ open_count: u32,
+};
+
+pub const EfiInterfaceType = enum(u32) {
+ EfiNativeInterface,
+};
+
+pub const AllocateType = enum(u32) {
+ AllocateAnyPages,
+ AllocateMaxAddress,
+ AllocateAddress,
+};
+
+const EfiPhysicalAddress = u64;
+
+pub const CapsuleHeader = extern struct {
+ capsuleGuid: Guid align(8),
+ headerSize: u32,
+ flags: u32,
+ capsuleImageSize: u32,
+};
+
+pub const UefiCapsuleBlockDescriptor = extern struct {
+ length: u64,
+ address: extern union {
+ dataBlock: EfiPhysicalAddress,
+ continuationPointer: EfiPhysicalAddress,
+ },
+};
+
+pub const ResetType = enum(u32) {
+ ResetCold,
+ ResetWarm,
+ ResetShutdown,
+ ResetPlatformSpecific,
+};
+
+pub const global_variable align(8) = Guid{
+ .time_low = 0x8be4df61,
+ .time_mid = 0x93ca,
+ .time_high_and_version = 0x11d2,
+ .clock_seq_high_and_reserved = 0xaa,
+ .clock_seq_low = 0x0d,
+ .node = [_]u8{ 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c },
+};
test {
- @import("std").testing.refAllDeclsRecursive(@This());
+ std.testing.refAllDeclsRecursive(@This());
}
+
+const std = @import("std");
+const uefi = std.os.uefi;
+const Handle = uefi.Handle;
+const Event = uefi.Event;
+const Guid = uefi.Guid;
+const cc = uefi.cc;
lib/std/fifo.zig
@@ -46,39 +46,42 @@ pub fn LinearFifo(
// returned a slice into a copy on the stack
const SliceSelfArg = if (buffer_type == .Static) *Self else Self;
- pub usingnamespace switch (buffer_type) {
- .Static => struct {
- pub fn init() Self {
- return .{
- .allocator = {},
- .buf = undefined,
- .head = 0,
- .count = 0,
- };
- }
- },
- .Slice => struct {
- pub fn init(buf: []T) Self {
- return .{
- .allocator = {},
- .buf = buf,
- .head = 0,
- .count = 0,
- };
- }
- },
- .Dynamic => struct {
- pub fn init(allocator: Allocator) Self {
- return .{
- .allocator = allocator,
- .buf = &[_]T{},
- .head = 0,
- .count = 0,
- };
- }
- },
+ pub const init = switch (buffer_type) {
+ .Static => initStatic,
+ .Slice => initSlice,
+ .Dynamic => initDynamic,
};
+ fn initStatic() Self {
+ comptime assert(buffer_type == .Static);
+ return .{
+ .allocator = {},
+ .buf = undefined,
+ .head = 0,
+ .count = 0,
+ };
+ }
+
+ fn initSlice(buf: []T) Self {
+ comptime assert(buffer_type == .Slice);
+ return .{
+ .allocator = {},
+ .buf = buf,
+ .head = 0,
+ .count = 0,
+ };
+ }
+
+ fn initDynamic(allocator: Allocator) Self {
+ comptime assert(buffer_type == .Dynamic);
+ return .{
+ .allocator = allocator,
+ .buf = &.{},
+ .head = 0,
+ .count = 0,
+ };
+ }
+
pub fn deinit(self: Self) void {
if (buffer_type == .Dynamic) self.allocator.free(self.buf);
}
lib/std/heap.zig
@@ -38,25 +38,14 @@ const CAllocator = struct {
}
}
- usingnamespace if (@hasDecl(c, "malloc_size"))
- struct {
- pub const supports_malloc_size = true;
- pub const malloc_size = c.malloc_size;
- }
+ pub const supports_malloc_size = @TypeOf(malloc_size) != void;
+ pub const malloc_size = if (@hasDecl(c, "malloc_size"))
+ c.malloc_size
else if (@hasDecl(c, "malloc_usable_size"))
- struct {
- pub const supports_malloc_size = true;
- pub const malloc_size = c.malloc_usable_size;
- }
+ c.malloc_usable_size
else if (@hasDecl(c, "_msize"))
- struct {
- pub const supports_malloc_size = true;
- pub const malloc_size = c._msize;
- }
- else
- struct {
- pub const supports_malloc_size = false;
- };
+ c._msize
+ else {};
pub const supports_posix_memalign = @hasDecl(c, "posix_memalign");