| 
   | 
const std = @import("std.zig");
const tokenizer = @import("zig/tokenizer.zig");
 | 
| fmtzig/fmt.zig | 
pub const fmt = @import("zig/fmt.zig");
const assert = std.debug.assert;
 | 
| ErrorBundlezig/ErrorBundle.zig | 
pub const ErrorBundle = @import("zig/ErrorBundle.zig");
 | 
| Serverzig/Server.zig | 
pub const Server = @import("zig/Server.zig");
 | 
| Clientzig/Client.zig | 
pub const Client = @import("zig/Client.zig");
 | 
| Token | pub const Token = tokenizer.Token; | 
| Tokenizer | pub const Tokenizer = tokenizer.Tokenizer; | 
| fmtId | pub const fmtId = fmt.fmtId; | 
| fmtEscapes | pub const fmtEscapes = fmt.fmtEscapes; | 
| isValidId | pub const isValidId = fmt.isValidId; | 
| string_literalzig/string_literal.zig | 
pub const string_literal = @import("zig/string_literal.zig");
 | 
| number_literalzig/number_literal.zig | 
pub const number_literal = @import("zig/number_literal.zig");
 | 
| primitiveszig/primitives.zig | 
pub const primitives = @import("zig/primitives.zig");
 | 
| Astzig/Ast.zig | 
pub const Ast = @import("zig/Ast.zig");
 | 
| systemzig/system.zig | 
pub const system = @import("zig/system.zig");
 | 
| CrossTargetzig/CrossTarget.zig | 
pub const CrossTarget = @import("zig/CrossTarget.zig");
// Character literal parsing
 | 
| ParsedCharLiteral | pub const ParsedCharLiteral = string_literal.ParsedCharLiteral; | 
| parseCharLiteral | pub const parseCharLiteral = string_literal.parseCharLiteral; | 
| parseNumberLiteral | pub const parseNumberLiteral = number_literal.parseNumberLiteral; // Files needed by translate-c. | 
| c_builtinszig/c_builtins.zig | 
pub const c_builtins = @import("zig/c_builtins.zig");
 | 
| c_translationzig/c_translation.zig | 
pub const c_translation = @import("zig/c_translation.zig");
 | 
| SrcHash | pub const SrcHash = [16]u8; | 
| hashSrc() | 
pub fn hashSrc(src: []const u8) SrcHash {
    var out: SrcHash = undefined;
    std.crypto.hash.Blake3.hash(src, &out, .{});
    return out;
}
 | 
| srcHashEql() | 
pub fn srcHashEql(a: SrcHash, b: SrcHash) bool {
    return @as(u128, @bitCast(a)) == @as(u128, @bitCast(b));
}
 | 
| hashName() | 
pub fn hashName(parent_hash: SrcHash, sep: []const u8, name: []const u8) SrcHash {
    var out: SrcHash = undefined;
    var hasher = std.crypto.hash.Blake3.init(.{});
    hasher.update(&parent_hash);
    hasher.update(sep);
    hasher.update(name);
    hasher.final(&out);
    return out;
}
 | 
| Loc | 
pub const Loc = struct {
    line: usize,
    column: usize,
    source_line: []const u8,
 | 
| eql()Does not include the trailing newline. | 
    pub fn eql(a: Loc, b: Loc) bool {
        return a.line == b.line and a.column == b.column and std.mem.eql(u8, a.source_line, b.source_line);
    }
};
 | 
| findLineColumn() | 
pub fn findLineColumn(source: []const u8, byte_offset: usize) Loc {
    var line: usize = 0;
    var column: usize = 0;
    var line_start: usize = 0;
    var i: usize = 0;
    while (i < byte_offset) : (i += 1) {
        switch (source[i]) {
            '\n' => {
                line += 1;
                column = 0;
                line_start = i + 1;
            },
            else => {
                column += 1;
            },
        }
    }
    while (i < source.len and source[i] != '\n') {
        i += 1;
    }
    return .{
        .line = line,
        .column = column,
        .source_line = source[line_start..i],
    };
}
 | 
| lineDelta() | 
pub fn lineDelta(source: []const u8, start: usize, end: usize) isize {
    var line: isize = 0;
    if (end >= start) {
        for (source[start..end]) |byte| switch (byte) {
            '\n' => line += 1,
            else => continue,
        };
    } else {
        for (source[end..start]) |byte| switch (byte) {
            '\n' => line -= 1,
            else => continue,
        };
    }
    return line;
}
 | 
| BinNameOptions | 
pub const BinNameOptions = struct {
    root_name: []const u8,
    target: std.Target,
    output_mode: std.builtin.OutputMode,
    link_mode: ?std.builtin.LinkMode = null,
    version: ?std.SemanticVersion = null,
};
 | 
| binNameAlloc()Returns the standard file system basename of a binary generated by the Zig compiler. | 
pub fn binNameAlloc(allocator: std.mem.Allocator, options: BinNameOptions) error{OutOfMemory}![]u8 {
    const root_name = options.root_name;
    const target = options.target;
    switch (target.ofmt) {
        .coff => switch (options.output_mode) {
            .Exe => return std.fmt.allocPrint(allocator, "{s}{s}", .{ root_name, target.exeFileExt() }),
            .Lib => {
                const suffix = switch (options.link_mode orelse .Static) {
                    .Static => ".lib",
                    .Dynamic => ".dll",
                };
                return std.fmt.allocPrint(allocator, "{s}{s}", .{ root_name, suffix });
            },
            .Obj => return std.fmt.allocPrint(allocator, "{s}.obj", .{root_name}),
        },
        .elf => switch (options.output_mode) {
            .Exe => return allocator.dupe(u8, root_name),
            .Lib => {
                switch (options.link_mode orelse .Static) {
                    .Static => return std.fmt.allocPrint(allocator, "{s}{s}.a", .{
                        target.libPrefix(), root_name,
                    }),
                    .Dynamic => {
                        if (options.version) |ver| {
                            return std.fmt.allocPrint(allocator, "{s}{s}.so.{d}.{d}.{d}", .{
                                target.libPrefix(), root_name, ver.major, ver.minor, ver.patch,
                            });
                        } else {
                            return std.fmt.allocPrint(allocator, "{s}{s}.so", .{
                                target.libPrefix(), root_name,
                            });
                        }
                    },
                }
            },
            .Obj => return std.fmt.allocPrint(allocator, "{s}.o", .{root_name}),
        },
        .macho => switch (options.output_mode) {
            .Exe => return allocator.dupe(u8, root_name),
            .Lib => {
                switch (options.link_mode orelse .Static) {
                    .Static => return std.fmt.allocPrint(allocator, "{s}{s}.a", .{
                        target.libPrefix(), root_name,
                    }),
                    .Dynamic => {
                        if (options.version) |ver| {
                            return std.fmt.allocPrint(allocator, "{s}{s}.{d}.{d}.{d}.dylib", .{
                                target.libPrefix(), root_name, ver.major, ver.minor, ver.patch,
                            });
                        } else {
                            return std.fmt.allocPrint(allocator, "{s}{s}.dylib", .{
                                target.libPrefix(), root_name,
                            });
                        }
                    },
                }
            },
            .Obj => return std.fmt.allocPrint(allocator, "{s}.o", .{root_name}),
        },
        .wasm => switch (options.output_mode) {
            .Exe => return std.fmt.allocPrint(allocator, "{s}{s}", .{ root_name, target.exeFileExt() }),
            .Lib => {
                switch (options.link_mode orelse .Static) {
                    .Static => return std.fmt.allocPrint(allocator, "{s}{s}.a", .{
                        target.libPrefix(), root_name,
                    }),
                    .Dynamic => return std.fmt.allocPrint(allocator, "{s}.wasm", .{root_name}),
                }
            },
            .Obj => return std.fmt.allocPrint(allocator, "{s}.o", .{root_name}),
        },
        .c => return std.fmt.allocPrint(allocator, "{s}.c", .{root_name}),
        .spirv => return std.fmt.allocPrint(allocator, "{s}.spv", .{root_name}),
        .hex => return std.fmt.allocPrint(allocator, "{s}.ihex", .{root_name}),
        .raw => return std.fmt.allocPrint(allocator, "{s}.bin", .{root_name}),
        .plan9 => switch (options.output_mode) {
            .Exe => return allocator.dupe(u8, root_name),
            .Obj => return std.fmt.allocPrint(allocator, "{s}{s}", .{
                root_name, target.ofmt.fileExt(target.cpu.arch),
            }),
            .Lib => return std.fmt.allocPrint(allocator, "{s}{s}.a", .{
                target.libPrefix(), root_name,
            }),
        },
        .nvptx => return std.fmt.allocPrint(allocator, "{s}.ptx", .{root_name}),
        .dxcontainer => return std.fmt.allocPrint(allocator, "{s}.dxil", .{root_name}),
    }
}
test {
    @import("std").testing.refAllDecls(@This());
}
 | 
| Generated by zstd-browse2 on 2023-11-04 14:12:19 -0400. |