commit 68bf81432cd0bafc355821370268eedc91ed8eb7 (tree)
parent bc08199ef1f9419b5b8ed4165458783314934266
Author: Andrew Kelley <andrew@ziglang.org>
Date: Sat, 11 Apr 2026 14:34:23 -0700
update aro to latest
upstream commit 5f5a050569a95ecc40a426f0c3666ae7ef987ede
Diffstat:
32 files changed, 3686 insertions(+), 2540 deletions(-)
diff --git a/lib/compiler/aro/aro/Attribute.zig b/lib/compiler/aro/aro/Attribute.zig
@@ -7,7 +7,9 @@ const Diagnostics = @import("Diagnostics.zig");
const Parser = @import("Parser.zig");
const Tree = @import("Tree.zig");
const TokenIndex = Tree.TokenIndex;
-const QualType = @import("TypeStore.zig").QualType;
+const TypeStore = @import("TypeStore.zig");
+const Type = TypeStore.Type;
+const QualType = TypeStore.QualType;
const Value = @import("Value.zig");
const Attribute = @This();
@@ -341,7 +343,6 @@ fn diagnoseField(
pub fn diagnose(attr: Tag, arguments: *Arguments, arg_idx: u32, res: Parser.Result, arg_start: TokenIndex, node: Tree.Node, p: *Parser) !bool {
switch (attr) {
- .nonnull => return false,
inline else => |tag| {
const decl = @typeInfo(attributes).@"struct".decls[@intFromEnum(tag)];
const max_arg_count = comptime maxArgCount(tag);
@@ -529,7 +530,10 @@ const attributes = struct {
pub const @"noinline" = struct {};
pub const noipa = struct {};
// TODO: arbitrary number of arguments
- pub const nonnull = struct {};
+ // const nonnull = struct {
+ // // arg_index: []const u32,
+ // };
+ // };
pub const nonstring = struct {};
pub const noplt = struct {};
pub const @"noreturn" = struct {};
@@ -577,6 +581,7 @@ const attributes = struct {
};
} = null,
};
+ pub const single = struct {};
pub const spectre = struct {
arg: enum {
nomitigation,
@@ -618,6 +623,7 @@ const attributes = struct {
__name_tok: TokenIndex,
};
pub const uninitialized = struct {};
+ pub const unsafe_indexable = struct {};
pub const unsequenced = struct {};
pub const unused = struct {};
pub const used = struct {};
@@ -723,6 +729,7 @@ pub const Arguments = blk: {
name.* = decl.name;
T.* = @field(attributes, decl.name);
}
+
break :blk @Union(.auto, null, &names, &types, &@splat(.{}));
};
@@ -784,15 +791,8 @@ fn ignoredAttrErr(p: *Parser, tok: TokenIndex, attr: Attribute.Tag, context: []c
try p.err(tok, .ignored_attribute, .{ @tagName(attr), context });
}
-pub fn applyParameterAttributes(p: *Parser, qt: QualType, attr_buf_start: usize, diagnostic: ?Parser.Diagnostic) !QualType {
- return applyVariableOrParameterAttributes(p, qt, attr_buf_start, diagnostic, .parameter);
-}
-
+pub const applyParameterAttributes = applyVariableAttributes;
pub fn applyVariableAttributes(p: *Parser, qt: QualType, attr_buf_start: usize, diagnostic: ?Parser.Diagnostic) !QualType {
- return applyVariableOrParameterAttributes(p, qt, attr_buf_start, diagnostic, .variable);
-}
-
-fn applyVariableOrParameterAttributes(p: *Parser, qt: QualType, attr_buf_start: usize, diagnostic: ?Parser.Diagnostic, context: enum { parameter, variable }) !QualType {
const gpa = p.comp.gpa;
const attrs = p.attr_buf.items(.attr)[attr_buf_start..];
const toks = p.attr_buf.items(.tok)[attr_buf_start..];
@@ -804,6 +804,7 @@ fn applyVariableOrParameterAttributes(p: *Parser, qt: QualType, attr_buf_start:
// zig fmt: off
.alias, .may_alias, .deprecated, .unavailable, .unused, .warn_if_not_aligned, .weak, .used,
.noinit, .retain, .persistent, .section, .mode, .asm_label, .nullability, .unaligned, .selectany, .internal_linkage,
+ .visibility,
=> try p.attr_application_buf.append(gpa, attr),
// zig fmt: on
.common => if (nocommon) {
@@ -820,12 +821,6 @@ fn applyVariableOrParameterAttributes(p: *Parser, qt: QualType, attr_buf_start:
},
.vector_size => try attr.applyVectorSize(p, tok, &base_qt),
.aligned => try attr.applyAligned(p, base_qt, diagnostic),
- .nonnull => {
- switch (context) {
- .parameter => try p.err(tok, .attribute_todo, .{ "nonnull", "parameters" }),
- .variable => try p.err(tok, .nonnull_not_applicable, .{}),
- }
- },
.nonstring => {
if (base_qt.get(p.comp, .array)) |array_ty| {
if (array_ty.elem.get(p.comp, .int)) |int_ty| switch (int_ty) {
@@ -848,11 +843,28 @@ fn applyVariableOrParameterAttributes(p: *Parser, qt: QualType, attr_buf_start:
} else {
try p.attr_application_buf.append(gpa, attr);
},
- .calling_convention => try applyCallingConvention(attr, p, tok, base_qt),
+ .single,
+ .unsafe_indexable,
+ => try applyBoundsSafetyAttr(.fromTag(attr.tag), p, tok, &base_qt),
+
+ .calling_convention => try applyKeywordCallingConvention(attr, p, tok, base_qt),
+
+ .fastcall,
+ .stdcall,
+ .thiscall,
+ .vectorcall,
+ .cdecl,
+ .pcs,
+ .riscv_vector_cc,
+ .aarch64_sve_pcs,
+ .aarch64_vector_pcs,
+ .sysv_abi,
+ .ms_abi,
+ => try applyGnuAttrCallingConvention(attr, p, tok, base_qt),
+
.alloc_size,
.copy,
.tls_model,
- .visibility,
=> |t| try p.err(tok, .attribute_todo, .{ @tagName(t), "variables" }),
// There is already an error in Parser for _Noreturn keyword
.noreturn => if (attr.syntax != .keyword) try ignoredAttrErr(p, tok, attr.tag, "variables"),
@@ -903,7 +915,25 @@ pub fn applyTypeAttributes(p: *Parser, qt: QualType, attr_buf_start: usize, diag
} else {
try p.err(tok, .designated_init_invalid, .{});
},
- .calling_convention => try applyCallingConvention(attr, p, tok, base_qt),
+ .calling_convention => try applyKeywordCallingConvention(attr, p, tok, base_qt),
+
+ .fastcall,
+ .stdcall,
+ .thiscall,
+ .vectorcall,
+ .cdecl,
+ .pcs,
+ .riscv_vector_cc,
+ .aarch64_sve_pcs,
+ .aarch64_vector_pcs,
+ .sysv_abi,
+ .ms_abi,
+ => try applyGnuAttrCallingConvention(attr, p, tok, base_qt),
+
+ .single,
+ .unsafe_indexable,
+ => try applyBoundsSafetyAttr(.fromTag(attr.tag), p, tok, &base_qt),
+
.alloc_size,
.copy,
.scalar_storage_order,
@@ -931,6 +961,7 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize)
.@"const", .warn_unused_result, .section, .returns_nonnull, .returns_twice, .@"error",
.externally_visible, .retain, .flatten, .gnu_inline, .alias, .asm_label, .nodiscard,
.reproducible, .unsequenced, .nothrow, .nullability, .unaligned, .internal_linkage,
+ .visibility,
=> try p.attr_application_buf.append(gpa, attr),
// zig fmt: on
.hot => if (cold) {
@@ -959,97 +990,21 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize)
},
.aligned => try attr.applyAligned(p, base_qt, null),
.format => try attr.applyFormat(p, base_qt),
- .calling_convention => try applyCallingConvention(attr, p, tok, base_qt),
- .fastcall => if (p.comp.target.cpu.arch == .x86) {
- try p.attr_application_buf.append(gpa, .{
- .tag = .calling_convention,
- .args = .{ .calling_convention = .{ .cc = .fastcall } },
- .syntax = attr.syntax,
- });
- } else {
- try p.err(tok, .callconv_not_supported, .{"fastcall"});
- },
- .stdcall => if (p.comp.target.cpu.arch == .x86) {
- try p.attr_application_buf.append(gpa, .{
- .tag = .calling_convention,
- .args = .{ .calling_convention = .{ .cc = .stdcall } },
- .syntax = attr.syntax,
- });
- } else {
- try p.err(tok, .callconv_not_supported, .{"stdcall"});
- },
- .thiscall => if (p.comp.target.cpu.arch == .x86) {
- try p.attr_application_buf.append(gpa, .{
- .tag = .calling_convention,
- .args = .{ .calling_convention = .{ .cc = .thiscall } },
- .syntax = attr.syntax,
- });
- } else {
- try p.err(tok, .callconv_not_supported, .{"thiscall"});
- },
- .vectorcall => if (p.comp.target.cpu.arch == .x86 or p.comp.target.cpu.arch.isAARCH64()) {
- try p.attr_application_buf.append(gpa, .{
- .tag = .calling_convention,
- .args = .{ .calling_convention = .{ .cc = .vectorcall } },
- .syntax = attr.syntax,
- });
- } else {
- try p.err(tok, .callconv_not_supported, .{"vectorcall"});
- },
- .cdecl => {},
- .pcs => if (p.comp.target.cpu.arch.isArm()) {
- try p.attr_application_buf.append(gpa, .{
- .tag = .calling_convention,
- .args = .{ .calling_convention = .{ .cc = switch (attr.args.pcs.kind) {
- .aapcs => .arm_aapcs,
- .@"aapcs-vfp" => .arm_aapcs_vfp,
- } } },
- .syntax = attr.syntax,
- });
- } else {
- try p.err(tok, .callconv_not_supported, .{"pcs"});
- },
- .riscv_vector_cc => if (p.comp.target.cpu.arch.isRISCV()) {
- try p.attr_application_buf.append(gpa, .{
- .tag = .calling_convention,
- .args = .{ .calling_convention = .{ .cc = .riscv_vector } },
- .syntax = attr.syntax,
- });
- } else {
- try p.err(tok, .callconv_not_supported, .{"pcs"});
- },
- .aarch64_sve_pcs => if (p.comp.target.cpu.arch.isAARCH64()) {
- try p.attr_application_buf.append(gpa, .{
- .tag = .calling_convention,
- .args = .{ .calling_convention = .{ .cc = .aarch64_sve_pcs } },
- .syntax = attr.syntax,
- });
- } else {
- try p.err(tok, .callconv_not_supported, .{"pcs"});
- },
- .aarch64_vector_pcs => if (p.comp.target.cpu.arch.isAARCH64()) {
- try p.attr_application_buf.append(gpa, .{
- .tag = .calling_convention,
- .args = .{ .calling_convention = .{ .cc = .aarch64_vector_pcs } },
- .syntax = attr.syntax,
- });
- } else {
- try p.err(tok, .callconv_not_supported, .{"pcs"});
- },
- .sysv_abi => if (p.comp.target.cpu.arch == .x86_64 and p.comp.target.os.tag == .windows) {
- try p.attr_application_buf.append(gpa, .{
- .tag = .calling_convention,
- .args = .{ .calling_convention = .{ .cc = .x86_64_sysv } },
- .syntax = attr.syntax,
- });
- },
- .ms_abi => if (p.comp.target.cpu.arch == .x86_64 and p.comp.target.os.tag != .windows) {
- try p.attr_application_buf.append(gpa, .{
- .tag = .calling_convention,
- .args = .{ .calling_convention = .{ .cc = .x86_64_win } },
- .syntax = attr.syntax,
- });
- },
+ .calling_convention => try applyKeywordCallingConvention(attr, p, tok, base_qt),
+
+ .fastcall,
+ .stdcall,
+ .thiscall,
+ .vectorcall,
+ .cdecl,
+ .pcs,
+ .riscv_vector_cc,
+ .aarch64_sve_pcs,
+ .aarch64_vector_pcs,
+ .sysv_abi,
+ .ms_abi,
+ => try applyGnuAttrCallingConvention(attr, p, tok, base_qt),
+
.malloc => {
if (base_qt.get(p.comp, .func).?.return_type.isPointer(p.comp)) {
try p.attr_application_buf.append(gpa, attr);
@@ -1102,7 +1057,7 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize)
.no_stack_protector,
.noclone,
.noipa,
- .nonnull,
+ // .nonnull,
.noplt,
// .optimize,
.patchable_function_entry,
@@ -1112,7 +1067,6 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize)
.symver,
.target,
.target_clones,
- .visibility,
.weakref,
.zero_call_used_regs,
=> |t| try p.err(tok, .attribute_todo, .{ @tagName(t), "functions" }),
@@ -1262,9 +1216,129 @@ fn applyFormat(attr: Attribute, p: *Parser, qt: QualType) !void {
try p.attr_application_buf.append(p.comp.gpa, attr);
}
-fn applyCallingConvention(attr: Attribute, p: *Parser, tok: TokenIndex, qt: QualType) !void {
- if (!qt.is(p.comp, .func)) {
- return p.err(tok, .callconv_non_func, .{ p.tok_ids[tok].symbol(), qt });
+/// These come from GNU attributes like __attribute__((sysv_abi))
+fn applyGnuAttrCallingConvention(attr: Attribute, p: *Parser, tok: TokenIndex, qt: QualType) !void {
+ if (!qt.isCallable(p.comp)) {
+ return p.err(tok, .callconv_non_func, .{ p.tokSlice(tok), qt });
+ }
+ const gpa = p.comp.gpa;
+ switch (attr.tag) {
+ .fastcall => if (p.comp.target.cpu.arch == .x86) {
+ try p.attr_application_buf.append(gpa, .{
+ .tag = .calling_convention,
+ .args = .{ .calling_convention = .{ .cc = .fastcall } },
+ .syntax = attr.syntax,
+ });
+ } else {
+ try p.err(tok, .callconv_not_supported, .{"fastcall"});
+ },
+ .stdcall => if (p.comp.target.cpu.arch == .x86) {
+ try p.attr_application_buf.append(gpa, .{
+ .tag = .calling_convention,
+ .args = .{ .calling_convention = .{ .cc = .stdcall } },
+ .syntax = attr.syntax,
+ });
+ } else {
+ try p.err(tok, .callconv_not_supported, .{"stdcall"});
+ },
+ .thiscall => if (p.comp.target.cpu.arch == .x86) {
+ try p.attr_application_buf.append(gpa, .{
+ .tag = .calling_convention,
+ .args = .{ .calling_convention = .{ .cc = .thiscall } },
+ .syntax = attr.syntax,
+ });
+ } else {
+ try p.err(tok, .callconv_not_supported, .{"thiscall"});
+ },
+ .vectorcall => if (p.comp.target.cpu.arch == .x86 or p.comp.target.cpu.arch.isAARCH64()) {
+ try p.attr_application_buf.append(gpa, .{
+ .tag = .calling_convention,
+ .args = .{ .calling_convention = .{ .cc = .vectorcall } },
+ .syntax = attr.syntax,
+ });
+ } else {
+ try p.err(tok, .callconv_not_supported, .{"vectorcall"});
+ },
+ .cdecl => {},
+ .pcs => if (p.comp.target.cpu.arch.isArm()) {
+ try p.attr_application_buf.append(gpa, .{
+ .tag = .calling_convention,
+ .args = .{ .calling_convention = .{ .cc = switch (attr.args.pcs.kind) {
+ .aapcs => .arm_aapcs,
+ .@"aapcs-vfp" => .arm_aapcs_vfp,
+ } } },
+ .syntax = attr.syntax,
+ });
+ } else {
+ try p.err(tok, .callconv_not_supported, .{"pcs"});
+ },
+ .riscv_vector_cc => if (p.comp.target.cpu.arch.isRISCV()) {
+ try p.attr_application_buf.append(gpa, .{
+ .tag = .calling_convention,
+ .args = .{ .calling_convention = .{ .cc = .riscv_vector } },
+ .syntax = attr.syntax,
+ });
+ } else {
+ try p.err(tok, .callconv_not_supported, .{"pcs"});
+ },
+ .aarch64_sve_pcs => if (p.comp.target.cpu.arch.isAARCH64()) {
+ try p.attr_application_buf.append(gpa, .{
+ .tag = .calling_convention,
+ .args = .{ .calling_convention = .{ .cc = .aarch64_sve_pcs } },
+ .syntax = attr.syntax,
+ });
+ } else {
+ try p.err(tok, .callconv_not_supported, .{"pcs"});
+ },
+ .aarch64_vector_pcs => if (p.comp.target.cpu.arch.isAARCH64()) {
+ try p.attr_application_buf.append(gpa, .{
+ .tag = .calling_convention,
+ .args = .{ .calling_convention = .{ .cc = .aarch64_vector_pcs } },
+ .syntax = attr.syntax,
+ });
+ } else {
+ try p.err(tok, .callconv_not_supported, .{"pcs"});
+ },
+ .sysv_abi => if (p.comp.target.cpu.arch == .x86_64 and p.comp.target.os.tag == .windows) {
+ try p.attr_application_buf.append(gpa, .{
+ .tag = .calling_convention,
+ .args = .{ .calling_convention = .{ .cc = .x86_64_sysv } },
+ .syntax = attr.syntax,
+ });
+ },
+ .ms_abi => if (p.comp.target.cpu.arch == .x86_64 and p.comp.target.os.tag != .windows) {
+ try p.attr_application_buf.append(gpa, .{
+ .tag = .calling_convention,
+ .args = .{ .calling_convention = .{ .cc = .x86_64_win } },
+ .syntax = attr.syntax,
+ });
+ },
+ else => unreachable,
+ }
+}
+
+fn applyBoundsSafetyAttr(bounds: Type.Pointer.Bounds, p: *Parser, tok: TokenIndex, qt: *QualType) !void {
+ if (qt.isInvalid()) return;
+ const pointer = qt.get(p.comp, .pointer) orelse {
+ return p.err(tok, .attribute_requires_pointer, .{@tagName(bounds)});
+ };
+ if (pointer.bounds == bounds) {
+ return p.err(tok, .redundant_bounds_annotation, .{@tagName(bounds)});
+ }
+ if (pointer.bounds != .c) {
+ return p.err(tok, .multiple_bounds_annotations, .{});
+ }
+ qt.* = try p.comp.type_store.put(p.comp.gpa, .{ .pointer = .{
+ .child = pointer.child,
+ .decayed = pointer.decayed,
+ .bounds = bounds,
+ } });
+}
+
+/// These come from explicit MSVC keywords like __stdcall, __fastcall, etc
+fn applyKeywordCallingConvention(attr: Attribute, p: *Parser, tok: TokenIndex, qt: QualType) !void {
+ if (!qt.isCallable(p.comp)) {
+ return p.err(tok, .callconv_non_func, .{ p.tokSlice(tok), qt });
}
switch (attr.args.calling_convention.cc) {
.c => {},
@@ -1295,3 +1369,15 @@ fn applySelected(qt: QualType, p: *Parser) !QualType {
.attributes = p.attr_application_buf.items,
} })).withQualifiers(qt);
}
+
+pub fn visibilityFromString(s: []const u8) ?std.builtin.SymbolVisibility {
+ if (mem.eql(u8, s, "internal")) {
+ return .hidden;
+ }
+ const visibility = std.meta.stringToEnum(std.builtin.SymbolVisibility, s) orelse return null;
+ // compiler will notify us if .internal is added as a visibility type
+ switch (visibility) {
+ .default, .hidden, .protected => {},
+ }
+ return visibility;
+}
diff --git a/lib/compiler/aro/aro/Attribute/names.zig b/lib/compiler/aro/aro/Attribute/names.zig
@@ -99,6 +99,7 @@ pub const Tag = enum(u16) { aarch64_sve_pcs,
selectany,
sentinel,
simd,
+ single,
spectre,
stack_protect,
stdcall,
@@ -112,6 +113,7 @@ pub const Tag = enum(u16) { aarch64_sve_pcs,
transparent_union,
unavailable,
uninitialized,
+ unsafe_indexable,
unsequenced,
unused,
used,
@@ -181,7 +183,7 @@ pub const longest_name = 30;
/// If found, returns the index of the node within the `dafsa` array.
/// Otherwise, returns `null`.
pub fn findInList(first_child_index: u16, char: u8) ?u16 {
- @setEvalBranchQuota(234);
+ @setEvalBranchQuota(238);
var index = first_child_index;
while (true) {
if (dafsa[index].char == char) return index;
@@ -290,9 +292,9 @@ const dafsa = [_]Node{
.{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 25, .child_index = 47 },
.{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 49 },
.{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 54 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 11, .child_index = 56 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 56 },
.{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 63 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 67 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 7, .child_index = 67 },
.{ .char = 'v', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 70 },
.{ .char = 'w', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 72 },
.{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 74 },
@@ -334,642 +336,653 @@ const dafsa = [_]Node{
.{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 130 },
.{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 131 },
.{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 132 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 135 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 136 },
- .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 137 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 139 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 141 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 142 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 144 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 145 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 146 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 150 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 152 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 153 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 154 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 155 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 156 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 157 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 158 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 159 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 161 },
- .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 162 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 163 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 164 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 165 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 166 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 167 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 135 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 137 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 138 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 140 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 142 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 143 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 145 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 146 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 147 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 151 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 152 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 153 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 154 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 155 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 156 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 157 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 158 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 159 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 160 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 162 },
+ .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 163 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 164 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 165 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 166 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 167 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 168 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 169 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 170 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 171 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 172 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 173 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 174 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 175 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 177 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 179 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 180 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 181 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 182 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 183 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 184 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 185 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 169 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 170 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 171 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 172 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 173 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 174 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 175 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 176 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 178 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 180 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 181 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 182 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 183 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 184 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 185 },
.{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 186 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 187 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 188 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 189 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 190 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 191 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 },
- .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 },
- .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 13, .child_index = 195 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 200 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 201 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 203 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 204 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 206 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 207 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 208 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 209 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 110 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 187 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 188 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 189 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 190 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 191 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 192 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 195 },
+ .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 13, .child_index = 196 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 201 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 202 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 204 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 205 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 207 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 208 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 209 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 210 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 110 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 211 },
.{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 211 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 212 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 76 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 212 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 213 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 214 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 216 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 217 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 218 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 219 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 220 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 221 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 222 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 223 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 224 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 225 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 226 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 227 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 228 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 229 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 230 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 231 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 232 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 233 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 234 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 235 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 236 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 237 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 238 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 239 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 240 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 241 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 242 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 213 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 214 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 215 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 217 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 218 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 219 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 220 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 221 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 222 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 171 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 223 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 224 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 225 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 226 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 227 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 228 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 229 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 230 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 231 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 232 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 233 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 234 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 235 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 236 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 238 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 239 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 240 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 241 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 242 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 243 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 244 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 245 },
.{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 122 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 243 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 244 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 245 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 246 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 247 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 248 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 249 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 250 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 251 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 252 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 246 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 247 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 248 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 249 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 250 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 251 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 252 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 254 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 255 },
.{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 254 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 256 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 257 },
.{ .char = 'y', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 255 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 256 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 257 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 258 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 259 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 260 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 261 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 262 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 224 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 263 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 264 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 265 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 266 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 267 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 268 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 258 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 259 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 260 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 261 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 262 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 263 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 264 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 265 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 226 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 266 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 267 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 268 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 269 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 270 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 271 },
.{ .char = 'f', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 269 },
- .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 270 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 271 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 272 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 273 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 274 },
.{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 272 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 273 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 274 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 276 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 277 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 278 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 282 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 283 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 284 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 285 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 287 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 288 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 275 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 276 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 277 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 279 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 280 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 281 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 284 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 285 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 286 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 287 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 288 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 290 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 291 },
.{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 289 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 290 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 291 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 292 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 293 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 294 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 295 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 296 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 297 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 298 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 299 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 300 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 292 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 293 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 294 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 295 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 296 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 297 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 298 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 299 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 300 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 301 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 302 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 303 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 304 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 305 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 306 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 302 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 303 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 304 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 305 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 306 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 307 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 308 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 309 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 310 },
.{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 109 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 307 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 224 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 308 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 309 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 310 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 311 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 312 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 313 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 314 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 315 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 316 },
- .{ .char = 'k', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 318 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 319 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 320 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 311 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 226 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 312 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 313 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 314 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 315 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 316 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 317 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 318 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 319 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 320 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 321 },
+ .{ .char = 'k', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 323 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 324 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 325 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 },
- .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 321 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 322 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 324 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 325 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 326 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 327 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 328 },
+ .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 326 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 327 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 329 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 330 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 332 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 333 },
.{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 329 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 330 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 332 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 333 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 334 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 },
- .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 334 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 337 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 338 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 339 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 340 },
+ .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 341 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 341 },
.{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 337 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 338 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 339 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 340 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 341 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 342 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 343 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 344 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 345 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 346 },
.{ .char = 'c', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 342 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 344 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 266 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 200 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 345 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 346 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 347 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 189 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 348 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 349 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 347 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 349 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 269 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 201 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 350 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 351 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 352 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 353 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 354 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 355 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 356 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 351 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 352 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 190 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 353 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 354 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 355 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 356 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 357 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 358 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 359 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 360 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 172 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 361 },
.{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 101 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 357 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 362 },
.{ .char = 'a', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 358 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 359 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 360 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 361 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 362 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 363 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 364 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 365 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 366 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 367 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 368 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 369 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 370 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 363 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 364 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 365 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 366 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 367 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 368 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 369 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 370 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 371 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 372 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 373 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 256 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 374 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 375 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 125 },
- .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 371 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 372 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 260 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 373 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 374 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 375 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 376 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 377 },
- .{ .char = 'q', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 378 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 379 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 380 },
- .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 381 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 383 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 384 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 385 },
- .{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 386 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 },
+ .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 376 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 377 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 263 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 378 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 379 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 380 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 381 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 382 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 383 },
+ .{ .char = 'q', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 384 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 385 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 386 },
.{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 387 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 389 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 185 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 390 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 391 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 392 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 315 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 393 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 394 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 389 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 390 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 391 },
+ .{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 392 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 393 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 395 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 186 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 396 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 397 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 398 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 320 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 399 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 400 },
.{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 395 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 396 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 397 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 398 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 399 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 400 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 401 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 340 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 401 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 402 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 403 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 404 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 405 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 406 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 403 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 404 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 405 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 406 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 407 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 408 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 409 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 410 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 411 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 412 },
.{ .char = 'i', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 407 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 408 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 409 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 410 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 411 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 412 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 413 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 413 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 414 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 415 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 416 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 417 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 418 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 419 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 414 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 355 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 415 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 416 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 417 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 418 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 419 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 420 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 421 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 422 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 423 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 424 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 425 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 426 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 427 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 428 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 250 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 429 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 430 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 431 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 432 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 433 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 434 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 435 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 438 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 439 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 440 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 189 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 441 },
- .{ .char = '4', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 442 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 443 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 444 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 445 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 295 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 },
- .{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 420 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 360 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 421 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 422 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 423 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 424 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 425 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 426 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 427 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 428 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 429 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 430 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 431 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 432 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 433 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 434 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 435 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 436 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 438 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 439 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 440 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 449 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 450 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 451 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 452 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 453 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 454 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 441 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 442 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 444 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 445 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 446 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 190 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 },
+ .{ .char = '4', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 449 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 450 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 451 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 452 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 298 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 454 },
.{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 455 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 357 },
+ .{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 456 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 457 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 458 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 459 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 460 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 461 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 462 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 463 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 464 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 465 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 466 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 467 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 383 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 457 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 458 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 459 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 460 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 461 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 462 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 362 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 463 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 464 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 465 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 466 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 467 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 468 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 469 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 470 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 471 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 472 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 473 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 474 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 389 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 },
.{ .char = 'w', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 468 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 469 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 470 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 475 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 476 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 477 },
.{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 471 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 472 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 473 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 474 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 475 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 250 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 476 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 477 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 427 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 478 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 479 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 480 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 481 },
- .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 482 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 305 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 483 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 484 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 485 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 478 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 479 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 480 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 481 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 482 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 483 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 484 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 433 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 485 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 487 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 488 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 489 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 490 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 309 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 491 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 492 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 493 },
.{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 487 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 489 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 490 },
- .{ .char = 'e', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 260 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 491 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 492 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 493 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 179 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 494 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 495 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 496 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 494 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 495 },
.{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 497 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 498 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 498 },
+ .{ .char = 'e', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 263 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 499 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 500 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 501 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 502 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 503 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 306 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 504 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 505 },
- .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 506 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 507 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 508 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 509 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 510 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 513 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 514 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 173 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 515 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 516 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 517 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 518 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 519 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 520 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 444 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 521 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 522 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 523 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 524 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 525 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 526 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 527 },
- .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 250 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 528 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 529 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 530 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 531 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 440 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 532 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 533 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 534 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 235 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 535 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 536 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 500 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 501 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 180 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 502 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 503 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 504 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 505 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 506 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 507 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 508 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 509 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 510 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 511 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 310 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 512 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 513 },
+ .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 514 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 515 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 516 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 517 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 518 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 520 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 521 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 522 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 174 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 523 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 524 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 525 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 526 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 527 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 528 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 529 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 451 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 530 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 531 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 532 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 533 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 534 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 535 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 536 },
+ .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 },
.{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 537 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 538 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 539 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 540 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 542 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 538 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 539 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 540 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 541 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 542 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 543 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 238 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 544 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 545 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 546 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 547 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 548 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 549 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 551 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 518 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 543 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 544 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 545 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 546 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 547 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 548 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 549 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 550 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 551 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 552 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 173 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 553 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 554 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 555 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 556 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 557 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 558 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 560 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 561 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 562 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 563 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 564 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 565 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 566 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 },
- .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 568 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 569 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 570 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 571 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 526 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 552 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 553 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 554 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 555 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 556 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 557 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 558 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 306 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 560 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 561 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 174 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 562 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 563 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 564 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 565 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 566 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 568 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 569 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 570 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 571 },
.{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 573 },
- .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 574 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 575 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 573 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 574 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 575 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 576 },
+ .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 577 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 578 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 579 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 580 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 581 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 582 },
+ .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 583 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 584 },
.{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 576 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 577 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 578 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 579 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 580 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 581 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 582 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 583 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 584 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 585 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 586 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 587 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 588 },
- .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 585 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 586 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 587 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 588 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 589 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 590 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 266 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 591 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 590 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 591 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 592 },
.{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 593 },
- .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 5, .child_index = 594 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 595 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 596 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 597 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 598 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 599 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 600 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 601 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 602 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 421 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 603 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 604 },
- .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 392 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 605 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 606 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 607 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 608 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 609 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 610 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 611 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 612 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 613 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 614 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 615 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 616 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 620 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 621 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 622 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 623 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 624 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 625 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 626 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 594 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 595 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 596 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 597 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 598 },
+ .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 599 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 600 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 269 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 601 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 602 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 603 },
+ .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 5, .child_index = 604 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 605 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 606 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 607 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 608 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 609 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 610 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 611 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 612 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 427 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 613 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 614 },
+ .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 615 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 398 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 616 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 617 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 618 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 619 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 620 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 621 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 622 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 623 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 624 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 625 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 626 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 627 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 631 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 632 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 634 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 635 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 636 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 637 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 627 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 628 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 629 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 630 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 631 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 621 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 632 },
- .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 634 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 635 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 636 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 348 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 637 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 638 },
- .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 639 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 641 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 638 },
+ .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 639 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 641 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 642 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 632 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 643 },
+ .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 644 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 645 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 646 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 647 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 353 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 648 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 649 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 650 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 651 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 652 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 642 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 643 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 372 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 644 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 645 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 646 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 647 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 648 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 584 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 509 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 650 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 651 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 652 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 653 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 654 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 655 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 656 },
- .{ .char = 'k', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 397 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 657 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 266 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 658 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 300 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 653 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 654 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 377 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 655 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 656 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 657 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 658 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 659 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 660 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 306 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 661 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 594 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 517 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 660 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 661 },
.{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 662 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 663 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 664 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 229 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 665 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 666 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 350 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 667 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 668 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 669 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 670 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 158 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 671 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 663 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 664 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 665 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 666 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 667 },
+ .{ .char = 'k', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 403 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 668 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 269 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 669 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 303 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 670 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 671 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 310 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 672 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 673 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 207 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 674 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 675 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 676 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 677 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 678 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 679 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 680 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 219 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 586 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 681 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 682 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 683 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 684 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 685 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 686 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 673 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 674 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 675 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 231 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 676 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 677 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 355 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 678 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 679 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 680 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 681 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 159 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 682 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 683 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 684 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 208 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 685 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 686 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 687 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 688 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 689 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 690 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 173 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 691 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 644 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 688 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 689 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 690 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 691 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 220 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 596 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 692 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 693 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 694 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 695 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 696 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 697 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 698 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 699 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 700 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 701 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 174 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 702 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 },
};
pub const data = blk: {
- @setEvalBranchQuota(1053);
+ @setEvalBranchQuota(1071);
break :blk [_]Properties{
.{ .tag = .aarch64_sve_pcs, .gnu = true },
.{ .tag = .aarch64_vector_pcs, .gnu = true },
@@ -1062,6 +1075,7 @@ pub const data = blk: {
.{ .tag = .selectany, .gnu = true, .declspec = true },
.{ .tag = .sentinel, .gnu = true },
.{ .tag = .simd, .gnu = true },
+ .{ .tag = .single, .gnu = true },
.{ .tag = .spectre, .declspec = true },
.{ .tag = .stack_protect, .gnu = true },
.{ .tag = .stdcall, .gnu = true },
@@ -1075,6 +1089,7 @@ pub const data = blk: {
.{ .tag = .transparent_union, .gnu = true },
.{ .tag = .unavailable, .gnu = true },
.{ .tag = .uninitialized, .gnu = true },
+ .{ .tag = .unsafe_indexable, .gnu = true },
.{ .tag = .unsequenced, .c23 = true },
.{ .tag = .unused, .gnu = true },
.{ .tag = .used, .gnu = true },
diff --git a/lib/compiler/aro/aro/Builtins.zig b/lib/compiler/aro/aro/Builtins.zig
@@ -264,7 +264,6 @@ fn createType(desc: TypeDescription, it: *TypeDescription.TypeIterator, comp: *C
_ = address_space; // TODO: handle address space
const pointer_qt = try comp.type_store.put(comp.gpa, .{ .pointer = .{
.child = builder.finish() catch unreachable,
- .decayed = null,
} });
builder.@"const" = null;
diff --git a/lib/compiler/aro/aro/Builtins/common.zig b/lib/compiler/aro/aro/Builtins/common.zig
@@ -751,6 +751,8 @@ pub const Tag = enum(u16) { _Block_object_assign,
__builtin_usubl_overflow,
__builtin_usubll_overflow,
__builtin_va_arg,
+ __builtin_va_arg_pack,
+ __builtin_va_arg_pack_len,
__builtin_va_copy,
__builtin_va_end,
__builtin_va_start,
@@ -1436,7 +1438,7 @@ pub const longest_name = 41;
/// If found, returns the index of the node within the `dafsa` array.
/// Otherwise, returns `null`.
pub fn findInList(first_child_index: u16, char: u8) ?u16 {
- @setEvalBranchQuota(2744);
+ @setEvalBranchQuota(2748);
var index = first_child_index;
while (true) {
if (dafsa[index].char == char) return index;
@@ -1531,7 +1533,7 @@ const Node = packed struct {
const dafsa = [_]Node{
.{ .char = 0, .end_of_word = false, .end_of_list = true, .number = 0, .child_index = 1 },
- .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1016, .child_index = 19 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1018, .child_index = 19 },
.{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 25, .child_index = 31 },
.{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 36 },
.{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 82, .child_index = 38 },
@@ -1553,7 +1555,7 @@ const dafsa = [_]Node{
.{ .char = 'E', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 102 },
.{ .char = 'I', .end_of_word = false, .end_of_list = false, .number = 29, .child_index = 103 },
.{ .char = 'R', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 104 },
- .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 938, .child_index = 105 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 940, .child_index = 105 },
.{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 123 },
.{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 11, .child_index = 125 },
.{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 127 },
@@ -1637,7 +1639,7 @@ const dafsa = [_]Node{
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 238 },
.{ .char = 'G', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 239 },
.{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 34, .child_index = 240 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 694, .child_index = 245 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 696, .child_index = 245 },
.{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 19, .child_index = 246 },
.{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 248 },
.{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 249 },
@@ -1775,7 +1777,7 @@ const dafsa = [_]Node{
.{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 398 },
.{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 399 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 400 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 401 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 401 },
.{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 17, .child_index = 402 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 403 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 404 },
@@ -1931,7 +1933,7 @@ const dafsa = [_]Node{
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 523 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 524 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 525 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 526 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 526 },
.{ .char = '1', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 527 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 528 },
.{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 529 },
@@ -2056,7 +2058,7 @@ const dafsa = [_]Node{
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 610 },
.{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 611 },
.{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 612 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 613 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 613 },
.{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 614 },
.{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 615 },
.{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 616 },
@@ -2143,7 +2145,7 @@ const dafsa = [_]Node{
.{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 658 },
.{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 659 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 660 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 660 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 661 },
.{ .char = 'i', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 662 },
.{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 663 },
@@ -2190,7 +2192,7 @@ const dafsa = [_]Node{
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 700 },
.{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 701 },
.{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 702 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 703 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 703 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 704 },
.{ .char = 'f', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
.{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 705 },
@@ -2233,7 +2235,7 @@ const dafsa = [_]Node{
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 740 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 741 },
.{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 742 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 754 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 754 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 755 },
.{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 756 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 },
@@ -2284,7 +2286,7 @@ const dafsa = [_]Node{
.{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 799 },
.{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 802 },
.{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 804 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 805 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 805 },
.{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 825 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 826 },
.{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 12, .child_index = 827 },
@@ -2353,7 +2355,7 @@ const dafsa = [_]Node{
.{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 76, .child_index = 940 },
.{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 23, .child_index = 952 },
.{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 957 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 961 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = false, .number = 14, .child_index = 961 },
.{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 99 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 966 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 },
@@ -2491,7 +2493,7 @@ const dafsa = [_]Node{
.{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1140 },
.{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1154 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1157 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1158 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 1158 },
.{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1159 },
.{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1160 },
.{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 174 },
@@ -2688,7 +2690,7 @@ const dafsa = [_]Node{
.{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1387 },
.{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1388 },
.{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1371 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1389 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1389 },
.{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1393 },
.{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 174 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 176 },
@@ -2919,7 +2921,7 @@ const dafsa = [_]Node{
.{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1574 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1575 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1576 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1577 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1577 },
.{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 509 },
.{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 510 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 511 },
@@ -3107,1047 +3109,1054 @@ const dafsa = [_]Node{
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1728 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1729 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1730 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1604 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1731 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1732 },
- .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1733 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1731 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1732 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1733 },
+ .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1734 },
.{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 236 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 857 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1734 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1735 },
.{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 863 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1735 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1736 },
.{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 867 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1736 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1735 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1737 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 13, .child_index = 1739 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 25, .child_index = 1740 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1741 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1742 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1743 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1744 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1745 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1746 },
- .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1747 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1737 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1736 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1738 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 13, .child_index = 1740 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 25, .child_index = 1741 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1742 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1743 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1744 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1745 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1746 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1747 },
+ .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1748 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1748 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1749 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1749 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1750 },
.{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 },
.{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 },
.{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 1750 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1751 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1753 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1754 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 1755 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 1751 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1753 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1754 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1755 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 1756 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 569 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1756 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1757 },
.{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1208 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1757 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1759 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1761 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1758 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1760 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1762 },
.{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 572 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1762 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1763 },
.{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 },
- .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1763 },
+ .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1764 },
.{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 641 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1764 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1765 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1766 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1767 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1768 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1770 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1771 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1772 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1773 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1774 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1771 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1775 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1777 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1777 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1778 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1779 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1780 },
- .{ .char = 'a', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1782 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1783 },
- .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1784 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1785 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1786 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1765 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1766 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1767 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1768 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1769 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1771 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1772 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1773 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1774 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1775 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1772 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1776 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1778 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1778 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1779 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1780 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1781 },
+ .{ .char = 'a', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1783 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1784 },
+ .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1785 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1786 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1787 },
.{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 },
- .{ .char = '3', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1787 },
+ .{ .char = '3', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1788 },
.{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 },
- .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1788 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1789 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1790 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1791 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1792 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1793 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1794 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1795 },
- .{ .char = '2', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1796 },
+ .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1789 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1790 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1791 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1792 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1793 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1794 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1795 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1796 },
+ .{ .char = '2', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1797 },
.{ .char = '6', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1797 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1798 },
.{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 236 },
.{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1798 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1799 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1800 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1801 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1803 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1804 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1805 },
- .{ .char = '2', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1796 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1806 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1807 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1808 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1809 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1810 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1811 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1812 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1813 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1814 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1815 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1816 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1817 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1818 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1819 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1751 },
- .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1820 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1822 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1823 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1799 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1800 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1801 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1802 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1804 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1805 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1806 },
+ .{ .char = '2', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1797 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1807 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1808 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1809 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1810 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1811 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1812 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1813 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1814 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1815 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1816 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1817 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1818 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1819 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1820 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 },
+ .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1821 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1823 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1824 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1825 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1825 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1826 },
.{ .char = 'a', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 },
.{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 },
- .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1826 },
- .{ .char = 'y', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1827 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1827 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1828 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1829 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1830 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1831 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1832 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1833 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1834 },
+ .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1827 },
+ .{ .char = 'y', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1828 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1828 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1829 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1830 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1831 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1832 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1833 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1834 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1835 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1836 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1837 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1836 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1837 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1838 },
.{ .char = 'y', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1278 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1838 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1839 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1840 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1841 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1842 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 9, .child_index = 1843 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1844 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1839 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1840 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1841 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1842 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1843 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 9, .child_index = 1844 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1845 },
.{ .char = 'o', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1674 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1845 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 1847 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1846 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 1848 },
.{ .char = 'f', .end_of_word = true, .end_of_list = false, .number = 3, .child_index = 1489 },
.{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
.{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1458 },
.{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1327 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1848 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1849 },
.{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1849 },
.{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1850 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1851 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 287 },
- .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 8, .child_index = 1851 },
+ .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 8, .child_index = 1852 },
.{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 419 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1854 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1855 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1856 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1857 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1858 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1859 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1860 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1861 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1855 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1856 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1857 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1858 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1859 },
+ .{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1860 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1861 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1862 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1863 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1862 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1863 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1864 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1865 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 13, .child_index = 1866 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 25, .child_index = 1872 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1883 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1884 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1885 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1864 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1865 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1866 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1867 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 13, .child_index = 1868 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 25, .child_index = 1874 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1885 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1886 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1887 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1888 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1889 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1887 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1888 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1889 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1890 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1891 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 657 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1890 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 1891 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1892 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 1893 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 571 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1892 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1893 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1894 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 1895 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1896 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1894 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1895 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1896 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 1897 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1898 },
.{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 448 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 },
.{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 453 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 510 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1897 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1898 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1899 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1900 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1901 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1902 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1774 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1903 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1904 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1774 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1905 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1906 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1903 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1905 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1903 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1775 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1899 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1900 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1901 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1902 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1903 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1904 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1775 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1905 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1906 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1775 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1907 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1835 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1908 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1908 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1905 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1907 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1905 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1776 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1909 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1836 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1910 },
.{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1909 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1911 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1912 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1911 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1913 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1914 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 301 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1915 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1917 },
.{ .char = '2', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1916 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1917 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1918 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1919 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1920 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1921 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1922 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1923 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1918 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1919 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1920 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1921 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1922 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1923 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1924 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1925 },
.{ .char = '8', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1924 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1925 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1926 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1927 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1928 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1929 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1930 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1931 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1932 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1933 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1934 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1926 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1927 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1928 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1929 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1930 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1931 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1932 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1933 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1934 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1935 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1936 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1513 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1935 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1936 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1937 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1937 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1938 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1939 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 698 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1938 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1939 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1940 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1941 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1241 },
- .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1940 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1941 },
+ .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1942 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1943 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 998 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1942 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1943 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1944 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1944 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1945 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1946 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1945 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1947 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1525 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1946 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1947 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1949 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1948 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1949 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1951 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1318 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1950 },
- .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1951 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1952 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1953 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1952 },
+ .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1953 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1954 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1955 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1955 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1956 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1957 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1956 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1957 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1958 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1959 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1960 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1961 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1962 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 9, .child_index = 1963 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1950 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1967 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1968 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1969 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1958 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1959 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1960 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1961 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1962 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1963 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1964 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 9, .child_index = 1965 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1952 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1969 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1970 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1971 },
.{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1280 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1922 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1924 },
.{ .char = 'f', .end_of_word = true, .end_of_list = false, .number = 3, .child_index = 1489 },
.{ .char = 'l', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1970 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1971 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1972 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1973 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1974 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1975 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1976 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1977 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1978 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1972 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1973 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1974 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1975 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1976 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1977 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1978 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1979 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1980 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1981 },
.{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1979 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1980 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1981 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1982 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1983 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1984 },
.{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1579 },
.{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1580 },
.{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 7, .child_index = 1587 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1982 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1985 },
.{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1583 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1588 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1983 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1985 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1986 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1988 },
.{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 791 },
.{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 8, .child_index = 792 },
.{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 794 },
.{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 795 },
.{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 797 },
.{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 798 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1986 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1989 },
.{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1586 },
.{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 804 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1988 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1995 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1996 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1997 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1991 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1998 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1999 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2000 },
.{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1998 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1999 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2000 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2001 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2002 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2003 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2004 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 2005 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2001 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2002 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2003 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2004 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2005 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2006 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2007 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 2008 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 791 },
.{ .char = 'b', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2006 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2007 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2008 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2009 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2010 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2011 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2012 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2011 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2011 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2013 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2014 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2015 },
- .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2016 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2017 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2009 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2010 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2011 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2012 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2013 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2014 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2015 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2014 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2014 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2016 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2017 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2018 },
+ .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2019 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2020 },
.{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1519 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2018 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2019 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2020 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2021 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2022 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2021 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2022 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2023 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2024 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2025 },
.{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 503 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2023 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2024 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2025 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2026 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2026 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2027 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2028 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2029 },
.{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 5, .child_index = 1295 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2027 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2028 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2030 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2031 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2029 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2032 },
.{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 554 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2030 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2031 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2032 },
- .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2033 },
- .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2034 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2035 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2036 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2037 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2038 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2039 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2033 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2034 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2035 },
+ .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2036 },
+ .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2037 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2038 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2039 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2040 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2041 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2042 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 419 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2040 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2041 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2042 },
- .{ .char = 'q', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2043 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2044 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2045 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2046 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2047 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2048 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2049 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2050 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2051 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2052 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2053 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2054 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1745 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2055 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2056 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2057 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2059 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2060 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2063 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2064 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1757 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 2065 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2043 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2044 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2045 },
+ .{ .char = 'q', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2046 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2047 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2048 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2049 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2050 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2051 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2052 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2053 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2054 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2055 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2056 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2057 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1746 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2058 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2059 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2060 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2062 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2063 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2066 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2067 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1758 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 2068 },
.{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 572 },
.{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2068 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2069 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1923 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2071 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2072 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1925 },
.{ .char = 'i', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 352 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2070 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2071 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2072 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2073 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1982 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2073 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2074 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2075 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2076 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1985 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2077 },
.{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1661 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2074 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2075 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 2076 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2077 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2078 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2078 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2079 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 2080 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2081 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2082 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 236 },
.{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 851 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 851 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 854 },
.{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 864 },
.{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 865 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 2079 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1759 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2081 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2082 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2083 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2084 },
- .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2085 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2086 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2087 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2088 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2089 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2090 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2091 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2092 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2093 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2094 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2095 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 2096 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2097 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 2083 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1760 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2085 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2086 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2087 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2088 },
+ .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2089 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2090 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2091 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2092 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2093 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2094 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2095 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2096 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2097 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2098 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2099 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 2100 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2101 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 476 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2098 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2099 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2100 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2101 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2011 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2102 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2102 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2103 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2104 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2105 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2014 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2106 },
.{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2103 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2104 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2105 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2106 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2107 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2108 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2109 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2110 },
- .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2111 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2112 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2107 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2108 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2109 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2110 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2111 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2112 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2113 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2114 },
+ .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2115 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2116 },
.{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2113 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2114 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2115 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2117 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2118 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2119 },
.{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 568 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2116 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2117 },
- .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2118 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2119 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2120 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2120 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2121 },
+ .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2122 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2123 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2124 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2125 },
.{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2122 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2126 },
.{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2123 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2124 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2127 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2128 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 },
- .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2125 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1822 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2126 },
+ .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2129 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1823 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2130 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1423 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2041 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2127 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2128 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2129 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2044 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2131 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2132 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2133 },
.{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 },
.{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1689 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2130 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2131 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2132 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2133 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2135 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2134 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2135 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2136 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2137 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2139 },
.{ .char = 'g', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 },
.{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 695 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2136 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2137 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2138 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2139 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2141 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2142 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2143 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2144 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2140 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2141 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2142 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2143 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2145 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2146 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2147 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2148 },
.{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2145 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2146 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2147 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2148 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1974 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2149 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2150 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2151 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 2152 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2157 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2108 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2161 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2161 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2162 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2149 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2150 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2151 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2152 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1976 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2153 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2154 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2155 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2156 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 2157 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2162 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2112 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2166 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2166 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2167 },
.{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2163 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1759 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2082 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2168 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1760 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2086 },
.{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2164 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2169 },
.{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2165 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2166 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2167 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2168 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2170 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2171 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2172 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2173 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'E', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2169 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2170 },
- .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 10, .child_index = 2171 },
+ .{ .char = 'E', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2174 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2175 },
+ .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 10, .child_index = 2176 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2176 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2177 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2178 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2179 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2180 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2181 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2182 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2183 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2184 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2185 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2157 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2186 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2187 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2181 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2182 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2183 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2184 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2185 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2186 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2187 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2188 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2189 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2190 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2191 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2192 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2193 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2194 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2195 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2196 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2197 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2198 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2199 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2200 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1943 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2201 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2202 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2203 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2204 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2205 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2206 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2207 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2208 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2209 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2210 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2211 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2212 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2213 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2214 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2215 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2216 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2141 },
- .{ .char = 'x', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2217 },
- .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2217 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2157 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2145 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2218 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2219 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2189 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2190 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2162 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2191 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2192 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2193 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2194 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2195 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2196 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2197 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2198 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2199 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2200 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2201 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2202 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2203 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2204 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2205 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1945 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2206 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2207 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2208 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2209 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2210 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2211 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2212 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2213 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2214 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2215 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2216 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2217 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2218 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2219 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2220 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2221 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2145 },
+ .{ .char = 'x', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2222 },
+ .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2222 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2162 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2149 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2223 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2224 },
.{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2220 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2225 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2226 },
.{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1757 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1759 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1758 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1760 },
.{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 572 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1762 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1763 },
.{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 },
.{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 },
- .{ .char = '3', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1787 },
+ .{ .char = '3', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1788 },
.{ .char = '6', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 633 },
.{ .char = '8', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
.{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2161 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2166 },
.{ .char = 'b', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2221 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2222 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2227 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2228 },
.{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 314 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1421 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2223 },
- .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2224 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2225 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2229 },
+ .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2230 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2231 },
.{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 },
.{ .char = '8', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 },
- .{ .char = 'A', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2226 },
- .{ .char = 'P', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2035 },
- .{ .char = 'S', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2227 },
- .{ .char = 'M', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2228 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2229 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2230 },
+ .{ .char = 'A', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2232 },
+ .{ .char = 'P', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2038 },
+ .{ .char = 'S', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2233 },
+ .{ .char = 'M', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2234 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2235 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2236 },
.{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2231 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2232 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2233 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2234 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2235 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2236 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2237 },
- .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2238 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2239 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2237 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2238 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2239 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2240 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2241 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2242 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2243 },
+ .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2244 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2245 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2240 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2246 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2241 },
- .{ .char = 'j', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2242 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2243 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2244 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2245 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2201 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2246 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2247 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2248 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2247 },
+ .{ .char = 'j', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2248 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2249 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2250 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2251 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2206 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2252 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2253 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2254 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 566 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2249 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2250 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2251 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2252 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2253 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2254 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2231 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2255 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2256 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2257 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2258 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2259 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2260 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2261 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2262 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2263 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2264 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2265 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2266 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2267 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2268 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2269 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2255 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1753 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2256 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2257 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2258 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2259 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2260 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2237 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2261 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2262 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2263 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2264 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2265 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2266 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2267 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2268 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2269 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2270 },
+ .{ .char = 'k', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2271 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2272 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2273 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2274 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2275 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2276 },
.{ .char = '1', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 632 },
.{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1430 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2270 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2271 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2277 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2278 },
.{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2272 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2279 },
.{ .char = 'w', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2273 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2274 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2275 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2276 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2277 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2278 },
- .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2279 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2280 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2281 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2282 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2283 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2284 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2285 },
+ .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2286 },
.{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2281 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2282 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2288 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2289 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1546 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2283 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2284 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2296 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2290 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2291 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2303 },
.{ .char = 'm', .end_of_word = true, .end_of_list = true, .number = 5, .child_index = 1295 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2297 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2298 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2299 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2304 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2305 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2306 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2300 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2301 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2303 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2304 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2305 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2306 },
- .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2307 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2308 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2309 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2310 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2197 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2307 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2308 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2310 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2311 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2312 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2313 },
+ .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2314 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2315 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2316 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2317 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2202 },
.{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 561 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2312 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2313 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2314 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2315 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2316 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2317 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2319 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2319 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2320 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2171 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2321 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2322 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2323 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2324 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2326 },
.{ .char = 'b', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1434 },
- .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2320 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2321 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2322 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2323 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2324 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2325 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2326 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2327 },
- .{ .char = 'f', .end_of_word = true, .end_of_list = false, .number = 2, .child_index = 2225 },
+ .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2327 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2328 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2329 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2330 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2331 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2332 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2333 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2334 },
+ .{ .char = 'f', .end_of_word = true, .end_of_list = false, .number = 2, .child_index = 2231 },
.{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2328 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2329 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2330 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2335 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 2336 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2339 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2340 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2342 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2343 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2345 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2346 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2347 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 2349 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2352 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2354 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2355 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2356 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2357 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2358 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2335 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2336 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2337 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2342 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 2343 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2346 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2347 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2349 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2350 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2352 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2353 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2354 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 2356 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2359 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2361 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2362 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2363 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2364 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2365 },
.{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1583 },
.{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1588 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2359 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2366 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 450 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2360 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2361 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2362 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2363 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2364 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2367 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2367 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2368 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2369 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2370 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2371 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2374 },
.{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2368 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2369 },
- .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2370 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2371 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2372 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 8, .child_index = 2373 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2374 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2375 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2376 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2377 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2378 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2379 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2380 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2381 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2382 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2383 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2375 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2376 },
+ .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2377 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2378 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2379 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 8, .child_index = 2380 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2381 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2382 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2383 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2384 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2385 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2386 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2387 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2388 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2389 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2390 },
.{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2384 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2391 },
.{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 335 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2385 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2386 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2387 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2388 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2389 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2390 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2392 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2393 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2394 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2395 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2396 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2397 },
.{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 706 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2391 },
- .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2393 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2394 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2395 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2397 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2398 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2399 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2400 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2401 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2398 },
+ .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2400 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2401 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2402 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2404 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2405 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2406 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2407 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2408 },
.{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 567 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2403 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2404 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2410 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2411 },
.{ .char = 'q', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 276 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2405 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2404 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2406 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2407 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2408 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2409 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2410 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2411 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2412 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2413 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2414 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2415 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2416 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2417 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2418 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2419 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2363 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2420 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2421 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2422 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2412 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2411 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2413 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2414 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2415 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2416 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2417 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2418 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2419 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2420 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2421 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2422 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2423 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2424 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2425 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2426 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2370 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2427 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2428 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2429 },
.{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2423 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2424 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2425 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2426 },
- .{ .char = 'C', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2427 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2428 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2429 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2430 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2431 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2432 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2433 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2434 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2435 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2430 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2431 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2432 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2433 },
+ .{ .char = 'C', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2434 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2435 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2436 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2437 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2438 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2439 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2440 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2441 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2442 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2436 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2443 },
.{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2437 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2438 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2439 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2440 },
- .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2441 },
- .{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2442 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2444 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2445 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2446 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2447 },
+ .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2448 },
+ .{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2449 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 },
.{ .char = 'a', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 },
- .{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2442 },
- .{ .char = 'x', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2444 },
- .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2444 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2446 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2447 },
+ .{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2449 },
+ .{ .char = 'x', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2451 },
+ .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2451 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2453 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2454 },
.{ .char = 'w', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2448 },
- .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2441 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2436 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2449 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2450 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2455 },
+ .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2448 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2443 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2456 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2457 },
.{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2451 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2452 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2453 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2454 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2455 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2456 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2457 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2458 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2459 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2460 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2461 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2462 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2463 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2464 },
- .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 768 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2374 },
- .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 8, .child_index = 2465 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2467 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2468 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2469 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2458 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2459 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2460 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2461 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2462 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2463 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2464 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2465 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2466 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2467 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2468 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2469 },
.{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2470 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2471 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2472 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2473 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2474 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2475 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2476 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2477 },
- .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2478 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2479 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2480 },
- .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1751 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2471 },
+ .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 768 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2381 },
+ .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 8, .child_index = 2472 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2474 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2475 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2476 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2477 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2478 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2479 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2480 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2481 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2482 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2483 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2484 },
+ .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2485 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2486 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2487 },
+ .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 },
.{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2481 },
+ .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2488 },
.{ .char = '2', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2262 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2268 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 561 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2482 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2483 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2484 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2489 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2490 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2491 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 555 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2485 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2486 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2487 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2488 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2489 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2490 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2491 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2492 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2493 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2494 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2495 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2496 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2492 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2493 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2494 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2495 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2496 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2497 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2498 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2499 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2500 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2501 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2502 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2503 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 450 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2025 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2497 },
- .{ .char = '6', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 2498 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2499 },
- .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 2502 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2506 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2507 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2508 },
- .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2509 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2510 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2511 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2512 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2513 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2514 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2515 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2028 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2504 },
+ .{ .char = '6', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 2505 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2506 },
+ .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 2509 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2513 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2514 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2515 },
+ .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2516 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2517 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2518 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2519 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2520 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2521 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2522 },
.{ .char = '2', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2516 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2517 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2523 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2524 },
.{ .char = '0', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2518 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2519 },
- .{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2520 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2521 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2522 },
- .{ .char = 'j', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2523 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2524 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2525 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2526 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2527 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2528 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2529 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2530 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2531 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2532 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2533 },
- .{ .char = '4', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2534 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2535 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2525 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2526 },
+ .{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2527 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2528 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2529 },
+ .{ .char = 'j', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2530 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2531 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2532 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2533 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2534 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2535 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2536 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2537 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2538 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2539 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2540 },
+ .{ .char = '4', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2541 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2542 },
.{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 486 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2536 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2543 },
.{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 },
.{ .char = '6', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 633 },
.{ .char = '8', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 },
- .{ .char = 'P', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2537 },
- .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2538 },
- .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2539 },
- .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2041 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2540 },
+ .{ .char = 'P', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2544 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2545 },
+ .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2546 },
+ .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2044 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2547 },
.{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1974 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2541 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2542 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2543 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1976 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2548 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2549 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2550 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 301 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2544 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2545 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2551 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2552 },
.{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 461 },
.{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2546 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2547 },
- .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2548 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2549 },
- .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2550 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1973 },
- .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2551 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2553 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2554 },
+ .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2555 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2556 },
+ .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2557 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1975 },
+ .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2558 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 181 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2552 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2553 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2554 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2555 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2556 },
- .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2557 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2499 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2558 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2559 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2560 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2561 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2562 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2563 },
+ .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2564 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2506 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2565 },
.{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2559 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2560 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2561 },
- .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2015 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2565 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2566 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2566 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2567 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2568 },
+ .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2018 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2572 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2573 },
.{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 438 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2567 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2568 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2574 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2575 },
.{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 314 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2569 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2570 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2252 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2571 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2572 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1751 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2573 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2576 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2577 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2258 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2578 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2579 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2580 },
.{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2574 },
- .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2575 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2576 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2581 },
+ .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2582 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2583 },
.{ .char = 'q', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2577 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2578 },
- .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2579 },
- .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2580 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2584 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2585 },
+ .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2586 },
+ .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2587 },
.{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 511 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 411 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2581 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2387 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2093 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2582 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2583 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2072 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2584 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1834 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2585 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2586 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2587 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2588 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2590 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2591 },
- .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2592 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2588 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2394 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2097 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2589 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2590 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2075 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2591 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1835 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2592 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2593 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2594 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2595 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2597 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2598 },
+ .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2599 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2151 },
- .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1745 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2593 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2156 },
+ .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1746 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2600 },
.{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 },
- .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2594 },
- .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2595 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2596 },
- .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2597 },
+ .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2601 },
+ .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2602 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2603 },
+ .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2604 },
.{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 756 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2598 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2599 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2600 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2601 },
- .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2602 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2603 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2604 },
- .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2605 },
- .{ .char = 'S', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2606 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2605 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2606 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2607 },
- .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2608 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2609 },
- .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2610 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2608 },
+ .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2609 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2610 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2611 },
+ .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2612 },
+ .{ .char = 'S', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2613 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2614 },
+ .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2615 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2616 },
+ .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2617 },
.{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1185 },
- .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2611 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2612 },
+ .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2618 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2619 },
.{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 639 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2189 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2194 },
.{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 554 },
- .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2613 },
+ .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2620 },
.{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 449 },
- .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2045 },
- .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2614 },
- .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2041 },
+ .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2048 },
+ .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2621 },
+ .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2044 },
};
pub const data = blk: {
- @setEvalBranchQuota(12348);
+ @setEvalBranchQuota(12366);
break :blk [_]Properties{
.{ .param_str = "vv*vC*iC", .header = .blocks, .language = .all_languages, .attributes = .{ .lib_function_without_prefix = true } },
.{ .param_str = "vvC*iC", .header = .blocks, .language = .all_languages, .attributes = .{ .lib_function_without_prefix = true } },
@@ -4892,6 +4901,8 @@ pub const data = blk: {
.{ .param_str = "bULiCULiCULi*", .attributes = .{ .const_evaluable = true } },
.{ .param_str = "bULLiCULLiCULLi*", .attributes = .{ .const_evaluable = true } },
.{ .param_str = "v.", .attributes = .{ .custom_typecheck = true } },
+ .{ .param_str = "v", .attributes = .{ .custom_typecheck = true } },
+ .{ .param_str = "i", .attributes = .{ .custom_typecheck = true } },
.{ .param_str = "vAA", .attributes = .{ .lib_function_with_builtin_prefix = true } },
.{ .param_str = "vA", .attributes = .{ .lib_function_with_builtin_prefix = true } },
.{ .param_str = "vA.", .attributes = .{ .custom_typecheck = true } },
diff --git a/lib/compiler/aro/aro/Builtins/eval.zig b/lib/compiler/aro/aro/Builtins/eval.zig
@@ -1,16 +1,19 @@
const std = @import("std");
+const assert = std.debug.assert;
+
const backend = @import("../../backend.zig");
const Interner = backend.Interner;
+
const Builtins = @import("../Builtins.zig");
const Parser = @import("../Parser.zig");
const Tree = @import("../Tree.zig");
const TypeStore = @import("../TypeStore.zig");
-const Type = TypeStore.Type;
const QualType = TypeStore.QualType;
+const Type = TypeStore.Type;
const Value = @import("../Value.zig");
fn makeNan(comptime T: type, str: []const u8) T {
- const UnsignedSameSize = std.meta.Int(.unsigned, @bitSizeOf(T));
+ const UnsignedSameSize = @Int(.unsigned, @bitSizeOf(T));
const parsed = std.fmt.parseUnsigned(UnsignedSameSize, str[0 .. str.len - 1], 0) catch 0;
const bits: switch (T) {
f32 => u23,
@@ -24,7 +27,6 @@ fn makeNan(comptime T: type, str: []const u8) T {
pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Index) !Value {
if (!expanded.attributes.const_evaluable) return .{};
-
switch (expanded.tag) {
.common => |tag| switch (tag) {
.__builtin_inff,
@@ -47,12 +49,12 @@ pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Ind
return Value.intern(p.comp, .{ .float = f });
},
.__builtin_isinf => blk: {
- if (args.len == 0) break :blk;
+ assert(args.len == 1);
const val = p.tree.value_map.get(args[0]) orelse break :blk;
return Value.fromBool(val.isInf(p.comp));
},
.__builtin_isinf_sign => blk: {
- if (args.len == 0) break :blk;
+ assert(args.len == 1);
const val = p.tree.value_map.get(args[0]) orelse break :blk;
switch (val.isInfSign(p.comp)) {
.unknown => {},
@@ -62,12 +64,12 @@ pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Ind
}
},
.__builtin_isnan => blk: {
- if (args.len == 0) break :blk;
+ assert(args.len == 1);
const val = p.tree.value_map.get(args[0]) orelse break :blk;
return Value.fromBool(val.isNan(p.comp));
},
.__builtin_nan => blk: {
- if (args.len == 0) break :blk;
+ assert(args.len == 1);
const val = p.getDecayedStringLiteral(args[0]) orelse break :blk;
const bytes = p.comp.interner.get(val.ref()).bytes;
@@ -80,6 +82,12 @@ pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Ind
};
return Value.intern(p.comp, .{ .float = f });
},
+ .__builtin_constant_p => {
+ assert(args.len == 1);
+ const arg = args[0];
+ const val = p.tree.value_map.get(arg) orelse return Value.fromBool(p.isAddressOfStringLiteral(arg));
+ return Value.fromBool(!val.isPointer(p.comp));
+ },
else => {},
},
else => {},
diff --git a/lib/compiler/aro/aro/CodeGen.zig b/lib/compiler/aro/aro/CodeGen.zig
@@ -2,7 +2,7 @@ const std = @import("std");
const Allocator = std.mem.Allocator;
const assert = std.debug.assert;
-const backend = @import("backend");
+const backend = @import("../backend.zig");
const Interner = backend.Interner;
const Ir = backend.Ir;
const Builder = Ir.Builder;
@@ -867,6 +867,8 @@ fn genExpr(c: *CodeGen, node_index: Node.Index) Error!Ir.Ref {
.imag_expr,
.real_expr,
.sizeof_expr,
+ .builtin_va_arg_pack,
+ .builtin_va_arg_pack_len,
=> return c.fail("TODO CodeGen.genExpr {s}\n", .{@tagName(node)}),
else => unreachable, // Not an expression.
}
diff --git a/lib/compiler/aro/aro/Compilation.zig b/lib/compiler/aro/aro/Compilation.zig
@@ -71,34 +71,23 @@ pub const Environment = struct {
/// used for __DATE__, __TIME__, and __TIMESTAMP__
provided: u64,
- pub const default: @This() = .{ .provided = 0 };
+ pub const default: SourceEpoch = .{ .provided = 0 };
};
- pub fn loadAll(allocator: std.mem.Allocator, environ_map: *const std.process.Environ.Map) !Environment {
+ /// Load all of the environment variables from an environ map. Does not copy values.
+ pub fn loadAll(environ_map: *const std.process.Environ.Map) Environment {
var env: Environment = .{};
- errdefer env.deinit(allocator);
inline for (@typeInfo(@TypeOf(env)).@"struct".fields) |field| {
std.debug.assert(@field(env, field.name) == null);
var env_var_buf: [field.name.len]u8 = undefined;
const env_var_name = std.ascii.upperString(&env_var_buf, field.name);
- const val: ?[]const u8 = if (environ_map.get(env_var_name)) |v| try allocator.dupe(u8, v) else null;
- @field(env, field.name) = val;
+ @field(env, field.name) = environ_map.get(env_var_name);
}
return env;
}
- /// Use this only if environment slices were allocated with `allocator` (such as via `loadAll`)
- pub fn deinit(self: *Environment, allocator: std.mem.Allocator) void {
- inline for (@typeInfo(@TypeOf(self.*)).@"struct".fields) |field| {
- if (@field(self, field.name)) |slice| {
- allocator.free(slice);
- }
- }
- self.* = undefined;
- }
-
pub fn sourceEpoch(self: *const Environment, io: Io) !SourceEpoch {
const max_timestamp = 253402300799; // Dec 31 9999 23:59:59
@@ -148,7 +137,7 @@ gpa: Allocator,
/// Allocations in this arena live all the way until `Compilation.deinit`.
arena: Allocator,
io: Io,
-cwd: Io.Dir,
+cwd: std.Io.Dir,
diagnostics: *Diagnostics,
sources: std.StringArrayHashMapUnmanaged(Source) = .empty,
@@ -175,37 +164,48 @@ pragma_handlers: std.StringArrayHashMapUnmanaged(*Pragma) = .empty,
/// Used by MS extensions which allow searching for includes relative to the directory of the main source file.
ms_cwd_source_id: ?Source.Id = null,
-pub fn init(gpa: Allocator, arena: Allocator, io: Io, diagnostics: *Diagnostics, cwd: Io.Dir) Compilation {
- return .{
- .gpa = gpa,
- .arena = arena,
- .io = io,
- .diagnostics = diagnostics,
- .cwd = cwd,
- };
-}
-
-/// Initialize Compilation with default environment,
-/// pragma handlers and emulation mode set to target.
-pub fn initDefault(
+pub const InitOptions = struct {
gpa: Allocator,
arena: Allocator,
io: Io,
diagnostics: *Diagnostics,
- cwd: Io.Dir,
- environ_map: *const std.process.Environ.Map,
-) !Compilation {
+
+ /// Used to initiate `Compilation.Environment`, values are not copied.
+ environ_map: ?*const std.process.Environ.Map,
+ /// Defaults to `std.Io.Dir.cwd()`
+ cwd: ?std.Io.Dir = null,
+
+ add_default_pragma_handlers: bool = true,
+
+ pub const testing: InitOptions = .{
+ .gpa = std.testing.allocator,
+ .arena = undefined,
+ .io = std.testing.io,
+ .diagnostics = undefined,
+ .environ_map = null,
+ .add_default_pragma_handlers = false,
+ };
+};
+
+/// Initialize Compilation with default environment,
+/// pragma handlers and emulation mode set to target.
+pub fn init(options: InitOptions) !Compilation {
var comp: Compilation = .{
- .gpa = gpa,
- .arena = arena,
- .io = io,
- .diagnostics = diagnostics,
- .environment = try Environment.loadAll(gpa, environ_map),
- .cwd = cwd,
+ .gpa = options.gpa,
+ .arena = options.arena,
+ .io = options.io,
+ .diagnostics = options.diagnostics,
+ .cwd = options.cwd orelse .cwd(),
};
errdefer comp.deinit();
- try comp.addDefaultPragmaHandlers();
- comp.langopts.setEmulatedCompiler(comp.target.systemCompiler());
+
+ if (options.environ_map) |map| {
+ comp.environment = .loadAll(map);
+ }
+
+ if (options.add_default_pragma_handlers) {
+ try comp.addDefaultPragmaHandlers();
+ }
return comp;
}
@@ -228,7 +228,6 @@ pub fn deinit(comp: *Compilation) void {
comp.builtins.deinit(gpa);
comp.string_interner.deinit(gpa);
comp.interner.deinit(gpa);
- comp.environment.deinit(gpa);
comp.type_store.deinit(gpa);
comp.* = undefined;
}
@@ -275,17 +274,18 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
}
try w.writeAll(
+ \\#define __ARO_EMULATE_NO__ 0
\\#define __ARO_EMULATE_CLANG__ 1
\\#define __ARO_EMULATE_GCC__ 2
\\#define __ARO_EMULATE_MSVC__ 3
\\
);
- const emulated = switch (comp.langopts.emulate) {
+ try w.print("#define __ARO_EMULATE__ {s}\n", .{switch (comp.langopts.emulate) {
+ .no => "__ARO_EMULATE_NO__",
.clang => "__ARO_EMULATE_CLANG__",
.gcc => "__ARO_EMULATE_GCC__",
.msvc => "__ARO_EMULATE_MSVC__",
- };
- try w.print("#define __ARO_EMULATE__ {s}\n", .{emulated});
+ }});
if (comp.langopts.emulate == .msvc) {
try w.writeAll("#define _MSC_VER 1933\n");
@@ -375,6 +375,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
.watchos,
=> {
try define(w, "__APPLE__");
+ try w.writeAll("#define __APPLE_CC__ 6000\n");
const version = target.os.version_range.semver.min;
var version_buf: [8]u8 = undefined;
@@ -647,6 +648,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
try define(w, "__ppc__");
try define(w, "__PPC__");
try define(w, "_ARCH_PPC");
+ try w.print("#define _CALL_ELF {d}\n", .{target.ppcElfVersion()});
},
.powerpc64,
.powerpc64le,
@@ -661,7 +663,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
try define(w, "__PPC64__");
try define(w, "_ARCH_PPC");
try define(w, "_ARCH_PPC64");
- try w.writeAll("#define _CALL_ELF 2\n");
+ try w.print("#define _CALL_ELF {d}\n", .{target.ppcElfVersion()});
},
.sparc64 => {
try defineStd(w, "sparc", is_gnu);
@@ -686,8 +688,19 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
try define(w, "__thumb__");
}
},
- .aarch64, .aarch64_be => {
+ .aarch64, .aarch64_be => |arch| {
try define(w, "__aarch64__");
+ switch (arch) {
+ .aarch64 => {
+ try define(w, "__AARCH64EL__");
+ },
+ .aarch64_be => {
+ try define(w, "__AARCH64EB__");
+ try define(w, "__AARCH_BIG_ENDIAN");
+ try define(w, "__ARM_BIG_ENDIAN");
+ },
+ else => unreachable,
+ }
if (target.os.tag.isDarwin()) {
try define(w, "__AARCH64_SIMD__");
if (ptr_width == 32) {
@@ -839,6 +852,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
}
},
.riscv32, .riscv32be, .riscv64, .riscv64be => {
+ try define(w, "__riscv");
try w.print("#define __riscv_xlen {d}\n", .{ptr_width});
},
else => {},
@@ -910,6 +924,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
\\#define __ATOMIC_CHAR16_T_LOCK_FREE 1
\\#define __ATOMIC_CHAR32_T_LOCK_FREE 1
\\#define __ATOMIC_WCHAR_T_LOCK_FREE 1
+ \\#define __ATOMIC_WINT_T_LOCK_FREE 1
\\#define __ATOMIC_SHORT_LOCK_FREE 1
\\#define __ATOMIC_INT_LOCK_FREE 1
\\#define __ATOMIC_LONG_LOCK_FREE 1
@@ -922,7 +937,15 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
}
// types
- if (comp.getCharSignedness() == .unsigned) try w.writeAll("#define __CHAR_UNSIGNED__ 1\n");
+ if (comp.getCharSignedness() == .unsigned) {
+ try w.writeAll("#define __CHAR_UNSIGNED__ 1\n");
+ }
+ if (comp.type_store.wchar.signedness(comp) == .unsigned) {
+ try w.writeAll("#define __WCHAR_UNSIGNED__ 1\n");
+ }
+ if (comp.type_store.wint.signedness(comp) == .unsigned) {
+ try w.writeAll("#define __WINT_UNSIGNED__ 1\n");
+ }
try w.writeAll("#define __CHAR_BIT__ 8\n");
// int maxs
@@ -933,7 +956,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
try comp.generateIntMaxAndWidth(w, "LONG", .long);
try comp.generateIntMaxAndWidth(w, "LONG_LONG", .long_long);
try comp.generateIntMaxAndWidth(w, "WCHAR", comp.type_store.wchar);
- // try comp.generateIntMax(w, "WINT", comp.type_store.wchar);
+ try comp.generateIntMaxAndWidth(w, "WINT", comp.type_store.wint);
try comp.generateIntMaxAndWidth(w, "INTMAX", comp.type_store.intmax);
try comp.generateIntMaxAndWidth(w, "SIZE", comp.type_store.size);
try comp.generateIntMaxAndWidth(w, "UINTMAX", try comp.type_store.intmax.makeIntUnsigned(comp));
@@ -957,7 +980,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
try comp.generateSizeofType(w, "__SIZEOF_PTRDIFF_T__", comp.type_store.ptrdiff);
try comp.generateSizeofType(w, "__SIZEOF_SIZE_T__", comp.type_store.size);
try comp.generateSizeofType(w, "__SIZEOF_WCHAR_T__", comp.type_store.wchar);
- // try comp.generateSizeofType(w, "__SIZEOF_WINT_T__", .void_pointer);
+ try comp.generateSizeofType(w, "__SIZEOF_WINT_T__", comp.type_store.wint);
if (target.hasInt128()) {
try comp.generateSizeofType(w, "__SIZEOF_INT128__", .int128);
@@ -968,14 +991,15 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void {
try comp.generateTypeMacro(w, "__UINTPTR_TYPE__", try comp.type_store.intptr.makeIntUnsigned(comp));
try comp.generateTypeMacro(w, "__INTMAX_TYPE__", comp.type_store.intmax);
- try comp.generateSuffixMacro("__INTMAX", w, comp.type_store.intptr);
+ try comp.generateIntLiteralMacros("__INTMAX", w, comp.type_store.intptr);
try comp.generateTypeMacro(w, "__UINTMAX_TYPE__", try comp.type_store.intmax.makeIntUnsigned(comp));
- try comp.generateSuffixMacro("__UINTMAX", w, try comp.type_store.intptr.makeIntUnsigned(comp));
+ try comp.generateIntLiteralMacros("__UINTMAX", w, try comp.type_store.intptr.makeIntUnsigned(comp));
try comp.generateTypeMacro(w, "__PTRDIFF_TYPE__", comp.type_store.ptrdiff);
try comp.generateTypeMacro(w, "__SIZE_TYPE__", comp.type_store.size);
try comp.generateTypeMacro(w, "__WCHAR_TYPE__", comp.type_store.wchar);
+ try comp.generateTypeMacro(w, "__WINT_TYPE__", comp.type_store.wint);
try comp.generateTypeMacro(w, "__CHAR16_TYPE__", comp.type_store.uint_least16_t);
try comp.generateTypeMacro(w, "__CHAR32_TYPE__", comp.type_store.uint_least32_t);
@@ -1167,8 +1191,10 @@ fn generateTypeMacro(comp: *const Compilation, w: *Io.Writer, name: []const u8,
}
pub fn float80Type(comp: *const Compilation) ?QualType {
- if (comp.langopts.emulate != .gcc) return null;
- return comp.target.float80Type();
+ return switch (comp.langopts.emulate) {
+ .no, .gcc => comp.target.float80Type(),
+ .msvc, .clang => null,
+ };
}
/// Smallest integer type with at least N bits
@@ -1292,8 +1318,14 @@ fn generateFmt(comp: *const Compilation, prefix: []const u8, w: *Io.Writer, qt:
}
}
-fn generateSuffixMacro(comp: *const Compilation, prefix: []const u8, w: *Io.Writer, qt: QualType) !void {
- return w.print("#define {s}_C_SUFFIX__ {s}\n", .{ prefix, qt.intValueSuffix(comp) });
+fn generateIntLiteralMacros(comp: *const Compilation, prefix: []const u8, w: *Io.Writer, qt: QualType) !void {
+ const suffix = qt.intValueSuffix(comp);
+ try w.print("#define {s}_C_SUFFIX__ {s}\n", .{ prefix, suffix });
+ if (suffix.len == 0) {
+ try w.print("#define {s}_C(c) c\n", .{prefix});
+ } else {
+ try w.print("#define {s}_C(c) c##{s}\n", .{ prefix, suffix });
+ }
}
/// Generate the following for a type:
@@ -1322,7 +1354,7 @@ fn generateExactWidthType(comp: *Compilation, w: *Io.Writer, original_qt: QualTy
const prefix = full[0 .. full.len - suffix.len]; // remove "_TYPE__"
try comp.generateFmt(prefix, w, qt);
- try comp.generateSuffixMacro(prefix, w, qt);
+ try comp.generateIntLiteralMacros(prefix, w, qt);
}
pub fn hasFloat128(comp: *const Compilation) bool {
@@ -1414,7 +1446,7 @@ pub fn maxArrayBytes(comp: *const Compilation) u64 {
pub fn fixedEnumTagType(comp: *const Compilation) ?QualType {
switch (comp.langopts.emulate) {
.msvc => return .int,
- .clang => if (comp.target.os.tag == .windows and comp.target.abi == .msvc) return .int,
+ .no, .clang => if (comp.target.os.tag == .windows and comp.target.abi == .msvc) return .int,
.gcc => {},
}
return null;
@@ -1424,6 +1456,10 @@ pub fn getCharSignedness(comp: *const Compilation) std.builtin.Signedness {
return comp.langopts.char_signedness_override orelse comp.target.cCharSignedness();
}
+pub fn hasClangStyleBoundsSafety(comp: *const Compilation) bool {
+ return comp.langopts.bounds_safety == .clang;
+}
+
pub fn getSource(comp: *const Compilation, id: Source.Id) Source {
if (id.alias) {
return comp.source_aliases.items[@intFromEnum(id.index)];
@@ -1643,14 +1679,12 @@ fn addSourceFromPathExtra(comp: *Compilation, path: []const u8, kind: Source.Kin
return error.FileNotFound;
}
- const io = comp.io;
-
- const file = try comp.cwd.openFile(io, path, .{});
- defer file.close(io);
+ const file = try comp.cwd.openFile(comp.io, path, .{});
+ defer file.close(comp.io);
return comp.addSourceFromFile(file, path, kind);
}
-pub fn addSourceFromFile(comp: *Compilation, file: Io.File, path: []const u8, kind: Source.Kind) !Source {
+pub fn addSourceFromFile(comp: *Compilation, file: std.Io.File, path: []const u8, kind: Source.Kind) !Source {
const contents = try comp.getFileContents(file, .unlimited);
errdefer comp.gpa.free(contents);
return comp.addSourceFromOwnedBuffer(path, contents, kind);
@@ -1718,8 +1752,7 @@ pub fn initSearchPath(comp: *Compilation, includes: []const Include, verbose: bo
}
}
fn addToSearchPath(comp: *Compilation, include: Include, verbose: bool) !void {
- const io = comp.io;
- comp.cwd.access(io, include.path, .{}) catch {
+ comp.cwd.access(comp.io, include.path, .{}) catch {
if (verbose) {
std.debug.print("ignoring nonexistent directory \"{s}\"\n", .{include.path});
return;
@@ -1979,14 +2012,12 @@ fn getPathContents(comp: *Compilation, path: []const u8, limit: Io.Limit) ![]u8
return error.FileNotFound;
}
- const io = comp.io;
-
- const file = try comp.cwd.openFile(io, path, .{});
- defer file.close(io);
+ const file = try comp.cwd.openFile(comp.io, path, .{});
+ defer file.close(comp.io);
return comp.getFileContents(file, limit);
}
-fn getFileContents(comp: *Compilation, file: Io.File, limit: Io.Limit) ![]u8 {
+fn getFileContents(comp: *Compilation, file: std.Io.File, limit: Io.Limit) ![]u8 {
var file_buf: [4096]u8 = undefined;
var file_reader = file.reader(comp.io, &file_buf);
@@ -2168,9 +2199,8 @@ pub fn locSlice(comp: *const Compilation, loc: Source.Location) []const u8 {
}
pub fn getSourceMTimeUncached(comp: *const Compilation, source_id: Source.Id) ?u64 {
- const io = comp.io;
const source = comp.getSource(source_id);
- if (comp.cwd.statFile(io, source.path, .{})) |stat| {
+ if (comp.cwd.statFile(comp.io, source.path, .{})) |stat| {
return std.math.cast(u64, stat.mtime.toSeconds());
} else |_| {
return null;
@@ -2257,10 +2287,9 @@ pub const Diagnostic = struct {
test "addSourceFromBuffer" {
const Test = struct {
fn addSourceFromBuffer(str: []const u8, expected: []const u8, warning_count: u32, splices: []const u32) !void {
- var arena: std.heap.ArenaAllocator = .init(std.testing.allocator);
- defer arena.deinit();
var diagnostics: Diagnostics = .{ .output = .ignore };
- var comp = Compilation.init(std.testing.allocator, arena.allocator(), std.testing.io, &diagnostics, Io.Dir.cwd());
+ var comp = try Compilation.init(.testing);
+ comp.diagnostics = &diagnostics;
defer comp.deinit();
const source = try comp.addSourceFromBuffer("path", str);
@@ -2271,10 +2300,8 @@ test "addSourceFromBuffer" {
}
fn withAllocationFailures(allocator: std.mem.Allocator) !void {
- var arena: std.heap.ArenaAllocator = .init(allocator);
- defer arena.deinit();
- var diagnostics: Diagnostics = .{ .output = .ignore };
- var comp = Compilation.init(allocator, arena.allocator(), std.testing.io, &diagnostics, Io.Dir.cwd());
+ var comp = try Compilation.init(.testing);
+ comp.gpa = allocator;
defer comp.deinit();
_ = try comp.addSourceFromBuffer("path", "spliced\\\nbuffer\n");
@@ -2320,7 +2347,8 @@ test "addSourceFromBuffer - exhaustive check for carriage return elimination" {
var buf: [alphabet.len]u8 = @splat(alphabet[0]);
var diagnostics: Diagnostics = .{ .output = .ignore };
- var comp = Compilation.init(std.testing.allocator, arena.allocator(), std.testing.io, &diagnostics, Io.Dir.cwd());
+ var comp = try Compilation.init(.testing);
+ comp.diagnostics = &diagnostics;
defer comp.deinit();
var source_count: u32 = 0;
@@ -2346,9 +2374,8 @@ test "addSourceFromBuffer - exhaustive check for carriage return elimination" {
test "ignore BOM at beginning of file" {
const BOM = "\xEF\xBB\xBF";
const Test = struct {
- fn run(arena: Allocator, buf: []const u8) !void {
- var diagnostics: Diagnostics = .{ .output = .ignore };
- var comp = Compilation.init(std.testing.allocator, arena, std.testing.io, &diagnostics, Io.Dir.cwd());
+ fn run(buf: []const u8) !void {
+ var comp = try Compilation.init(.testing);
defer comp.deinit();
const source = try comp.addSourceFromBuffer("file.c", buf);
@@ -2357,19 +2384,15 @@ test "ignore BOM at beginning of file" {
}
};
- var arena_state: std.heap.ArenaAllocator = .init(std.testing.allocator);
- defer arena_state.deinit();
- const arena = arena_state.allocator();
-
- try Test.run(arena, BOM);
- try Test.run(arena, BOM ++ "x");
- try Test.run(arena, "x" ++ BOM);
- try Test.run(arena, BOM ++ " ");
- try Test.run(arena, BOM ++ "\n");
- try Test.run(arena, BOM ++ "\\");
-
- try Test.run(arena, BOM[0..1] ++ "x");
- try Test.run(arena, BOM[0..2] ++ "x");
- try Test.run(arena, BOM[1..] ++ "x");
- try Test.run(arena, BOM[2..] ++ "x");
+ try Test.run(BOM);
+ try Test.run(BOM ++ "x");
+ try Test.run("x" ++ BOM);
+ try Test.run(BOM ++ " ");
+ try Test.run(BOM ++ "\n");
+ try Test.run(BOM ++ "\\");
+
+ try Test.run(BOM[0..1] ++ "x");
+ try Test.run(BOM[0..2] ++ "x");
+ try Test.run(BOM[1..] ++ "x");
+ try Test.run(BOM[2..] ++ "x");
}
diff --git a/lib/compiler/aro/aro/Diagnostics.zig b/lib/compiler/aro/aro/Diagnostics.zig
@@ -24,21 +24,21 @@ pub const Message = struct {
@"fatal error",
};
- pub fn write(msg: Message, t: std.Io.Terminal, details: bool) std.Io.Terminal.SetColorError!void {
- const w = t.writer;
- try t.setColor(.bold);
+ pub fn write(msg: Message, term: std.Io.Terminal, details: bool) std.Io.Terminal.SetColorError!void {
+ const w = term.writer;
+ try term.setColor(.bold);
if (msg.location) |loc| {
try w.print("{s}:{d}:{d}: ", .{ loc.path, loc.line_no, loc.col });
}
switch (msg.effective_kind) {
- .@"fatal error", .@"error" => try t.setColor(.bright_red),
- .note => try t.setColor(.bright_cyan),
- .warning => try t.setColor(.bright_magenta),
+ .@"fatal error", .@"error" => try term.setColor(.bright_red),
+ .note => try term.setColor(.bright_cyan),
+ .warning => try term.setColor(.bright_magenta),
.off => unreachable,
}
try w.print("{s}: ", .{@tagName(msg.effective_kind)});
- try t.setColor(.white);
+ try term.setColor(.white);
try w.writeAll(msg.text);
if (msg.opt) |some| {
if (msg.effective_kind == .@"error" and msg.kind != .@"error") {
@@ -56,17 +56,17 @@ pub const Message = struct {
if (!details or msg.location == null) {
try w.writeAll("\n");
- try t.setColor(.reset);
+ try term.setColor(.reset);
} else {
const loc = msg.location.?;
const trailer = if (loc.end_with_splice) "\\ " else "";
- try t.setColor(.reset);
+ try term.setColor(.reset);
try w.print("\n{s}{s}\n", .{ loc.line, trailer });
try w.splatByteAll(' ', loc.width);
- try t.setColor(.bold);
- try t.setColor(.bright_green);
+ try term.setColor(.bold);
+ try term.setColor(.bright_green);
try w.writeAll("^\n");
- try t.setColor(.reset);
+ try term.setColor(.reset);
}
try w.flush();
}
@@ -199,6 +199,10 @@ pub const Option = enum {
@"pragma-once-outside-header",
@"underlying-atomic-qualifier-ignored",
@"underlying-cv-qualifier-ignored",
+ @"bounds-attributes-redundant",
+ @"file-name-extension",
+ @"base-file-extension",
+ @"include-level-extension",
/// GNU extensions
pub const gnu = [_]Option{
@@ -541,11 +545,11 @@ fn addMessage(d: *Diagnostics, msg: Message) Compilation.Error!void {
switch (d.output) {
.ignore => {},
- .to_writer => |t| {
- var new_mode = t.mode;
- if (d.color == false) new_mode = .no_color;
- if (d.color == true and new_mode == .no_color) new_mode = .escape_codes;
- msg.write(.{ .writer = t.writer, .mode = new_mode }, d.details) catch {
+ .to_writer => |terminal| {
+ var mode = terminal.mode;
+ if (d.color == false) mode = .no_color;
+ if (d.color == true and mode == .no_color) mode = .escape_codes;
+ msg.write(.{ .mode = mode, .writer = terminal.writer }, d.details) catch {
return error.FatalError;
};
},
diff --git a/lib/compiler/aro/aro/Driver.zig b/lib/compiler/aro/aro/Driver.zig
@@ -1,5 +1,4 @@
const std = @import("std");
-const Io = std.Io;
const mem = std.mem;
const Allocator = mem.Allocator;
const process = std.process;
@@ -9,6 +8,7 @@ const Assembly = backend.Assembly;
const Ir = backend.Ir;
const Object = backend.Object;
+const Attribute = @import("Attribute.zig");
const Compilation = @import("Compilation.zig");
const Diagnostics = @import("Diagnostics.zig");
const DepFile = @import("DepFile.zig");
@@ -52,6 +52,7 @@ implicit_includes: std.ArrayList(Source) = .empty,
/// List of includes that will be used to construct the compilation's search path
includes: std.ArrayList(Compilation.Include) = .empty,
link_objects: std.ArrayList([]const u8) = .empty,
+macro_prefix_map: std.ArrayList(struct { []const u8, []const u8 }) = .empty,
output_name: ?[]const u8 = null,
sysroot: ?[]const u8 = null,
resource_dir: ?[]const u8 = null,
@@ -134,9 +135,8 @@ strip: bool = false,
unwindlib: ?[]const u8 = null,
pub fn deinit(d: *Driver) void {
- const io = d.comp.io;
for (d.link_objects.items[d.link_objects.items.len - d.temp_file_count ..]) |obj| {
- Io.Dir.deleteFileAbsolute(io, obj) catch {};
+ std.Io.Dir.deleteFileAbsolute(d.comp.io, obj) catch {};
d.comp.gpa.free(obj);
}
d.inputs.deinit(d.comp.gpa);
@@ -144,6 +144,7 @@ pub fn deinit(d: *Driver) void {
d.implicit_includes.deinit(d.comp.gpa);
d.includes.deinit(d.comp.gpa);
d.link_objects.deinit(d.comp.gpa);
+ d.macro_prefix_map.deinit(d.comp.gpa);
d.* = undefined;
}
@@ -177,6 +178,10 @@ pub const usage =
\\ -darwin-target-variant-triple
\\ Specify the darwin target variant triple
\\ -fapple-kext Use Apple's kernel extensions ABI
+ \\ -fexperimental-bounds-safety
+ \\ Enable experimental clang-style bounds safety attributes (INCOMPLETE)
+ \\ -fno-experimental-bounds-safety
+ \\ Disable experimental clang-style bounds safety attributes
\\ -fchar8_t Enable char8_t (enabled by default in C23 and later)
\\ -fno-char8_t Disable char8_t (disabled by default for pre-C23)
\\ -fcolor-diagnostics Enable colors in diagnostics
@@ -218,6 +223,8 @@ pub const usage =
\\ -fuse-line-directives Use `#line <num>` linemarkers in preprocessed output
\\ -fno-use-line-directives
\\ Use `# <num>` linemarkers in preprocessed output
+ \\ -fvisibility=[default|hidden|internal|protected]
+ \\ Set the default ELF image symbol visibility to the specified option—all symbols are marked with this unless overridden within the code
\\ -iquote <dir> Add directory to QUOTE include search path
\\ -I <dir> Add directory to include search path
\\ -idirafter <dir> Add directory to AFTER include search path
@@ -375,6 +382,17 @@ pub fn parseArgs(
d.use_line_directives = false;
} else if (mem.eql(u8, arg, "-fapple-kext")) {
d.apple_kext = true;
+ } else if (option(arg, "-fvisibility=")) |visibility| {
+ d.comp.langopts.default_symbol_visibility = Attribute.visibilityFromString(visibility) orelse
+ return d.fatal("unsupported value '{s}'' in '{s}'", .{ visibility, arg });
+ } else if (option(arg, "-frandom-seed=")) |_| {
+ // Ignore
+ } else if (option(arg, "-fmacro-prefix-map=")) |kv| {
+ const pair = mem.cutScalar(u8, kv, '=') orelse {
+ try d.err("invalid argument '{s}' to '-fmacro-prefix-map=", .{kv});
+ continue;
+ };
+ try d.macro_prefix_map.append(gpa, pair);
} else if (option(arg, "-mcmodel=")) |cmodel| {
d.comp.cmodel = std.meta.stringToEnum(std.builtin.CodeModel, cmodel) orelse
return d.fatal("unsupported machine code model: '{s}'", .{arg});
@@ -415,6 +433,10 @@ pub fn parseArgs(
d.dependencies.file = path;
} else if (mem.eql(u8, arg, "-MV")) {
d.dependencies.format = .nmake;
+ } else if (mem.eql(u8, arg, "-fexperimental-bounds-safety")) {
+ d.comp.langopts.bounds_safety = .clang;
+ } else if (mem.eql(u8, arg, "-fno-experimental-bounds-safety")) {
+ d.comp.langopts.bounds_safety = .none;
} else if (mem.eql(u8, arg, "-fchar8_t")) {
d.comp.langopts.has_char8_t_override = true;
} else if (mem.eql(u8, arg, "-fno-char8_t")) {
@@ -635,6 +657,42 @@ pub fn parseArgs(
d.output_name = file;
} else if (option(arg, "--sysroot=")) |sysroot| {
d.sysroot = sysroot;
+ } else if (mem.eql(u8, arg, "--sysroot")) {
+ i += 1;
+ if (i >= args.len) {
+ try d.err("expected argument after --sysroot", .{});
+ continue;
+ }
+ d.sysroot = args[i];
+ } else if (mem.startsWith(u8, arg, "-isysroot")) {
+ var path = arg["-isysroot".len..];
+ if (path.len == 0) {
+ i += 1;
+ if (i >= args.len) {
+ try d.err("expected argument after -isysroot", .{});
+ continue;
+ }
+ path = args[i];
+ }
+ d.sysroot = path;
+ } else if (mem.eql(u8, arg, "-rpath")) {
+ i += 1;
+ if (i >= args.len) {
+ try d.err("expected argument after -rpath", .{});
+ continue;
+ }
+ // ignore for now
+ } else if (mem.startsWith(u8, arg, "-L")) {
+ var path = arg["-L".len..];
+ if (path.len == 0) {
+ i += 1;
+ if (i >= args.len) {
+ try d.err("expected argument after -L", .{});
+ continue;
+ }
+ path = args[i];
+ }
+ // ignore for now
} else if (mem.eql(u8, arg, "-Wp,-v")) {
// TODO this is not how this argument should work
d.verbose_search_path = true;
@@ -706,6 +764,10 @@ pub fn parseArgs(
d.comp.langopts.preserve_comments = true;
d.comp.langopts.preserve_comments_in_macros = true;
comment_arg = arg;
+ } else if (option(arg, "-fuse-ld=")) |linker_name| {
+ d.use_linker = linker_name;
+ } else if (mem.eql(u8, arg, "-fuse-ld=")) {
+ d.use_linker = null;
} else if (option(arg, "--ld-path=")) |linker_path| {
d.linker_path = linker_path;
} else if (mem.eql(u8, arg, "-r")) {
@@ -810,6 +872,7 @@ pub fn parseArgs(
.clang => try d.diagnostics.set("clang", .off),
.gcc => try d.diagnostics.set("gnu", .off),
.msvc => try d.diagnostics.set("microsoft", .off),
+ .no => {},
}
}
if (d.comp.langopts.preserve_comments and !d.only_preprocess) {
@@ -1063,20 +1126,22 @@ pub fn printDiagnosticsStats(d: *Driver) void {
}
}
-pub fn detectConfig(d: *Driver, file: Io.File) std.Io.tty.Config {
+pub fn detectMode(d: *Driver, file: std.Io.File) std.Io.Cancelable!std.Io.Terminal.Mode {
if (d.diagnostics.color == false) return .no_color;
const force_color = d.diagnostics.color == true;
- if (file.supportsAnsiEscapeCodes()) return .escape_codes;
- if (@import("builtin").os.tag == .windows and file.isTty()) {
- var info: std.os.windows.CONSOLE_SCREEN_BUFFER_INFO = undefined;
- if (std.os.windows.kernel32.GetConsoleScreenBufferInfo(file.handle, &info) == std.os.windows.FALSE) {
- return if (force_color) .escape_codes else .no_color;
+ const io = d.comp.io;
+ if (try file.supportsAnsiEscapeCodes(io)) return .escape_codes;
+ if (@import("builtin").os.tag == .windows and try file.isTty(io)) {
+ var get_console_info = std.os.windows.CONSOLE.USER_IO.GET_SCREEN_BUFFER_INFO;
+ switch (try get_console_info.operate(io, file)) {
+ .SUCCESS => return .{ .windows_api = .{
+ .io = io,
+ .file = file,
+ .reset_attributes = get_console_info.Data.wAttributes,
+ } },
+ else => {},
}
- return .{ .windows_api = .{
- .handle = file.handle,
- .reset_attributes = info.wAttributes,
- } };
}
return if (force_color) .escape_codes else .no_color;
@@ -1105,13 +1170,13 @@ pub fn errorDescription(e: anyerror) []const u8 {
/// The entry point of the Aro compiler.
/// **MAY call `exit` if `fast_exit` is set.**
-pub fn main(d: *Driver, tc: *Toolchain, args: []const []const u8, comptime fast_exit: bool, asm_gen_fn: ?AsmCodeGenFn) Compilation.Error!void {
+pub fn main(d: *Driver, tc: *Toolchain, args: []const []const u8, comptime fast_exit: bool, asm_gen_fn: ?AsmCodeGenFn) (Compilation.Error || std.Io.Cancelable)!void {
const user_macros = macros: {
var macro_buf: std.ArrayList(u8) = .empty;
defer macro_buf.deinit(d.comp.gpa);
var stdout_buf: [256]u8 = undefined;
- var stdout = Io.File.stdout().writer(&stdout_buf);
+ var stdout = std.Io.File.stdout().writer(d.comp.io, &stdout_buf);
if (parseArgs(d, &stdout.interface, ¯o_buf, args) catch |er| switch (er) {
error.WriteFailed => return d.fatal("failed to write to stdout: {s}", .{errorDescription(er)}),
error.OutOfMemory => return error.OutOfMemory,
@@ -1217,14 +1282,13 @@ pub fn getDepFileName(d: *Driver, source: Source, buf: *[std.fs.max_name_bytes]u
}
fn getRandomFilename(d: *Driver, buf: *[std.fs.max_name_bytes]u8, extension: []const u8) ![]const u8 {
- const io = d.comp.io;
const random_bytes_count = 12;
- const sub_path_len = comptime std.base64.url_safe.Encoder.calcSize(random_bytes_count);
+ const sub_path_len = comptime std.fs.base64_encoder.calcSize(random_bytes_count);
var random_bytes: [random_bytes_count]u8 = undefined;
- io.random(&random_bytes);
+ d.comp.io.random(&random_bytes);
var random_name: [sub_path_len]u8 = undefined;
- _ = std.base64.url_safe.Encoder.encode(&random_name, &random_bytes);
+ _ = std.fs.base64_encoder.encode(&random_name, &random_bytes);
const fmt_template = "/tmp/{s}{s}";
const fmt_args = .{
@@ -1251,12 +1315,11 @@ fn getOutFileName(d: *Driver, source: Source, buf: *[std.fs.max_name_bytes]u8) !
}
fn invokeAssembler(d: *Driver, tc: *Toolchain, input_path: []const u8, output_path: []const u8) !void {
- const io = d.comp.io;
var assembler_path_buf: [std.fs.max_path_bytes]u8 = undefined;
const assembler_path = try tc.getAssemblerPath(&assembler_path_buf);
const argv = [_][]const u8{ assembler_path, input_path, "-o", output_path };
- var child = std.process.spawn(io, .{
+ var child = std.process.spawn(d.comp.io, .{
.argv = &argv,
// TODO handle better
.stdin = .inherit,
@@ -1265,8 +1328,8 @@ fn invokeAssembler(d: *Driver, tc: *Toolchain, input_path: []const u8, output_pa
}) catch |er| {
return d.fatal("unable to spawn linker: {s}", .{errorDescription(er)});
};
- const term = child.wait(io) catch |er| {
- return d.fatal("unable to wait linker: {s}", .{errorDescription(er)});
+ const term = child.wait(d.comp.io) catch |er| {
+ return d.fatal("error waiting for linker: {s}", .{errorDescription(er)});
};
switch (term) {
.exited => |code| if (code != 0) {
@@ -1289,13 +1352,16 @@ fn processSource(
comptime fast_exit: bool,
asm_gen_fn: ?AsmCodeGenFn,
) !void {
- const gpa = d.comp.gpa;
- d.comp.generated_buf.items.len = 0;
+ const comp = d.comp;
+ const io = comp.io;
+ const gpa = comp.gpa;
+ comp.generated_buf.items.len = 0;
const prev_total = d.diagnostics.errors;
- const io = d.comp.io;
-
- var pp = try Preprocessor.initDefault(d.comp);
+ var pp = try Preprocessor.init(comp, .{
+ .base_file = source.id,
+ .path_replacements = d.macro_prefix_map.items,
+ });
defer pp.deinit();
var name_buf: [std.fs.max_name_bytes]u8 = undefined;
@@ -1304,8 +1370,8 @@ fn processSource(
if (opt_dep_file) |*dep_file| pp.dep_file = dep_file;
- if (d.comp.langopts.ms_extensions) {
- d.comp.ms_cwd_source_id = source.id;
+ if (comp.langopts.ms_extensions) {
+ comp.ms_cwd_source_id = source.id;
}
const dump_mode = d.debug_dump_letters.getPreprocessorDumpMode();
if (d.verbose_pp) pp.verbose = true;
@@ -1333,10 +1399,10 @@ fn processSource(
const dep_file_name = try d.getDepFileName(source, writer_buf[0..std.fs.max_name_bytes]);
const file = if (dep_file_name) |path|
- d.comp.cwd.createFile(io, path, .{}) catch |er|
+ comp.cwd.createFile(io, path, .{}) catch |er|
return d.fatal("unable to create dependency file '{s}': {s}", .{ path, errorDescription(er) })
else
- Io.File.stdout();
+ std.Io.File.stdout();
defer if (dep_file_name != null) file.close(io);
var file_writer = file.writer(io, &writer_buf);
@@ -1358,10 +1424,10 @@ fn processSource(
}
const file = if (d.output_name) |some|
- d.comp.cwd.createFile(io, some, .{}) catch |er|
+ comp.cwd.createFile(io, some, .{}) catch |er|
return d.fatal("unable to create output file '{s}': {s}", .{ some, errorDescription(er) })
else
- Io.File.stdout();
+ std.Io.File.stdout();
defer if (d.output_name != null) file.close(io);
var file_writer = file.writer(io, &writer_buf);
@@ -1376,8 +1442,11 @@ fn processSource(
defer tree.deinit();
if (d.verbose_ast) {
- var stdout = Io.File.stdout().writer(&writer_buf);
- tree.dump(d.detectConfig(stdout.file), &stdout.interface) catch {};
+ var stdout = std.Io.File.stdout().writer(io, &writer_buf);
+ tree.dump(.{
+ .mode = try d.detectMode(stdout.file),
+ .writer = &stdout.interface,
+ }) catch {};
}
d.printDiagnosticsStats();
@@ -1392,10 +1461,10 @@ fn processSource(
return;
}
- if (d.comp.target.ofmt != .elf or d.comp.target.cpu.arch != .x86_64) {
+ if (comp.target.ofmt != .elf or comp.target.cpu.arch != .x86_64) {
return d.fatal(
"unsupported target {s}-{s}-{s}, currently only x86-64 elf is supported",
- .{ @tagName(d.comp.target.cpu.arch), @tagName(d.comp.target.os.tag), @tagName(d.comp.target.abi) },
+ .{ @tagName(comp.target.cpu.arch), @tagName(comp.target.os.tag), @tagName(comp.target.abi) },
);
}
@@ -1407,15 +1476,15 @@ fn processSource(
.{},
);
- const assembly = try asm_fn(d.comp.target.toZigTarget(), &tree);
+ const assembly = try asm_fn(comp.target.toZigTarget(), &tree);
defer assembly.deinit(gpa);
if (d.only_preprocess_and_compile) {
- const out_file = d.comp.cwd.createFile(io, out_file_name, .{}) catch |er|
+ const out_file = comp.cwd.createFile(io, out_file_name, .{}) catch |er|
return d.fatal("unable to create output file '{s}': {s}", .{ out_file_name, errorDescription(er) });
defer out_file.close(io);
- assembly.writeToFile(out_file) catch |er|
+ assembly.writeToFile(io, out_file) catch |er|
return d.fatal("unable to write to output file '{s}': {s}", .{ out_file_name, errorDescription(er) });
if (fast_exit) std.process.exit(0); // Not linking, no need for cleanup.
return;
@@ -1425,10 +1494,10 @@ fn processSource(
// then assemble to out_file_name
var assembly_name_buf: [std.fs.max_name_bytes]u8 = undefined;
const assembly_out_file_name = try d.getRandomFilename(&assembly_name_buf, ".s");
- const out_file = d.comp.cwd.createFile(io, assembly_out_file_name, .{}) catch |er|
+ const out_file = comp.cwd.createFile(io, assembly_out_file_name, .{}) catch |er|
return d.fatal("unable to create output file '{s}': {s}", .{ assembly_out_file_name, errorDescription(er) });
defer out_file.close(io);
- assembly.writeToFile(out_file) catch |er|
+ assembly.writeToFile(io, out_file) catch |er|
return d.fatal("unable to write to output file '{s}': {s}", .{ assembly_out_file_name, errorDescription(er) });
try d.invokeAssembler(tc, assembly_out_file_name, out_file_name);
if (d.only_compile) {
@@ -1440,8 +1509,11 @@ fn processSource(
defer ir.deinit(gpa);
if (d.verbose_ir) {
- var stdout = Io.File.stdout().writer(&writer_buf);
- ir.dump(gpa, d.detectConfig(stdout.file), &stdout.interface) catch {};
+ var stdout = std.Io.File.stdout().writer(io, &writer_buf);
+ ir.dump(gpa, .{
+ .mode = try d.detectMode(stdout.file),
+ .writer = &stdout.interface,
+ }) catch {};
}
var render_errors: Ir.Renderer.ErrorList = .{};
@@ -1494,8 +1566,9 @@ fn dumpLinkerArgs(w: *std.Io.Writer, items: []const []const u8) !void {
/// The entry point of the Aro compiler.
/// **MAY call `exit` if `fast_exit` is set.**
pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compilation.Error!void {
- const gpa = d.comp.gpa;
- const io = d.comp.io;
+ const comp = d.comp;
+ const io = comp.io;
+ const gpa = comp.gpa;
var argv: std.ArrayList([]const u8) = .empty;
defer argv.deinit(gpa);
@@ -1507,7 +1580,7 @@ pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compil
if (d.verbose_linker_args) {
var stdout_buf: [4096]u8 = undefined;
- var stdout = Io.File.stdout().writer(&stdout_buf);
+ var stdout = std.Io.File.stdout().writer(io, &stdout_buf);
dumpLinkerArgs(&stdout.interface, argv.items) catch {
return d.fatal("unable to dump linker args: {s}", .{errorDescription(stdout.err.?)});
};
@@ -1521,8 +1594,9 @@ pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compil
}) catch |er| {
return d.fatal("unable to spawn linker: {s}", .{errorDescription(er)});
};
+
const term = child.wait(io) catch |er| {
- return d.fatal("unable to wait linker: {s}", .{errorDescription(er)});
+ return d.fatal("error waiting for linker: {s}", .{errorDescription(er)});
};
switch (term) {
.exited => |code| if (code != 0) {
@@ -1541,7 +1615,7 @@ pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compil
fn exitWithCleanup(d: *Driver, code: u8) noreturn {
for (d.link_objects.items[d.link_objects.items.len - d.temp_file_count ..]) |obj| {
- std.fs.deleteFileAbsolute(obj) catch {};
+ std.Io.Dir.deleteFileAbsolute(d.comp.io, obj) catch {};
}
std.process.exit(code);
}
diff --git a/lib/compiler/aro/aro/Driver/Filesystem.zig b/lib/compiler/aro/aro/Driver/Filesystem.zig
@@ -1,241 +0,0 @@
-const builtin = @import("builtin");
-const is_windows = builtin.os.tag == .windows;
-
-const std = @import("std");
-const Io = std.Io;
-const mem = std.std.mem;
-
-fn readFileFake(entries: []const Filesystem.Entry, path: []const u8, buf: []u8) ?[]const u8 {
- @branchHint(.cold);
- for (entries) |entry| {
- if (mem.eql(u8, entry.path, path)) {
- const len = @min(entry.contents.len, buf.len);
- @memcpy(buf[0..len], entry.contents[0..len]);
- return buf[0..len];
- }
- }
- return null;
-}
-
-fn findProgramByNameFake(entries: []const Filesystem.Entry, name: []const u8, path: ?[]const u8, buf: []u8) ?[]const u8 {
- @branchHint(.cold);
- if (mem.indexOfScalar(u8, name, '/') != null) {
- @memcpy(buf[0..name.len], name);
- return buf[0..name.len];
- }
- const path_env = path orelse return null;
- var fib = std.heap.FixedBufferAllocator.init(buf);
-
- var it = mem.tokenizeScalar(u8, path_env, std.fs.path.delimiter);
- while (it.next()) |path_dir| {
- defer fib.reset();
- const full_path = std.fs.path.join(fib.allocator(), &.{ path_dir, name }) catch continue;
- if (canExecuteFake(entries, full_path)) return full_path;
- }
-
- return null;
-}
-
-fn canExecuteFake(entries: []const Filesystem.Entry, path: []const u8) bool {
- @branchHint(.cold);
- for (entries) |entry| {
- if (mem.eql(u8, entry.path, path)) {
- return entry.executable;
- }
- }
- return false;
-}
-
-fn existsFake(entries: []const Filesystem.Entry, path: []const u8) bool {
- @branchHint(.cold);
- var buf: [std.fs.max_path_bytes]u8 = undefined;
- var fib = std.heap.FixedBufferAllocator.init(&buf);
- const resolved = std.fs.path.resolvePosix(fib.allocator(), &.{path}) catch return false;
- for (entries) |entry| {
- if (mem.eql(u8, entry.path, resolved)) return true;
- }
- return false;
-}
-
-fn canExecutePosix(io: Io, path: []const u8) bool {
- Io.Dir.accessAbsolute(io, path, .{ .execute = true }) catch return false;
- // Todo: ensure path is not a directory
- return true;
-}
-
-/// TODO
-fn canExecuteWindows(path: []const u8) bool {
- _ = path;
- return true;
-}
-
-/// TODO
-fn findProgramByNameWindows(allocator: std.mem.Allocator, name: []const u8, path: ?[]const u8, buf: []u8) ?[]const u8 {
- _ = path;
- _ = buf;
- _ = name;
- _ = allocator;
- return null;
-}
-
-/// TODO: does WASI need special handling?
-fn findProgramByNamePosix(name: []const u8, path: ?[]const u8, buf: []u8) ?[]const u8 {
- if (mem.indexOfScalar(u8, name, '/') != null) {
- @memcpy(buf[0..name.len], name);
- return buf[0..name.len];
- }
- const path_env = path orelse return null;
- var fib = std.heap.FixedBufferAllocator.init(buf);
-
- var it = mem.tokenizeScalar(u8, path_env, std.fs.path.delimiter);
- while (it.next()) |path_dir| {
- defer fib.reset();
- const full_path = std.fs.path.join(fib.allocator(), &.{ path_dir, name }) catch continue;
- if (canExecutePosix(full_path)) return full_path;
- }
-
- return null;
-}
-
-pub const Filesystem = union(enum) {
- real: std.Io.Dir,
- fake: []const Entry,
-
- const Entry = struct {
- path: []const u8,
- contents: []const u8 = "",
- executable: bool = false,
- };
-
- const FakeDir = struct {
- entries: []const Entry,
- path: []const u8,
-
- fn iterate(self: FakeDir) FakeDir.Iterator {
- return .{
- .entries = self.entries,
- .base = self.path,
- };
- }
-
- const Iterator = struct {
- entries: []const Entry,
- base: []const u8,
- i: usize = 0,
-
- fn next(self: *@This()) !?std.Io.Dir.Entry {
- while (self.i < self.entries.len) {
- const entry = self.entries[self.i];
- self.i += 1;
- if (entry.path.len == self.base.len) continue;
- if (std.mem.startsWith(u8, entry.path, self.base)) {
- const remaining = entry.path[self.base.len + 1 ..];
- if (std.mem.indexOfScalar(u8, remaining, std.fs.path.sep) != null) continue;
- const extension = std.fs.path.extension(remaining);
- const kind: std.Io.Dir.Entry.Kind = if (extension.len == 0) .directory else .file;
- return .{ .name = remaining, .kind = kind };
- }
- }
- return null;
- }
- };
- };
-
- const Dir = union(enum) {
- dir: std.Io.Dir,
- fake: FakeDir,
-
- pub fn iterate(self: Dir) Iterator {
- return switch (self) {
- .dir => |dir| .{ .iterator = dir.iterate() },
- .fake => |fake| .{ .fake = fake.iterate() },
- };
- }
-
- pub fn close(self: *Dir, io: Io) void {
- switch (self.*) {
- .dir => |*d| d.close(io),
- .fake => {},
- }
- }
- };
-
- const Iterator = union(enum) {
- iterator: std.Io.Dir.Iterator,
- fake: FakeDir.Iterator,
-
- pub fn next(self: *Iterator) std.Io.Dir.Iterator.Error!?std.Io.Dir.Entry {
- return switch (self.*) {
- .iterator => |*it| it.next(),
- .fake => |*it| it.next(),
- };
- }
- };
-
- pub fn exists(fs: Filesystem, io: Io, path: []const u8) bool {
- switch (fs) {
- .real => |cwd| {
- cwd.access(io, path, .{}) catch return false;
- return true;
- },
- .fake => |paths| return existsFake(paths, path),
- }
- }
-
- pub fn joinedExists(fs: Filesystem, parts: []const []const u8) bool {
- var buf: [std.fs.max_path_bytes]u8 = undefined;
- var fib = std.heap.FixedBufferAllocator.init(&buf);
- const joined = std.fs.path.join(fib.allocator(), parts) catch return false;
- return fs.exists(joined);
- }
-
- pub fn canExecute(fs: Filesystem, path: []const u8) bool {
- return switch (fs) {
- .real => if (is_windows) canExecuteWindows(path) else canExecutePosix(path),
- .fake => |entries| canExecuteFake(entries, path),
- };
- }
-
- /// Search for an executable named `name` using platform-specific logic
- /// If it's found, write the full path to `buf` and return a slice of it
- /// Otherwise retun null
- pub fn findProgramByName(fs: Filesystem, allocator: std.mem.Allocator, name: []const u8, path: ?[]const u8, buf: []u8) ?[]const u8 {
- std.debug.assert(name.len > 0);
- return switch (fs) {
- .real => if (is_windows) findProgramByNameWindows(allocator, name, path, buf) else findProgramByNamePosix(name, path, buf),
- .fake => |entries| findProgramByNameFake(entries, name, path, buf),
- };
- }
-
- /// Read the file at `path` into `buf`.
- /// Returns null if any errors are encountered
- /// Otherwise returns a slice of `buf`. If the file is larger than `buf` partial contents are returned
- pub fn readFile(fs: Filesystem, io: Io, path: []const u8, buf: []u8) ?[]const u8 {
- return switch (fs) {
- .real => |cwd| {
- const file = cwd.openFile(io, path, .{}) catch return null;
- defer file.close(io);
-
- const bytes_read = file.readAll(buf) catch return null;
- return buf[0..bytes_read];
- },
- .fake => |entries| readFileFake(entries, path, buf),
- };
- }
-
- pub fn openDir(fs: Filesystem, io: Io, dir_name: []const u8) std.Io.Dir.OpenError!Dir {
- return switch (fs) {
- .real => |cwd| .{ .dir = try cwd.openDir(io, dir_name, .{ .access_sub_paths = false, .iterate = true }) },
- .fake => |entries| .{ .fake = .{ .entries = entries, .path = dir_name } },
- };
- }
-};
-
-test "Fake filesystem" {
- const fs: Filesystem = .{ .fake = &.{
- .{ .path = "/usr/bin" },
- } };
- try std.testing.expect(fs.exists("/usr/bin"));
- try std.testing.expect(fs.exists("/usr/bin/foo/.."));
- try std.testing.expect(!fs.exists("/usr/bin/bar"));
-}
diff --git a/lib/compiler/aro/aro/Driver/GCCDetector.zig b/lib/compiler/aro/aro/Driver/GCCDetector.zig
@@ -0,0 +1,635 @@
+const std = @import("std");
+
+const system_defaults = @import("system_defaults");
+
+const GCCVersion = @import("GCCVersion.zig");
+const Multilib = @import("Multilib.zig");
+const Target = @import("../Target.zig");
+const Toolchain = @import("../Toolchain.zig");
+
+const GCCDetector = @This();
+
+is_valid: bool = false,
+install_path: []const u8 = "",
+parent_lib_path: []const u8 = "",
+version: GCCVersion = .{},
+gcc_triple: []const u8 = "",
+selected: Multilib = .{},
+biarch_sibling: ?Multilib = null,
+
+pub fn deinit(self: *GCCDetector) void {
+ if (!self.is_valid) return;
+}
+
+pub fn appendToolPath(self: *const GCCDetector, tc: *Toolchain) !void {
+ if (!self.is_valid) return;
+ return tc.addPathFromComponents(&.{
+ self.parent_lib_path,
+ "..",
+ self.gcc_triple,
+ "bin",
+ }, .program);
+}
+
+fn addDefaultGCCPrefixes(prefixes: *std.ArrayList([]const u8), tc: *const Toolchain) !void {
+ const sysroot = tc.getSysroot();
+ const target = tc.getTarget();
+ if (sysroot.len == 0 and target.os.tag == .linux and tc.exists("/opt/rh")) {
+ prefixes.appendAssumeCapacity("/opt/rh/gcc-toolset-12/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/gcc-toolset-11/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/gcc-toolset-10/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/devtoolset-12/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/devtoolset-11/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/devtoolset-10/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/devtoolset-9/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/devtoolset-8/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/devtoolset-7/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/devtoolset-6/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/devtoolset-4/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/devtoolset-3/root/usr");
+ prefixes.appendAssumeCapacity("/opt/rh/devtoolset-2/root/usr");
+ }
+ if (sysroot.len == 0) {
+ prefixes.appendAssumeCapacity("/usr");
+ } else {
+ var usr_path = try tc.driver.comp.arena.alloc(u8, 4 + sysroot.len);
+ @memcpy(usr_path[0..4], "/usr");
+ @memcpy(usr_path[4..], sysroot);
+ prefixes.appendAssumeCapacity(usr_path);
+ }
+}
+
+fn collectLibDirsAndTriples(
+ tc: *Toolchain,
+ lib_dirs: *std.ArrayList([]const u8),
+ triple_aliases: *std.ArrayList([]const u8),
+ biarch_libdirs: *std.ArrayList([]const u8),
+ biarch_triple_aliases: *std.ArrayList([]const u8),
+) !void {
+ const AArch64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
+ const AArch64Triples: [4][]const u8 = .{ "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux", "aarch64-suse-linux" };
+ const AArch64beLibDirs: [1][]const u8 = .{"/lib"};
+ const AArch64beTriples: [2][]const u8 = .{ "aarch64_be-none-linux-gnu", "aarch64_be-linux-gnu" };
+
+ const ARMLibDirs: [1][]const u8 = .{"/lib"};
+ const ARMTriples: [1][]const u8 = .{"arm-linux-gnueabi"};
+ const ARMHFTriples: [4][]const u8 = .{ "arm-linux-gnueabihf", "armv7hl-redhat-linux-gnueabi", "armv6hl-suse-linux-gnueabi", "armv7hl-suse-linux-gnueabi" };
+
+ const ARMebLibDirs: [1][]const u8 = .{"/lib"};
+ const ARMebTriples: [1][]const u8 = .{"armeb-linux-gnueabi"};
+ const ARMebHFTriples: [2][]const u8 = .{ "armeb-linux-gnueabihf", "armebv7hl-redhat-linux-gnueabi" };
+
+ const AVRLibDirs: [1][]const u8 = .{"/lib"};
+ const AVRTriples: [1][]const u8 = .{"avr"};
+
+ const CSKYLibDirs: [1][]const u8 = .{"/lib"};
+ const CSKYTriples: [3][]const u8 = .{ "csky-linux-gnuabiv2", "csky-linux-uclibcabiv2", "csky-elf-noneabiv2" };
+
+ const X86_64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
+ const X86_64Triples: [11][]const u8 = .{
+ "x86_64-linux-gnu", "x86_64-unknown-linux-gnu",
+ "x86_64-pc-linux-gnu", "x86_64-redhat-linux6E",
+ "x86_64-redhat-linux", "x86_64-suse-linux",
+ "x86_64-manbo-linux-gnu", "x86_64-linux-gnu",
+ "x86_64-slackware-linux", "x86_64-unknown-linux",
+ "x86_64-amazon-linux",
+ };
+ const X32Triples: [2][]const u8 = .{ "x86_64-linux-gnux32", "x86_64-pc-linux-gnux32" };
+ const X32LibDirs: [2][]const u8 = .{ "/libx32", "/lib" };
+ const X86LibDirs: [2][]const u8 = .{ "/lib32", "/lib" };
+ const X86Triples: [9][]const u8 = .{
+ "i586-linux-gnu", "i686-linux-gnu", "i686-pc-linux-gnu",
+ "i386-redhat-linux6E", "i686-redhat-linux", "i386-redhat-linux",
+ "i586-suse-linux", "i686-montavista-linux", "i686-gnu",
+ };
+
+ const LoongArch64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
+ const LoongArch64Triples: [2][]const u8 = .{ "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu" };
+
+ const M68kLibDirs: [1][]const u8 = .{"/lib"};
+ const M68kTriples: [3][]const u8 = .{ "m68k-linux-gnu", "m68k-unknown-linux-gnu", "m68k-suse-linux" };
+
+ const MIPSLibDirs: [2][]const u8 = .{ "/libo32", "/lib" };
+ const MIPSTriples: [5][]const u8 = .{
+ "mips-linux-gnu", "mips-mti-linux",
+ "mips-mti-linux-gnu", "mips-img-linux-gnu",
+ "mipsisa32r6-linux-gnu",
+ };
+ const MIPSELLibDirs: [2][]const u8 = .{ "/libo32", "/lib" };
+ const MIPSELTriples: [3][]const u8 = .{ "mipsel-linux-gnu", "mips-img-linux-gnu", "mipsisa32r6el-linux-gnu" };
+
+ const MIPS64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
+ const MIPS64Triples: [6][]const u8 = .{
+ "mips64-linux-gnu", "mips-mti-linux-gnu",
+ "mips-img-linux-gnu", "mips64-linux-gnuabi64",
+ "mipsisa64r6-linux-gnu", "mipsisa64r6-linux-gnuabi64",
+ };
+ const MIPS64ELLibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
+ const MIPS64ELTriples: [6][]const u8 = .{
+ "mips64el-linux-gnu", "mips-mti-linux-gnu",
+ "mips-img-linux-gnu", "mips64el-linux-gnuabi64",
+ "mipsisa64r6el-linux-gnu", "mipsisa64r6el-linux-gnuabi64",
+ };
+
+ const MIPSN32LibDirs: [1][]const u8 = .{"/lib32"};
+ const MIPSN32Triples: [2][]const u8 = .{ "mips64-linux-gnuabin32", "mipsisa64r6-linux-gnuabin32" };
+ const MIPSN32ELLibDirs: [1][]const u8 = .{"/lib32"};
+ const MIPSN32ELTriples: [2][]const u8 = .{ "mips64el-linux-gnuabin32", "mipsisa64r6el-linux-gnuabin32" };
+
+ const MSP430LibDirs: [1][]const u8 = .{"/lib"};
+ const MSP430Triples: [1][]const u8 = .{"msp430-elf"};
+
+ const PPCLibDirs: [2][]const u8 = .{ "/lib32", "/lib" };
+ const PPCTriples: [5][]const u8 = .{
+ "powerpc-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc-linux-gnuspe",
+ // On 32-bit PowerPC systems running SUSE Linux, gcc is configured as a
+ // 64-bit compiler which defaults to "-m32", hence "powerpc64-suse-linux".
+ "powerpc64-suse-linux", "powerpc-montavista-linuxspe",
+ };
+ const PPCLELibDirs: [2][]const u8 = .{ "/lib32", "/lib" };
+ const PPCLETriples: [3][]const u8 = .{ "powerpcle-linux-gnu", "powerpcle-unknown-linux-gnu", "powerpcle-linux-musl" };
+
+ const PPC64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
+ const PPC64Triples: [4][]const u8 = .{
+ "powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu",
+ "powerpc64-suse-linux", "ppc64-redhat-linux",
+ };
+ const PPC64LELibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
+ const PPC64LETriples: [5][]const u8 = .{
+ "powerpc64le-linux-gnu", "powerpc64le-unknown-linux-gnu",
+ "powerpc64le-none-linux-gnu", "powerpc64le-suse-linux",
+ "ppc64le-redhat-linux",
+ };
+
+ const RISCV32LibDirs: [2][]const u8 = .{ "/lib32", "/lib" };
+ const RISCV32Triples: [3][]const u8 = .{ "riscv32-unknown-linux-gnu", "riscv32-linux-gnu", "riscv32-unknown-elf" };
+ const RISCV64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
+ const RISCV64Triples: [3][]const u8 = .{
+ "riscv64-unknown-linux-gnu",
+ "riscv64-linux-gnu",
+ "riscv64-unknown-elf",
+ };
+
+ const SPARCv8LibDirs: [2][]const u8 = .{ "/lib32", "/lib" };
+ const SPARCv8Triples: [2][]const u8 = .{ "sparc-linux-gnu", "sparcv8-linux-gnu" };
+ const SPARCv9LibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
+ const SPARCv9Triples: [2][]const u8 = .{ "sparc64-linux-gnu", "sparcv9-linux-gnu" };
+
+ const SystemZLibDirs: [2][]const u8 = .{ "/lib64", "/lib" };
+ const SystemZTriples: [5][]const u8 = .{
+ "s390x-linux-gnu", "s390x-unknown-linux-gnu", "s390x-ibm-linux-gnu",
+ "s390x-suse-linux", "s390x-redhat-linux",
+ };
+ const target = tc.getTarget();
+ if (target.os.tag == .illumos) {
+ // TODO
+ return;
+ }
+ if (target.abi.isAndroid()) {
+ const AArch64AndroidTriples: [1][]const u8 = .{"aarch64-linux-android"};
+ const ARMAndroidTriples: [1][]const u8 = .{"arm-linux-androideabi"};
+ const MIPSELAndroidTriples: [1][]const u8 = .{"mipsel-linux-android"};
+ const MIPS64ELAndroidTriples: [1][]const u8 = .{"mips64el-linux-android"};
+ const X86AndroidTriples: [1][]const u8 = .{"i686-linux-android"};
+ const X86_64AndroidTriples: [1][]const u8 = .{"x86_64-linux-android"};
+
+ switch (target.cpu.arch) {
+ .aarch64 => {
+ lib_dirs.appendSliceAssumeCapacity(&AArch64LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&AArch64AndroidTriples);
+ },
+ .arm,
+ .thumb,
+ => {
+ lib_dirs.appendSliceAssumeCapacity(&ARMLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&ARMAndroidTriples);
+ },
+ .mipsel => {
+ lib_dirs.appendSliceAssumeCapacity(&MIPSELLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&MIPSELAndroidTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPS64ELAndroidTriples);
+ },
+ .mips64el => {
+ lib_dirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&MIPS64ELAndroidTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&MIPSELLibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSELAndroidTriples);
+ },
+ .x86_64 => {
+ lib_dirs.appendSliceAssumeCapacity(&X86_64LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&X86_64AndroidTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&X86LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&X86AndroidTriples);
+ },
+ .x86 => {
+ lib_dirs.appendSliceAssumeCapacity(&X86LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&X86AndroidTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&X86_64LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&X86_64AndroidTriples);
+ },
+ else => {},
+ }
+ return;
+ }
+ switch (target.cpu.arch) {
+ .aarch64 => {
+ lib_dirs.appendSliceAssumeCapacity(&AArch64LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&AArch64Triples);
+ biarch_libdirs.appendSliceAssumeCapacity(&AArch64LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&AArch64Triples);
+ },
+ .aarch64_be => {
+ lib_dirs.appendSliceAssumeCapacity(&AArch64beLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&AArch64beTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&AArch64beLibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&AArch64beTriples);
+ },
+ .arm, .thumb => {
+ lib_dirs.appendSliceAssumeCapacity(&ARMLibDirs);
+ if (target.abi == .gnueabihf) {
+ triple_aliases.appendSliceAssumeCapacity(&ARMHFTriples);
+ } else {
+ triple_aliases.appendSliceAssumeCapacity(&ARMTriples);
+ }
+ },
+ .armeb, .thumbeb => {
+ lib_dirs.appendSliceAssumeCapacity(&ARMebLibDirs);
+ if (target.abi == .gnueabihf) {
+ triple_aliases.appendSliceAssumeCapacity(&ARMebHFTriples);
+ } else {
+ triple_aliases.appendSliceAssumeCapacity(&ARMebTriples);
+ }
+ },
+ .avr => {
+ lib_dirs.appendSliceAssumeCapacity(&AVRLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&AVRTriples);
+ },
+ .csky => {
+ lib_dirs.appendSliceAssumeCapacity(&CSKYLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&CSKYTriples);
+ },
+ .x86_64 => {
+ if (target.abi == .gnux32 or target.abi == .muslx32) {
+ lib_dirs.appendSliceAssumeCapacity(&X32LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&X32Triples);
+ biarch_libdirs.appendSliceAssumeCapacity(&X86_64LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&X86_64Triples);
+ } else {
+ lib_dirs.appendSliceAssumeCapacity(&X86_64LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&X86_64Triples);
+ biarch_libdirs.appendSliceAssumeCapacity(&X32LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&X32Triples);
+ }
+ biarch_libdirs.appendSliceAssumeCapacity(&X86LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&X86Triples);
+ },
+ .x86 => {
+ lib_dirs.appendSliceAssumeCapacity(&X86LibDirs);
+ },
+ .loongarch64 => {
+ lib_dirs.appendSliceAssumeCapacity(&LoongArch64LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&LoongArch64Triples);
+ },
+ .m68k => {
+ lib_dirs.appendSliceAssumeCapacity(&M68kLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&M68kTriples);
+ },
+ .mips => {
+ lib_dirs.appendSliceAssumeCapacity(&MIPSLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&MIPSTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&MIPS64LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPS64Triples);
+ biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32Triples);
+ },
+ .mipsel => {
+ lib_dirs.appendSliceAssumeCapacity(&MIPSELLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&MIPSELTriples);
+ triple_aliases.appendSliceAssumeCapacity(&MIPSTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPS64ELTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32ELLibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32ELTriples);
+ },
+ .mips64 => {
+ lib_dirs.appendSliceAssumeCapacity(&MIPS64LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&MIPS64Triples);
+ biarch_libdirs.appendSliceAssumeCapacity(&MIPSLibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32Triples);
+ },
+ .mips64el => {
+ lib_dirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&MIPS64ELTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&MIPSELLibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSELTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32ELLibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32ELTriples);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSTriples);
+ },
+ .msp430 => {
+ lib_dirs.appendSliceAssumeCapacity(&MSP430LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&MSP430Triples);
+ },
+ .powerpc => {
+ lib_dirs.appendSliceAssumeCapacity(&PPCLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&PPCTriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&PPC64LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&PPC64Triples);
+ },
+ .powerpcle => {
+ lib_dirs.appendSliceAssumeCapacity(&PPCLELibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&PPCLETriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&PPC64LELibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&PPC64LETriples);
+ },
+ .powerpc64 => {
+ lib_dirs.appendSliceAssumeCapacity(&PPC64LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&PPC64Triples);
+ biarch_libdirs.appendSliceAssumeCapacity(&PPCLibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&PPCTriples);
+ },
+ .powerpc64le => {
+ lib_dirs.appendSliceAssumeCapacity(&PPC64LELibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&PPC64LETriples);
+ biarch_libdirs.appendSliceAssumeCapacity(&PPCLELibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&PPCLETriples);
+ },
+ .riscv32 => {
+ lib_dirs.appendSliceAssumeCapacity(&RISCV32LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&RISCV32Triples);
+ biarch_libdirs.appendSliceAssumeCapacity(&RISCV64LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&RISCV64Triples);
+ },
+ .riscv64 => {
+ lib_dirs.appendSliceAssumeCapacity(&RISCV64LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&RISCV64Triples);
+ biarch_libdirs.appendSliceAssumeCapacity(&RISCV32LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&RISCV32Triples);
+ },
+ .sparc => {
+ lib_dirs.appendSliceAssumeCapacity(&SPARCv8LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&SPARCv8Triples);
+ biarch_libdirs.appendSliceAssumeCapacity(&SPARCv9LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&SPARCv9Triples);
+ },
+ .sparc64 => {
+ lib_dirs.appendSliceAssumeCapacity(&SPARCv9LibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&SPARCv9Triples);
+ biarch_libdirs.appendSliceAssumeCapacity(&SPARCv8LibDirs);
+ biarch_triple_aliases.appendSliceAssumeCapacity(&SPARCv8Triples);
+ },
+ .s390x => {
+ lib_dirs.appendSliceAssumeCapacity(&SystemZLibDirs);
+ triple_aliases.appendSliceAssumeCapacity(&SystemZTriples);
+ },
+ else => {},
+ }
+}
+
+pub fn discover(self: *GCCDetector, tc: *Toolchain) !void {
+ var path_buf: [std.fs.max_path_bytes]u8 = undefined;
+ var fib = std.heap.FixedBufferAllocator.init(&path_buf);
+
+ const target = tc.getTarget();
+ const biarch_variant_target = if (target.ptrBitWidth() == 32)
+ target.get64BitArchVariant()
+ else
+ target.get32BitArchVariant();
+
+ var candidate_lib_dirs_buffer: [16][]const u8 = undefined;
+ var candidate_lib_dirs = std.ArrayList([]const u8).initBuffer(&candidate_lib_dirs_buffer);
+
+ var candidate_triple_aliases_buffer: [16][]const u8 = undefined;
+ var candidate_triple_aliases = std.ArrayList([]const u8).initBuffer(&candidate_triple_aliases_buffer);
+
+ var candidate_biarch_lib_dirs_buffer: [16][]const u8 = undefined;
+ var candidate_biarch_lib_dirs = std.ArrayList([]const u8).initBuffer(&candidate_biarch_lib_dirs_buffer);
+
+ var candidate_biarch_triple_aliases_buffer: [20][]const u8 = undefined;
+ var candidate_biarch_triple_aliases = std.ArrayList([]const u8).initBuffer(&candidate_biarch_triple_aliases_buffer);
+
+ try collectLibDirsAndTriples(
+ tc,
+ &candidate_lib_dirs,
+ &candidate_triple_aliases,
+ &candidate_biarch_lib_dirs,
+ &candidate_biarch_triple_aliases,
+ );
+
+ var target_buf: [64]u8 = undefined;
+ const triple_str = target.toLLVMTriple(&target_buf);
+ candidate_triple_aliases.appendAssumeCapacity(triple_str);
+
+ // Also include the multiarch variant if it's different.
+ var biarch_buf: [64]u8 = undefined;
+ if (biarch_variant_target) |*biarch_target| {
+ const biarch_triple_str = biarch_target.toLLVMTriple(&biarch_buf);
+ if (!std.mem.eql(u8, biarch_triple_str, triple_str)) {
+ candidate_triple_aliases.appendAssumeCapacity(biarch_triple_str);
+ }
+ }
+
+ var prefixes_buf: [16][]const u8 = undefined;
+ var prefixes = std.ArrayList([]const u8).initBuffer(&prefixes_buf);
+ const gcc_toolchain_dir = gccToolchainDir(tc);
+ if (gcc_toolchain_dir.len != 0) {
+ const adjusted = if (gcc_toolchain_dir[gcc_toolchain_dir.len - 1] == '/')
+ gcc_toolchain_dir[0 .. gcc_toolchain_dir.len - 1]
+ else
+ gcc_toolchain_dir;
+ prefixes.appendAssumeCapacity(adjusted);
+ } else {
+ const sysroot = tc.getSysroot();
+ if (sysroot.len > 0) {
+ prefixes.appendAssumeCapacity(sysroot);
+ try addDefaultGCCPrefixes(&prefixes, tc);
+ }
+
+ if (sysroot.len == 0) {
+ try addDefaultGCCPrefixes(&prefixes, tc);
+ }
+ // TODO: Special-case handling for Gentoo
+ }
+
+ const v0 = GCCVersion.parse("0.0.0");
+ for (prefixes.items) |prefix| {
+ if (!tc.exists(prefix)) continue;
+
+ for (candidate_lib_dirs.items) |suffix| {
+ defer fib.reset();
+ const lib_dir = std.fs.path.join(fib.allocator(), &.{ prefix, suffix }) catch continue;
+ if (!tc.exists(lib_dir)) continue;
+
+ const gcc_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc" });
+ const gcc_cross_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc-cross" });
+
+ try self.scanLibDirForGCCTriple(tc, target, lib_dir, triple_str, false, gcc_dir_exists, gcc_cross_dir_exists);
+ for (candidate_triple_aliases.items) |candidate| {
+ try self.scanLibDirForGCCTriple(tc, target, lib_dir, candidate, false, gcc_dir_exists, gcc_cross_dir_exists);
+ }
+ }
+ for (candidate_biarch_lib_dirs.items) |suffix| {
+ const lib_dir = std.fs.path.join(fib.allocator(), &.{ prefix, suffix }) catch continue;
+ if (!tc.exists(lib_dir)) continue;
+
+ const gcc_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc" });
+ const gcc_cross_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc-cross" });
+ for (candidate_biarch_triple_aliases.items) |candidate| {
+ try self.scanLibDirForGCCTriple(tc, target, lib_dir, candidate, true, gcc_dir_exists, gcc_cross_dir_exists);
+ }
+ }
+ if (self.version.order(v0) == .gt) break;
+ }
+}
+
+fn findBiarchMultilibs(
+ tc: *const Toolchain,
+ result: *Multilib.Detected,
+ target: *const Target,
+ path: [2][]const u8,
+ needs_biarch_suffix: bool,
+) !bool {
+ const suff64 = if (target.os.tag == .illumos) switch (target.cpu.arch) {
+ .x86, .x86_64 => "/amd64",
+ .sparc => "/sparcv9",
+ else => "/64",
+ } else "/64";
+
+ const alt_64 = Multilib.init(suff64, suff64, &.{ "-m32", "+m64", "-mx32" });
+ const alt_32 = Multilib.init("/32", "/32", &.{ "+m32", "-m64", "-mx32" });
+ const alt_x32 = Multilib.init("/x32", "/x32", &.{ "-m32", "-m64", "+mx32" });
+
+ const multilib_filter = Multilib.Filter{
+ .base = path,
+ .file = "crtbegin.o",
+ };
+
+ const Want = enum {
+ want32,
+ want64,
+ wantx32,
+ };
+ const is_x32 = target.abi == .gnux32 or target.abi == .muslx32;
+ const target_ptr_width = target.ptrBitWidth();
+ const want: Want = if (target_ptr_width == 32 and multilib_filter.exists(alt_32, tc))
+ .want64
+ else if (target_ptr_width == 64 and is_x32 and multilib_filter.exists(alt_x32, tc))
+ .want64
+ else if (target_ptr_width == 64 and !is_x32 and multilib_filter.exists(alt_64, tc))
+ .want32
+ else if (target_ptr_width == 32)
+ if (needs_biarch_suffix) .want64 else .want32
+ else if (is_x32)
+ if (needs_biarch_suffix) .want64 else .wantx32
+ else if (needs_biarch_suffix) .want32 else .want64;
+
+ const default = switch (want) {
+ .want32 => Multilib.init("", "", &.{ "+m32", "-m64", "-mx32" }),
+ .want64 => Multilib.init("", "", &.{ "-m32", "+m64", "-mx32" }),
+ .wantx32 => Multilib.init("", "", &.{ "-m32", "-m64", "+mx32" }),
+ };
+ result.multilib_buf[result.multilib_count..][0..4].* = .{
+ default,
+ alt_64,
+ alt_32,
+ alt_x32,
+ };
+ result.multilib_count += 4;
+
+ result.filter(multilib_filter, tc);
+ return result.select(&.{
+ if (target_ptr_width == 64 and !is_x32) "+m64" else "-m64",
+ if (target_ptr_width == 32) "+m32" else "-m32",
+ if (target_ptr_width == 64 and is_x32) "+mx32" else "-mx32",
+ });
+}
+
+fn scanGCCForMultilibs(
+ self: *GCCDetector,
+ tc: *const Toolchain,
+ target: *const Target,
+ path: [2][]const u8,
+ needs_biarch_suffix: bool,
+) !bool {
+ var detected: Multilib.Detected = .{};
+ if (target.cpu.arch == .csky) {
+ // TODO
+ } else if (target.cpu.arch.isMIPS()) {
+ // TODO
+ } else if (target.cpu.arch.isRISCV()) {
+ // TODO
+ } else if (target.cpu.arch == .msp430) {
+ // TODO
+ } else if (target.cpu.arch == .avr) {
+ // No multilibs
+ } else if (!try findBiarchMultilibs(tc, &detected, target, path, needs_biarch_suffix)) {
+ return false;
+ }
+ self.selected = detected.selected;
+ self.biarch_sibling = detected.biarch_sibling;
+ return true;
+}
+
+fn scanLibDirForGCCTriple(
+ self: *GCCDetector,
+ tc: *const Toolchain,
+ target: *const Target,
+ lib_dir: []const u8,
+ candidate_triple: []const u8,
+ needs_biarch_suffix: bool,
+ gcc_dir_exists: bool,
+ gcc_cross_dir_exists: bool,
+) !void {
+ var path_buf: [std.fs.max_path_bytes]u8 = undefined;
+ var fib = std.heap.FixedBufferAllocator.init(&path_buf);
+ const comp = tc.driver.comp;
+ const arena = comp.arena;
+ const io = comp.io;
+ for (0..2) |i| {
+ if (i == 0 and !gcc_dir_exists) continue;
+ if (i == 1 and !gcc_cross_dir_exists) continue;
+ defer fib.reset();
+
+ const base: []const u8 = if (i == 0) "gcc" else "gcc-cross";
+ var lib_suffix_buf: [64]u8 = undefined;
+ var suffix_buf_fib = std.heap.FixedBufferAllocator.init(&lib_suffix_buf);
+ const lib_suffix = std.fs.path.join(suffix_buf_fib.allocator(), &.{ base, candidate_triple }) catch continue;
+
+ const dir_name = std.fs.path.join(fib.allocator(), &.{ lib_dir, lib_suffix }) catch continue;
+ var parent_dir = comp.cwd.openDir(io, dir_name, .{ .access_sub_paths = false, .iterate = true }) catch continue;
+ defer parent_dir.close(io);
+
+ var it = parent_dir.iterate();
+ while (it.next(io) catch continue) |entry| {
+ if (entry.kind != .directory) continue;
+
+ const version_text = entry.name;
+ const candidate_version = GCCVersion.parse(version_text);
+ if (candidate_version.major != -1) {
+ // TODO: cache path so we're not repeatedly scanning
+ }
+ if (candidate_version.isLessThan(4, 1, 1, "")) continue;
+ switch (candidate_version.order(self.version)) {
+ .lt, .eq => continue,
+ .gt => {},
+ }
+
+ if (!try self.scanGCCForMultilibs(tc, target, .{ dir_name, version_text }, needs_biarch_suffix)) continue;
+
+ self.version = candidate_version;
+ self.gcc_triple = try arena.dupe(u8, candidate_triple);
+ self.install_path = try std.fs.path.join(arena, &.{ lib_dir, lib_suffix, version_text });
+ self.parent_lib_path = try std.fs.path.join(arena, &.{ self.install_path, "..", "..", ".." });
+ self.is_valid = true;
+ }
+ }
+}
+
+fn gccToolchainDir(tc: *const Toolchain) []const u8 {
+ const sysroot = tc.getSysroot();
+ if (sysroot.len != 0) return "";
+ return system_defaults.gcc_install_prefix;
+}
diff --git a/lib/compiler/aro/aro/LangOpts.zig b/lib/compiler/aro/aro/LangOpts.zig
@@ -7,16 +7,22 @@ pub const Compiler = enum {
clang,
gcc,
msvc,
+ no,
pub fn defaultGccVersion(self: Compiler) u32 {
return switch (self) {
.clang => 4 * 10_000 + 2 * 100 + 1,
- .gcc => 7 * 10_000 + 1 * 100 + 0,
+ .no, .gcc => 7 * 10_000 + 1 * 100 + 0,
.msvc => 0,
};
}
};
+pub const BoundsSafety = enum {
+ none,
+ clang,
+};
+
/// The floating-point evaluation method for intermediate results within a single expression
pub const FPEvalMethod = enum(i8) {
/// The evaluation method cannot be determined or is inconsistent for this target.
@@ -116,7 +122,7 @@ pub const Standard = enum {
const LangOpts = @This();
-emulate: Compiler = .clang,
+emulate: Compiler = .no,
standard: Standard = .default,
/// -fshort-enums option, makes enums only take up as much space as they need to hold all the values.
short_enums: bool = false,
@@ -149,6 +155,10 @@ preserve_comments_in_macros: bool = false,
/// e.g. 4.2.1 == 40201
gnuc_version: ?u32 = null,
+bounds_safety: BoundsSafety = .none,
+
+default_symbol_visibility: std.builtin.SymbolVisibility = .default,
+
pub fn setStandard(self: *LangOpts, name: []const u8) error{InvalidStandard}!void {
self.standard = Standard.NameMap.get(name) orelse return error.InvalidStandard;
}
diff --git a/lib/compiler/aro/aro/Parser.zig b/lib/compiler/aro/aro/Parser.zig
@@ -1,5 +1,4 @@
const std = @import("std");
-const Io = std.Io;
const mem = std.mem;
const Allocator = mem.Allocator;
const assert = std.debug.assert;
@@ -204,6 +203,11 @@ string_ids: struct {
sigjmp_buf: StringId,
ucontext_t: StringId,
},
+va_arg_pack_ctx: packed struct {
+ valid: bool = false,
+ variadic: bool = false,
+ typed: bool = false,
+} = .{},
/// Checks codepoint for various pedantic warnings
/// Returns true if diagnostic issued
@@ -212,7 +216,7 @@ fn checkIdentifierCodepointWarnings(p: *Parser, codepoint: u21, loc: Source.Loca
const prev_total = p.diagnostics.total;
var sf = std.heap.stackFallback(1024, p.comp.gpa);
- var allocating: Io.Writer.Allocating = .init(sf.get());
+ var allocating: std.Io.Writer.Allocating = .init(sf.get());
defer allocating.deinit();
if (!char_info.isC99IdChar(codepoint)) {
@@ -426,7 +430,7 @@ pub fn err(p: *Parser, tok_i: TokenIndex, diagnostic: Diagnostic, args: anytype)
if (p.diagnostics.effectiveKind(diagnostic) == .off) return;
var sf = std.heap.stackFallback(1024, p.comp.gpa);
- var allocating: Io.Writer.Allocating = .init(sf.get());
+ var allocating: std.Io.Writer.Allocating = .init(sf.get());
defer allocating.deinit();
p.formatArgs(&allocating.writer, diagnostic.fmt, args) catch return error.OutOfMemory;
@@ -448,7 +452,7 @@ pub fn err(p: *Parser, tok_i: TokenIndex, diagnostic: Diagnostic, args: anytype)
}, p.pp.expansionSlice(tok_i), true);
}
-fn formatArgs(p: *Parser, w: *Io.Writer, fmt: []const u8, args: anytype) !void {
+fn formatArgs(p: *Parser, w: *std.Io.Writer, fmt: []const u8, args: anytype) !void {
var i: usize = 0;
inline for (std.meta.fields(@TypeOf(args))) |arg_info| {
const arg = @field(args, arg_info.name);
@@ -477,13 +481,13 @@ fn formatArgs(p: *Parser, w: *Io.Writer, fmt: []const u8, args: anytype) !void {
try w.writeAll(fmt[i..]);
}
-fn formatTokenId(w: *Io.Writer, fmt: []const u8, tok_id: Tree.Token.Id) !usize {
+fn formatTokenId(w: *std.Io.Writer, fmt: []const u8, tok_id: Tree.Token.Id) !usize {
const i = Diagnostics.templateIndex(w, fmt, "{tok_id}");
try w.writeAll(tok_id.symbol());
return i;
}
-fn formatQualType(p: *Parser, w: *Io.Writer, fmt: []const u8, qt: QualType) !usize {
+fn formatQualType(p: *Parser, w: *std.Io.Writer, fmt: []const u8, qt: QualType) !usize {
const i = Diagnostics.templateIndex(w, fmt, "{qt}");
try w.writeByte('\'');
try qt.print(p.comp, w);
@@ -502,7 +506,7 @@ fn formatQualType(p: *Parser, w: *Io.Writer, fmt: []const u8, qt: QualType) !usi
return i;
}
-fn formatResult(p: *Parser, w: *Io.Writer, fmt: []const u8, res: Result) !usize {
+fn formatResult(p: *Parser, w: *std.Io.Writer, fmt: []const u8, res: Result) !usize {
const i = Diagnostics.templateIndex(w, fmt, "{value}");
switch (res.val.opt_ref) {
.none => try w.writeAll("(none)"),
@@ -525,7 +529,7 @@ const Normalized = struct {
return .{ .str = str };
}
- pub fn format(ctx: Normalized, w: *Io.Writer, fmt: []const u8) !usize {
+ pub fn format(ctx: Normalized, w: *std.Io.Writer, fmt: []const u8) !usize {
const i = Diagnostics.templateIndex(w, fmt, "{normalized}");
var it: std.unicode.Utf8Iterator = .{
.bytes = ctx.str,
@@ -559,7 +563,7 @@ const Codepoint = struct {
return .{ .codepoint = codepoint };
}
- pub fn format(ctx: Codepoint, w: *Io.Writer, fmt: []const u8) !usize {
+ pub fn format(ctx: Codepoint, w: *std.Io.Writer, fmt: []const u8) !usize {
const i = Diagnostics.templateIndex(w, fmt, "{codepoint}");
try w.print("{X:0>4}", .{ctx.codepoint});
return i;
@@ -573,7 +577,7 @@ const Escaped = struct {
return .{ .str = str };
}
- pub fn format(ctx: Escaped, w: *Io.Writer, fmt: []const u8) !usize {
+ pub fn format(ctx: Escaped, w: *std.Io.Writer, fmt: []const u8) !usize {
const i = Diagnostics.templateIndex(w, fmt, "{s}");
try std.zig.stringEscape(ctx.str, w);
return i;
@@ -740,6 +744,11 @@ fn getNode(p: *Parser, node: Node.Index, comptime tag: std.meta.Tag(Tree.Node))
}
}
+pub fn isAddressOfStringLiteral(p: *Parser, node: Node.Index) bool {
+ const addr_of = p.getNode(node, .addr_of_expr) orelse return false;
+ return p.nodeIs(addr_of.operand, .string_literal_expr);
+}
+
fn pragma(p: *Parser) Compilation.Error!bool {
var found_pragma = false;
while (p.eatToken(.keyword_pragma)) |_| {
@@ -1070,14 +1079,15 @@ fn decl(p: *Parser) Error!bool {
try p.attributeSpecifier();
+ const decl_spec_start = p.tok_i;
var decl_spec = (try p.declSpec()) orelse blk: {
if (p.func.qt != null) {
p.tok_i = first_tok;
return false;
}
- switch (p.tok_ids[first_tok]) {
+ switch (p.tok_ids[decl_spec_start]) {
.asterisk, .l_paren => {},
- .identifier, .extended_identifier => switch (p.tok_ids[first_tok + 1]) {
+ .identifier, .extended_identifier => switch (p.tok_ids[decl_spec_start + 1]) {
.identifier, .extended_identifier => {
// The most likely reason for `identifier identifier` is
// an unknown type name.
@@ -1087,7 +1097,7 @@ fn decl(p: *Parser) Error!bool {
},
else => {},
},
- else => if (p.tok_i != first_tok) {
+ else => if (p.tok_i != decl_spec_start) {
try p.err(p.tok_i, .expected_ident_or_l_paren, .{});
return error.ParsingFailed;
} else return false,
@@ -1167,6 +1177,7 @@ fn decl(p: *Parser) Error!bool {
// Collect old style parameter declarations.
if (init_d.d.old_style_func != null) {
+ try p.err(init_d.d.name, .def_no_proto_deprecated, .{});
const param_buf_top = p.param_buf.items.len;
defer p.param_buf.items.len = param_buf_top;
@@ -1340,7 +1351,7 @@ fn decl(p: *Parser) Error!bool {
if (init_d.d.old_style_func) |tok_i| try p.err(tok_i, .invalid_old_style_params, .{});
if (decl_spec.storage_class == .typedef) {
- try decl_spec.validateDecl(p);
+ try decl_spec.validateDecl(p, init_d.asm_label);
try p.tree.setNode(.{ .typedef = .{
.name_tok = init_d.d.name,
.qt = init_d.d.qt,
@@ -1357,7 +1368,7 @@ fn decl(p: *Parser) Error!bool {
.definition = null,
} }, @intFromEnum(decl_node));
} else {
- try decl_spec.validateDecl(p);
+ try decl_spec.validateDecl(p, init_d.asm_label);
var node_qt = init_d.d.qt;
if (p.func.qt == null and decl_spec.storage_class != .@"extern") {
if (node_qt.get(p.comp, .array)) |array_ty| {
@@ -1454,7 +1465,7 @@ fn decl(p: *Parser) Error!bool {
return true;
}
-fn staticAssertMessage(p: *Parser, cond_node: Node.Index, maybe_message: ?Result, allocating: *Io.Writer.Allocating) !?[]const u8 {
+fn staticAssertMessage(p: *Parser, cond_node: Node.Index, maybe_message: ?Result, allocating: *std.Io.Writer.Allocating) !?[]const u8 {
const w = &allocating.writer;
const cond = cond_node.get(&p.tree);
@@ -1527,7 +1538,7 @@ fn staticAssert(p: *Parser) Error!bool {
} else {
if (!res.val.toBool(p.comp)) {
var sf = std.heap.stackFallback(1024, gpa);
- var allocating: Io.Writer.Allocating = .init(sf.get());
+ var allocating: std.Io.Writer.Allocating = .init(sf.get());
defer allocating.deinit();
if (p.staticAssertMessage(res_node, str, &allocating) catch return error.OutOfMemory) |message| {
@@ -1597,13 +1608,16 @@ pub const DeclSpec = struct {
if (d.constexpr) |tok_i| try p.err(tok_i, .illegal_storage_on_func, .{});
}
- fn validateDecl(d: DeclSpec, p: *Parser) Error!void {
+ fn validateDecl(d: DeclSpec, p: *Parser, asm_label: ?Node.Index) Error!void {
if (d.@"inline") |tok_i| try p.err(tok_i, .func_spec_non_func, .{"inline"});
// TODO move to attribute validation
if (d.noreturn) |tok_i| try p.err(tok_i, .func_spec_non_func, .{"_Noreturn"});
switch (d.storage_class) {
- .auto => std.debug.assert(!p.comp.langopts.standard.atLeast(.c23)),
- .register => if (p.func.qt == null) try p.err(p.tok_i, .illegal_storage_on_global, .{}),
+ .auto => {
+ std.debug.assert(!p.comp.langopts.standard.atLeast(.c23));
+ try p.err(p.tok_i, .auto_on_global, .{});
+ },
+ .register => if (p.func.qt == null and asm_label == null) try p.err(p.tok_i, .register_on_global, .{}),
else => {},
}
}
@@ -1787,7 +1801,11 @@ fn storageClassSpec(p: *Parser, d: *DeclSpec) Error!bool {
return p.tok_i != start;
}
-const InitDeclarator = struct { d: Declarator, initializer: ?Result = null };
+const InitDeclarator = struct {
+ d: Declarator,
+ initializer: ?Result = null,
+ asm_label: ?Node.Index = null,
+};
/// attribute
/// : attrIdentifier
@@ -1829,18 +1847,18 @@ fn attribute(p: *Parser, kind: Attribute.Kind, namespace: ?[]const u8) Error!?Te
if (try p.eatIdentifier()) |ident| {
if (try Attribute.diagnoseIdent(attr, &arguments, ident, p)) {
p.skipTo(.r_paren);
- return error.ParsingFailed;
+ return null;
}
} else {
try p.err(name_tok, .attribute_requires_identifier, .{name});
- return error.ParsingFailed;
+ return null;
}
} else {
const arg_start = p.tok_i;
const first_expr = try p.expect(assignExpr);
if (try p.diagnose(attr, &arguments, arg_idx, first_expr, arg_start)) {
p.skipTo(.r_paren);
- return error.ParsingFailed;
+ return null;
}
}
arg_idx += 1;
@@ -1851,7 +1869,7 @@ fn attribute(p: *Parser, kind: Attribute.Kind, namespace: ?[]const u8) Error!?Te
const arg_expr = try p.expect(assignExpr);
if (try p.diagnose(attr, &arguments, arg_idx, arg_expr, arg_start)) {
p.skipTo(.r_paren);
- return error.ParsingFailed;
+ return null;
}
}
},
@@ -1861,9 +1879,9 @@ fn attribute(p: *Parser, kind: Attribute.Kind, namespace: ?[]const u8) Error!?Te
try p.err(name_tok, .attribute_not_enough_args, .{
@tagName(attr), required_count,
});
- return error.ParsingFailed;
+ return null;
}
- return TentativeAttribute{ .attr = .{ .tag = attr, .args = arguments, .syntax = kind.toSyntax() }, .tok = name_tok };
+ return .{ .attr = .{ .tag = attr, .args = arguments, .syntax = kind.toSyntax() }, .tok = name_tok };
}
fn diagnose(p: *Parser, attr: Attribute.Tag, arguments: *Attribute.Arguments, arg_idx: u32, res: Result, arg_start: TokenIndex) !bool {
@@ -1995,12 +2013,12 @@ fn initDeclarator(p: *Parser, decl_spec: *DeclSpec, attr_buf_top: usize, decl_no
defer p.attr_buf.len = this_attr_buf_top;
const gpa = p.comp.gpa;
- var init_d = InitDeclarator{
+ var init_d: InitDeclarator = .{
.d = (try p.declarator(decl_spec.qt, .normal)) orelse return null,
};
try p.attributeSpecifierExtra(init_d.d.name);
- _ = try p.assembly(.decl_label);
+ init_d.asm_label = try p.assembly(.decl_label);
try p.attributeSpecifierExtra(init_d.d.name);
switch (init_d.d.declarator_type) {
@@ -2276,14 +2294,13 @@ fn typeSpec(p: *Parser, builder: *TypeStore.Builder) Error!bool {
}, .syntax = .keyword },
.tok = align_tok,
});
- } else {
+ } else check: {
const arg_start = p.tok_i;
const res = try p.integerConstExpr(.no_const_decl_folding);
if (!res.val.isZero(p.comp)) {
var args = Attribute.initArguments(.aligned, align_tok);
if (try p.diagnose(.aligned, &args, 0, res, arg_start)) {
- p.skipTo(.r_paren);
- return error.ParsingFailed;
+ break :check;
}
args.aligned.alignment.?.node = .pack(res.node);
try p.attr_buf.append(gpa, .{
@@ -2562,7 +2579,7 @@ fn recordSpec(p: *Parser) Error!QualType {
if (!any_incomplete) {
const pragma_pack_value = switch (p.comp.langopts.emulate) {
- .clang => starting_pragma_pack,
+ .clang, .no => starting_pragma_pack,
.gcc => p.pragma_pack,
// TODO: msvc considers `#pragma pack` on a per-field basis
.msvc => p.pragma_pack,
@@ -3542,7 +3559,6 @@ fn declarator(
const pointer_qt = try p.comp.type_store.put(p.comp.gpa, .{ .pointer = .{
.child = d.qt,
- .decayed = null,
} });
d.qt = try builder.finishQuals(pointer_qt);
}
@@ -4141,7 +4157,10 @@ fn designation(p: *Parser, il: *InitList, init_qt: QualType, index_list: *IndexL
const field = record_ty.fields[field_index];
if (field.name_tok == 0) if (field.qt.getRecord(p.comp)) |field_record_ty| {
// Recurse into anonymous field if it has a field by the name.
- if (!field_record_ty.hasField(p.comp, target_name)) continue;
+ if (!field_record_ty.hasField(p.comp, target_name)) {
+ field_index += 1;
+ continue;
+ }
try index_list.append(gpa, field_index);
cur_il = try il.find(gpa, field_index);
record_ty = field_record_ty;
@@ -4983,31 +5002,31 @@ fn assembly(p: *Parser, kind: enum { global, decl_label, stmt }) Error!?Node.Ind
};
const l_paren = try p.expectToken(.l_paren);
- var result_node: ?Node.Index = null;
- switch (kind) {
- .decl_label => {
+ const res = switch (kind) {
+ .decl_label => blk: {
const asm_str = try p.asmStr();
const str = try p.removeNull(asm_str.val);
const attr = Attribute{ .tag = .asm_label, .args = .{ .asm_label = .{ .name = str } }, .syntax = .keyword };
try p.attr_buf.append(p.comp.gpa, .{ .attr = attr, .tok = asm_tok });
+ break :blk asm_str.node;
},
- .global => {
+ .global => blk: {
const asm_str = try p.asmStr();
try p.checkAsmStr(asm_str.val, l_paren);
- result_node = try p.addNode(.{
+ break :blk try p.addNode(.{
.global_asm = .{
.asm_tok = asm_tok,
.asm_str = asm_str.node,
},
});
},
- .stmt => result_node = try p.gnuAsmStmt(quals, asm_tok, l_paren),
- }
+ .stmt => try p.gnuAsmStmt(quals, asm_tok, l_paren),
+ };
try p.expectClosing(l_paren, .r_paren);
if (kind != .decl_label) _ = try p.expectToken(.semicolon);
- return result_node;
+ return res;
}
/// Same as stringLiteral but errors on unicode and wide string literals
@@ -5253,7 +5272,6 @@ fn stmt(p: *Parser) Error!Node.Index {
if (!goto_expr.qt.isInvalid() and !goto_expr.qt.isPointer(p.comp)) {
const result_qt = try p.comp.type_store.put(gpa, .{ .pointer = .{
.child = .{ .@"const" = true, ._index = .void },
- .decayed = null,
} });
if (!goto_expr.qt.isRealInt(p.comp)) {
try p.err(expr_tok, .incompatible_arg, .{ goto_expr.qt, result_qt });
@@ -5905,6 +5923,7 @@ const CallExpr = union(enum) {
.__builtin_reduce_xor,
.__builtin_reduce_max,
.__builtin_reduce_min,
+ .__builtin_constant_p,
=> 1,
.__builtin_complex,
@@ -5922,13 +5941,15 @@ const CallExpr = union(enum) {
.__c11_atomic_store,
.__atomic_store,
+ .__atomic_store_n,
+ .__atomic_load,
.__c11_atomic_exchange,
- .__atomic_exchange,
.__c11_atomic_fetch_add,
.__c11_atomic_fetch_sub,
.__c11_atomic_fetch_or,
.__c11_atomic_fetch_xor,
.__c11_atomic_fetch_and,
+ .__c11_atomic_fetch_nand,
.__atomic_fetch_add,
.__atomic_fetch_sub,
.__atomic_fetch_and,
@@ -5948,6 +5969,9 @@ const CallExpr = union(enum) {
.__atomic_exchange_n,
=> 3,
+ .__atomic_exchange,
+ => 4,
+
.__c11_atomic_compare_exchange_strong,
.__c11_atomic_compare_exchange_weak,
=> 5,
@@ -5964,25 +5988,13 @@ const CallExpr = union(enum) {
fn returnType(self: CallExpr, p: *Parser, args: []const Node.Index, func_qt: QualType) !QualType {
if (self == .standard) {
+ if (func_qt.isInvalid()) return .invalid;
return if (func_qt.get(p.comp, .func)) |func_ty| func_ty.return_type else .invalid;
}
const builtin = self.builtin;
const func_ty = func_qt.get(p.comp, .func).?;
return switch (builtin.expanded.tag) {
.common => |tag| switch (tag) {
- .__c11_atomic_exchange => {
- if (args.len != 4) return .invalid; // wrong number of arguments; already an error
- const second_param = args[2];
- return second_param.qt(&p.tree);
- },
- .__c11_atomic_load => {
- if (args.len != 3) return .invalid; // wrong number of arguments; already an error
- const first_param = args[1];
- const qt = first_param.qt(&p.tree);
- if (!qt.isPointer(p.comp)) return .invalid;
- return qt.childType(p.comp);
- },
-
.__atomic_fetch_add,
.__atomic_add_fetch,
.__c11_atomic_fetch_add,
@@ -6008,15 +6020,38 @@ const CallExpr = union(enum) {
.__c11_atomic_fetch_nand,
.__atomic_exchange_n,
+ .__c11_atomic_exchange,
+ => {
+ const second_param = args[1].qt(&p.tree);
+ return second_param;
+ },
+
+ .__sync_fetch_and_add,
+ .__sync_fetch_and_and,
+ .__sync_fetch_and_nand,
+ .__sync_fetch_and_or,
+ .__sync_fetch_and_sub,
+ .__sync_fetch_and_xor,
+
+ .__sync_add_and_fetch,
+ .__sync_and_and_fetch,
+ .__sync_nand_and_fetch,
+ .__sync_or_and_fetch,
+ .__sync_sub_and_fetch,
+ .__sync_xor_and_fetch,
+
+ .__sync_swap,
+ .__sync_lock_test_and_set,
+ .__sync_val_compare_and_swap,
=> {
- if (args.len != 3) return .invalid; // wrong number of arguments; already an error
- const second_param = args[2];
- return second_param.qt(&p.tree);
+ if (args.len < 2) return .invalid;
+ const second_param = args[1].qt(&p.tree);
+ return second_param;
},
.__builtin_complex => {
- if (args.len < 1) return .invalid; // not enough arguments; already an error
- const last_param = args[args.len - 1];
- return try last_param.qt(&p.tree).toComplex(p.comp);
+ const last_param = args[args.len - 1].qt(&p.tree);
+ if (last_param.isInvalid()) return .invalid;
+ return try last_param.toComplex(p.comp);
},
.__atomic_compare_exchange,
.__atomic_compare_exchange_n,
@@ -6027,9 +6062,8 @@ const CallExpr = union(enum) {
.__c11_atomic_compare_exchange_strong,
.__c11_atomic_compare_exchange_weak,
=> {
- if (args.len != 6) return .invalid; // wrong number of arguments
- const third_param = args[3];
- return third_param.qt(&p.tree);
+ const third_param = args[2].qt(&p.tree);
+ return third_param;
},
.__builtin_elementwise_abs,
@@ -6058,13 +6092,12 @@ const CallExpr = union(enum) {
.__builtin_elementwise_sub_sat,
.__builtin_elementwise_fma,
.__builtin_elementwise_popcount,
+
.__builtin_nondeterministic_value,
=> {
- if (args.len < 1) return .invalid; // not enough arguments; already an error
- const last_param = args[args.len - 1];
- return last_param.qt(&p.tree);
+ const first_param = args[0].qt(&p.tree);
+ return first_param;
},
- .__builtin_nontemporal_load,
.__builtin_reduce_add,
.__builtin_reduce_mul,
.__builtin_reduce_and,
@@ -6073,30 +6106,19 @@ const CallExpr = union(enum) {
.__builtin_reduce_max,
.__builtin_reduce_min,
=> {
- if (args.len < 1) return .invalid; // not enough arguments; already an error
- const last_param = args[args.len - 1];
- return last_param.qt(&p.tree).childType(p.comp);
+ const first_param = args[0].qt(&p.tree);
+ if (first_param.isInvalid()) return .invalid;
+ const vector_ty = first_param.get(p.comp, .vector) orelse return .invalid;
+ return vector_ty.elem;
},
- .__sync_add_and_fetch,
- .__sync_and_and_fetch,
- .__sync_fetch_and_add,
- .__sync_fetch_and_and,
- .__sync_fetch_and_nand,
- .__sync_fetch_and_or,
- .__sync_fetch_and_sub,
- .__sync_fetch_and_xor,
- .__sync_lock_test_and_set,
- .__sync_nand_and_fetch,
- .__sync_or_and_fetch,
- .__sync_sub_and_fetch,
- .__sync_swap,
- .__sync_xor_and_fetch,
- .__sync_val_compare_and_swap,
.__atomic_load_n,
+ .__c11_atomic_load,
+ .__builtin_nontemporal_load,
=> {
- if (args.len < 1) return .invalid; // not enough arguments; already an error
- const first_param = args[0];
- return first_param.qt(&p.tree).childType(p.comp);
+ const first_param = args[0].qt(&p.tree);
+ if (first_param.isInvalid()) return .invalid;
+ if (!first_param.isPointer(p.comp)) return .invalid;
+ return first_param.childType(p.comp);
},
else => func_ty.return_type,
},
@@ -6104,9 +6126,16 @@ const CallExpr = union(enum) {
};
}
- fn finish(self: CallExpr, p: *Parser, func_qt: QualType, list_buf_top: usize, l_paren: TokenIndex) Error!Result {
+ fn finish(
+ self: CallExpr,
+ p: *Parser,
+ func_qt: QualType,
+ list_buf_top: usize,
+ l_paren: TokenIndex,
+ args_ok: bool,
+ ) Error!Result {
const args = p.list_buf.items[list_buf_top..];
- const return_qt = try self.returnType(p, args, func_qt);
+ const return_qt: QualType = if (args_ok) try self.returnType(p, args, func_qt) else .invalid;
switch (self) {
.standard => |func_node| return .{
.qt = return_qt,
@@ -6118,7 +6147,7 @@ const CallExpr = union(enum) {
} }),
},
.builtin => |builtin| return .{
- .val = try evalBuiltin(builtin.expanded, p, args),
+ .val = if (args_ok) try evalBuiltin(builtin.expanded, p, args) else .{},
.qt = return_qt,
.node = try p.addNode(.{ .builtin_call_expr = .{
.builtin_tok = builtin.builtin_tok,
@@ -6283,14 +6312,12 @@ pub const Result = struct {
if (!adjusted_elem_qt.eqlQualified(a_elem, p.comp)) {
a.qt = try p.comp.type_store.put(gpa, .{ .pointer = .{
.child = adjusted_elem_qt,
- .decayed = null,
} });
try a.implicitCast(p, .bitcast, tok);
}
if (!adjusted_elem_qt.eqlQualified(b_elem, p.comp)) {
b.qt = try p.comp.type_store.put(gpa, .{ .pointer = .{
.child = adjusted_elem_qt,
- .decayed = null,
} });
try b.implicitCast(p, .bitcast, tok);
}
@@ -6478,6 +6505,7 @@ pub const Result = struct {
.add => {
// if both aren't arithmetic one should be pointer and the other an integer
if (a_sk.isPointer() == b_sk.isPointer() or a_sk.isInt() == b_sk.isInt()) return a.invalidBinTy(tok, b, p);
+ try p.boundsSafetyCheckPointerArithmetic(a.qt, b.qt, tok, a.node);
if (a_sk == .void_pointer or b_sk == .void_pointer)
try p.err(tok, .gnu_pointer_arith, .{});
@@ -6496,6 +6524,7 @@ pub const Result = struct {
.sub => {
// if both aren't arithmetic then either both should be pointers or just the left one.
if (!a_sk.isPointer() or !(b_sk.isPointer() or b_sk.isInt())) return a.invalidBinTy(tok, b, p);
+ try p.boundsSafetyCheckPointerArithmetic(a.qt, b.qt, tok, a.node);
if (a_sk == .void_pointer)
try p.err(tok, .gnu_pointer_arith, .{});
@@ -7087,14 +7116,14 @@ pub const Result = struct {
} else if (dest_sk.isPointer()) {
if (src_sk.isPointer()) {
cast_kind = .bitcast;
+ } else if (src_sk == .bool) {
+ cast_kind = .bool_to_pointer;
} else if (src_sk.isInt()) {
if (!src_sk.isReal()) {
res.qt = res.qt.toReal(p.comp);
try res.implicitCast(p, .complex_int_to_real, l_paren);
}
cast_kind = .int_to_pointer;
- } else if (src_sk == .bool) {
- cast_kind = .bool_to_pointer;
} else if (res.qt.is(p.comp, .array)) {
cast_kind = .array_to_pointer;
} else if (res.qt.is(p.comp, .func)) {
@@ -7497,7 +7526,16 @@ fn issueDeclaredConstHereNote(p: *Parser, decl_ref: Tree.Node.DeclRef, var_name:
try p.err(location, .declared_const_here, .{var_name});
}
-fn issueConstAssignmetDiagnostics(p: *Parser, node_idx: Node.Index, tok: TokenIndex) Compilation.Error!void {
+fn issueBoundsDeclaredHereNote(p: *Parser, decl_ref: Tree.Node.DeclRef, var_name: []const u8, bounds: Type.Pointer.Bounds) Compilation.Error!void {
+ const location = switch (decl_ref.decl.get(&p.tree)) {
+ .variable => |variable| variable.name_tok,
+ .param => |param| param.name_tok,
+ else => return,
+ };
+ try p.err(location, .pointer_bounds_declared_here, .{ var_name, @tagName(bounds) });
+}
+
+fn issueConstAssignmentDiagnostics(p: *Parser, node_idx: Node.Index, tok: TokenIndex) Compilation.Error!void {
if (p.unwrapNestedOperation(node_idx)) |unwrapped| {
const name = p.tokSlice(unwrapped.name_tok);
try p.err(tok, .const_var_assignment, .{ name, unwrapped.qt });
@@ -7530,7 +7568,7 @@ fn assignExpr(p: *Parser) Error!?Result {
var is_const: bool = undefined;
if (!p.tree.isLvalExtra(lhs.node, &is_const) or is_const) {
- try p.issueConstAssignmetDiagnostics(lhs.node, tok);
+ try p.issueConstAssignmentDiagnostics(lhs.node, tok);
lhs.qt = .invalid;
}
@@ -8226,7 +8264,7 @@ fn builtinChooseExpr(p: *Parser) Error!Result {
return cond;
}
-/// vaStart : __builtin_va_arg '(' assignExpr ',' typeName ')'
+/// vaArg : __builtin_va_arg '(' assignExpr ',' typeName ')'
fn builtinVaArg(p: *Parser, builtin_tok: TokenIndex) Error!Result {
const l_paren = try p.expectToken(.l_paren);
const va_list_tok = p.tok_i;
@@ -8258,6 +8296,62 @@ fn builtinVaArg(p: *Parser, builtin_tok: TokenIndex) Error!Result {
};
}
+/// vaArgPack : __builtin_va_arg_pack '(' ')'
+fn builtinVaArgPack(p: *Parser, builtin_tok: TokenIndex) Error!Result {
+ const l_paren = try p.expectToken(.l_paren);
+ try p.expectClosing(l_paren, .r_paren);
+
+ var res_qt: QualType = .invalid;
+ if (!try p.checkVaPackFunc(builtin_tok, "__builtin_va_arg_pack")) {
+ // Only add one error.
+ } else if (!p.va_arg_pack_ctx.valid) {
+ try p.err(builtin_tok, .va_pack_non_call, .{});
+ } else if (!p.va_arg_pack_ctx.variadic) {
+ try p.err(builtin_tok, .va_pack_non_variadic_call, .{});
+ } else if (p.va_arg_pack_ctx.typed) {
+ try p.err(builtin_tok, .va_pack_non_variadic_arg, .{});
+ } else {
+ res_qt = .void;
+ }
+ return .{
+ .qt = res_qt,
+ .node = try p.addNode(.{
+ .builtin_va_arg_pack = .{ .builtin_tok = builtin_tok },
+ }),
+ };
+}
+
+/// vaArgPackLen : __builtin_va_arg_pack_len '(' ')'
+fn builtinVaArgPackLen(p: *Parser, builtin_tok: TokenIndex) Error!Result {
+ const l_paren = try p.expectToken(.l_paren);
+ try p.expectClosing(l_paren, .r_paren);
+
+ _ = try p.checkVaPackFunc(builtin_tok, "__builtin_va_arg_pack_len");
+
+ return .{
+ .qt = .int,
+ .node = try p.addNode(.{
+ .builtin_va_arg_pack_len = .{
+ .builtin_tok = builtin_tok,
+ },
+ }),
+ };
+}
+
+fn checkVaPackFunc(p: *Parser, builtin_tok: TokenIndex, va_func_name: []const u8) !bool {
+ const func_qt, _ = (try p.checkVaFunc(builtin_tok, va_func_name)) orelse return false;
+
+ var it = Attribute.Iterator.initType(func_qt, p.comp);
+ while (it.next()) |item| switch (item[0].tag) {
+ .always_inline, .gnu_inline => break,
+ else => {},
+ } else {
+ try p.err(builtin_tok, .va_func_not_always_inline, .{va_func_name});
+ return false;
+ }
+ return true;
+}
+
const OffsetKind = enum { bits, bytes };
/// offsetof
@@ -8504,7 +8598,6 @@ fn unExpr(p: *Parser) Error!?Result {
operand.qt = try p.comp.type_store.put(gpa, .{ .pointer = .{
.child = operand.qt,
- .decayed = null,
} });
}
if (p.getNode(operand.node, .decl_ref_expr)) |decl_ref| {
@@ -8596,6 +8689,9 @@ fn unExpr(p: *Parser) Error!?Result {
try p.err(tok, .not_assignable, .{});
return error.ParsingFailed;
}
+ if (operand.qt.get(p.comp, .pointer)) |pointer| {
+ try p.checkPtrArithmeticAllowed(pointer, p.tok_i, operand.node);
+ }
try operand.usualUnaryConversion(p, tok);
if (operand.val.is(.int, p.comp) or operand.val.is(.int, p.comp)) {
@@ -8624,6 +8720,9 @@ fn unExpr(p: *Parser) Error!?Result {
try p.err(tok, .not_assignable, .{});
return error.ParsingFailed;
}
+ if (operand.qt.get(p.comp, .pointer)) |pointer| {
+ try p.checkPtrArithmeticAllowed(pointer, p.tok_i, operand.node);
+ }
try operand.usualUnaryConversion(p, tok);
if (operand.val.is(.int, p.comp) or operand.val.is(.int, p.comp)) {
@@ -8826,7 +8925,7 @@ fn unExpr(p: *Parser) Error!?Result {
} else switch (p.comp.langopts.emulate) {
.msvc => {}, // Doesn't support `_Complex` or `__imag` in the first place
.gcc => operand.val = .zero,
- .clang => {
+ .clang, .no => {
if (operand.val.is(.int, p.comp) or operand.val.is(.float, p.comp)) {
operand.val = .zero;
} else {
@@ -8886,7 +8985,7 @@ fn compoundLiteral(p: *Parser, qt_opt: ?QualType, opt_l_paren: ?TokenIndex) Erro
try p.err(tok, .invalid_compound_literal_storage_class, .{@tagName(d.storage_class)});
d.storage_class = .none;
},
- .register => if (p.func.qt == null) try p.err(p.tok_i, .illegal_storage_on_global, .{}),
+ .register => if (p.func.qt == null) try p.err(p.tok_i, .register_on_global_compound_literal, .{}),
else => {},
}
@@ -8968,6 +9067,9 @@ fn suffixExpr(p: *Parser, lhs: Result) Error!?Result {
try p.err(p.tok_i, .not_assignable, .{});
return error.ParsingFailed;
}
+ if (operand.qt.get(p.comp, .pointer)) |pointer| {
+ try p.checkPtrArithmeticAllowed(pointer, p.tok_i, operand.node);
+ }
try operand.usualUnaryConversion(p, p.tok_i);
try operand.un(p, .post_inc_expr, p.tok_i);
@@ -8989,6 +9091,9 @@ fn suffixExpr(p: *Parser, lhs: Result) Error!?Result {
try p.err(p.tok_i, .not_assignable, .{});
return error.ParsingFailed;
}
+ if (operand.qt.get(p.comp, .pointer)) |pointer| {
+ try p.checkPtrArithmeticAllowed(pointer, p.tok_i, operand.node);
+ }
try operand.usualUnaryConversion(p, p.tok_i);
try operand.un(p, .post_dec_expr, p.tok_i);
@@ -9003,6 +9108,7 @@ fn suffixExpr(p: *Parser, lhs: Result) Error!?Result {
const array_before_conversion = lhs;
const index_before_conversion = index;
var ptr = lhs;
+
try ptr.lvalConversion(p, l_bracket);
try index.lvalConversion(p, l_bracket);
if (ptr.qt.get(p.comp, .pointer)) |pointer_ty| {
@@ -9176,14 +9282,7 @@ fn checkVaStartArg(p: *Parser, builtin_tok: TokenIndex, first_after: TokenIndex,
return error.ParsingFailed;
}
- const func_qt = p.func.qt orelse {
- try p.err(builtin_tok, .va_start_not_in_func, .{});
- return;
- };
- const func_ty = func_qt.get(p.comp, .func) orelse return;
- if (func_ty.kind != .variadic or func_ty.params.len == 0) {
- return p.err(builtin_tok, .va_start_fixed_args, .{});
- }
+ _, const func_ty = (try p.checkVaFunc(builtin_tok, "va_start")) orelse return;
const last_param_name = func_ty.params[func_ty.params.len - 1].name;
const decl_ref = p.getNode(arg.node, .decl_ref_expr);
if (decl_ref == null or last_param_name != try p.comp.internString(p.tokSlice(decl_ref.?.name_tok))) {
@@ -9191,6 +9290,19 @@ fn checkVaStartArg(p: *Parser, builtin_tok: TokenIndex, first_after: TokenIndex,
}
}
+fn checkVaFunc(p: *Parser, builtin_tok: TokenIndex, va_func_name: []const u8) !?struct { QualType, Type.Func } {
+ const func_qt = p.func.qt orelse {
+ try p.err(builtin_tok, .va_func_not_in_func, .{va_func_name});
+ return null;
+ };
+ const func_ty = func_qt.get(p.comp, .func) orelse return null;
+ if (func_ty.kind != .variadic or func_ty.params.len == 0) {
+ try p.err(builtin_tok, .va_func_fixed_args, .{va_func_name});
+ return null;
+ }
+ return .{ func_qt, func_ty };
+}
+
fn checkArithOverflowArg(p: *Parser, builtin_tok: TokenIndex, first_after: TokenIndex, param_tok: TokenIndex, arg: *Result, idx: u32) !void {
_ = builtin_tok;
_ = first_after;
@@ -9320,7 +9432,7 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result {
// We cannot refer to the function type here because the pointer to
// type_store.extra might get invalidated while parsing args.
- const func_qt, const params_len, const func_kind = blk: {
+ const func_qt, const typed_params_len, const func_kind_base = blk: {
var base_qt = lhs.qt;
if (base_qt.get(p.comp, .pointer)) |pointer_ty| base_qt = pointer_ty.child;
if (base_qt.isInvalid()) break :blk .{ base_qt, std.math.maxInt(usize), undefined };
@@ -9343,9 +9455,44 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result {
const call_expr = CallExpr.init(p, lhs.node, func.node);
+ const param_len_override = call_expr.paramCountOverride();
+ const params_len = param_len_override orelse typed_params_len;
+ const func_kind = if (param_len_override != null) .normal else func_kind_base;
+
while (p.eatToken(.r_paren) == null) {
const param_tok = p.tok_i;
if (arg_count == params_len) first_after = p.tok_i;
+
+ // Check for __builtin_va_arg_pack
+ {
+ var i = p.tok_i;
+ loop: switch (p.tok_ids[i]) {
+ .l_paren => {
+ i += 1;
+ continue :loop p.tok_ids[i];
+ },
+ .identifier => if (mem.eql(u8, p.tokSlice(i), "__builtin_va_arg_pack")) {
+ @branchHint(.cold);
+ p.va_arg_pack_ctx = .{
+ .valid = true,
+ .variadic = func_kind != .normal,
+ .typed = arg_count < typed_params_len,
+ };
+ defer p.va_arg_pack_ctx = .{};
+
+ const arg = try p.expect(assignExpr);
+ try p.list_buf.append(gpa, arg.node);
+ arg_count += 1;
+ if (p.eatToken(.comma)) |_| {
+ try p.err(i, .va_pack_non_final_arg, .{});
+ continue;
+ }
+ try p.expectClosing(l_paren, .r_paren);
+ break;
+ },
+ else => {},
+ }
+ }
var arg = try p.expect(assignExpr);
if (call_expr.shouldPerformLvalConversion(arg_count)) {
@@ -9353,7 +9500,7 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result {
}
if ((arg.qt.hasIncompleteSize(p.comp) and !arg.qt.is(p.comp, .void)) or arg.qt.isInvalid()) return error.ParsingFailed;
- if (arg_count >= params_len) {
+ if (arg_count >= typed_params_len) {
if (call_expr.shouldPromoteVarArg(arg_count)) switch (arg.qt.base(p.comp).type) {
.int => |int_ty| if (int_ty == .int) try arg.castToInt(p, arg.qt.promoteInt(p.comp), param_tok),
.float => |float_ty| if (float_ty == .double) try arg.castToFloat(p, .double, param_tok),
@@ -9407,19 +9554,23 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result {
}
if (func_qt.isInvalid()) {
// Skip argument count checks.
- return try call_expr.finish(p, func_qt, list_buf_top, l_paren);
+ return try call_expr.finish(p, func_qt, list_buf_top, l_paren, false);
}
- if (call_expr.paramCountOverride()) |expected| {
- if (expected != arg_count) {
- try p.err(first_after, .expected_arguments, .{ expected, arg_count });
- }
- } else switch (func_kind) {
+ const r_paren = p.tok_i - 1;
+ var args_ok = true;
+ switch (func_kind) {
.normal => if (params_len != arg_count) {
- try p.err(first_after, .expected_arguments, .{ params_len, arg_count });
+ try p.err(
+ if (arg_count < params_len) r_paren else first_after,
+ .expected_arguments,
+ .{ params_len, arg_count },
+ );
+ args_ok = false;
},
.variadic => if (arg_count < params_len) {
- try p.err(first_after, .expected_at_least_arguments, .{ params_len, arg_count });
+ try p.err(r_paren, .expected_at_least_arguments, .{ params_len, arg_count });
+ args_ok = false;
},
.old_style => if (params_len != arg_count) {
if (params_len == 0)
@@ -9429,10 +9580,60 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result {
},
}
- return try call_expr.finish(p, func_qt, list_buf_top, l_paren);
+ return try call_expr.finish(p, func_qt, list_buf_top, l_paren, args_ok);
+}
+
+fn boundsSafetyCheckArrayAccess(p: *Parser, lhs: Result, rhs: Result, l_bracket: TokenIndex) !void {
+ if (!p.comp.hasClangStyleBoundsSafety()) return;
+
+ const ptr_res, const pointer, const index = if (lhs.qt.get(p.comp, .pointer)) |pointer| .{ lhs, pointer, rhs } else .{ rhs, rhs.qt.get(p.comp, .pointer).?, lhs };
+
+ switch (pointer.bounds) {
+ .c, .unsafe_indexable => {},
+ .single => {
+ if (!index.val.isZero(p.comp)) {
+ try p.err(l_bracket, .single_requires_zero_index, .{});
+ if (p.unwrapNestedOperation(ptr_res.node)) |unwrapped| {
+ const name = p.tokSlice(unwrapped.name_tok);
+ try p.issueBoundsDeclaredHereNote(unwrapped, name, pointer.bounds);
+ }
+ }
+ },
+ }
+}
+
+fn boundsSafetyCheckPointerArithmetic(p: *Parser, lhs: QualType, rhs: QualType, tok: TokenIndex, node: Tree.Node.Index) !void {
+ if (!p.comp.hasClangStyleBoundsSafety()) return;
+
+ const pointer = if (rhs.isInt(p.comp))
+ lhs.get(p.comp, .pointer) orelse return
+ else if (lhs.isInt(p.comp))
+ rhs.get(p.comp, .pointer) orelse return
+ else
+ return;
+
+ try p.checkPtrArithmeticAllowed(pointer, tok, node);
+}
+
+fn checkPtrArithmeticAllowed(p: *Parser, pointer: Type.Pointer, tok: TokenIndex, node: Tree.Node.Index) !void {
+ if (!p.comp.hasClangStyleBoundsSafety()) return;
+
+ switch (pointer.bounds) {
+ .c, .unsafe_indexable => {},
+ .single => {
+ // clang issues this diagnostic even with a constant `0` operand
+ try p.err(tok, .pointer_arith_single, .{});
+ if (p.unwrapNestedOperation(node)) |unwrapped| {
+ const name = p.tokSlice(unwrapped.name_tok);
+ try p.issueBoundsDeclaredHereNote(unwrapped, name, pointer.bounds);
+ }
+ },
+ }
}
fn checkArrayBounds(p: *Parser, index: Result, array: Result, tok: TokenIndex) !void {
+ try p.boundsSafetyCheckArrayAccess(array, index, tok);
+
if (index.val.opt_ref == .none) return;
const array_len = array.qt.arrayLen(p.comp) orelse return;
@@ -9579,6 +9780,8 @@ fn primaryExpr(p: *Parser) Error!?Result {
.common => |tag| switch (tag) {
.__builtin_choose_expr => return try p.builtinChooseExpr(),
.__builtin_va_arg => return try p.builtinVaArg(name_tok),
+ .__builtin_va_arg_pack => return try p.builtinVaArgPack(name_tok),
+ .__builtin_va_arg_pack_len => return try p.builtinVaArgPackLen(name_tok),
.__builtin_offsetof => return try p.builtinOffsetof(name_tok, .bytes),
.__builtin_bitoffsetof => return try p.builtinOffsetof(name_tok, .bits),
.__builtin_types_compatible_p => return try p.typesCompatible(name_tok),
@@ -9720,7 +9923,7 @@ fn primaryExpr(p: *Parser) Error!?Result {
qt = some.qt;
} else if (p.func.qt) |func_qt| {
var sf = std.heap.stackFallback(1024, gpa);
- var allocating: Io.Writer.Allocating = .init(sf.get());
+ var allocating: std.Io.Writer.Allocating = .init(sf.get());
defer allocating.deinit();
func_qt.printNamed(p.tokSlice(p.func.name), p.comp, &allocating.writer) catch return error.OutOfMemory;
@@ -10277,16 +10480,13 @@ fn fixedSizeInt(p: *Parser, base: u8, buf: []const u8, suffix: NumberSuffix, tok
if (res.qt.intRankOrder(suffix_qt, p.comp).compare(.lt)) continue;
const max_int = try Value.maxInt(res.qt, p.comp);
if (interned_val.compare(.lte, max_int, p.comp)) break;
- } else {
- if (p.comp.langopts.emulate == .gcc) {
- if (p.comp.target.hasInt128()) {
- res.qt = .int128;
- } else {
- res.qt = .long_long;
- }
+ } else switch (p.comp.langopts.emulate) {
+ .no, .gcc => if (p.comp.target.hasInt128()) {
+ res.qt = .int128;
} else {
- res.qt = .ulong_long;
- }
+ res.qt = .long_long;
+ },
+ .msvc, .clang => res.qt = .ulong_long,
}
res.node = try p.addNode(.{ .int_literal = .{ .qt = res.qt, .literal_tok = tok_i } });
@@ -10604,12 +10804,7 @@ fn genericSelection(p: *Parser) Error!?Result {
}
test "Node locations" {
- var arena_state: std.heap.ArenaAllocator = .init(std.testing.allocator);
- defer arena_state.deinit();
- const arena = arena_state.allocator();
-
- var diagnostics: Diagnostics = .{ .output = .ignore };
- var comp = Compilation.init(std.testing.allocator, arena, std.testing.io, &diagnostics, Io.Dir.cwd());
+ var comp = try Compilation.init(.testing);
defer comp.deinit();
const file = try comp.addSourceFromBuffer("file.c",
@@ -10621,7 +10816,7 @@ test "Node locations" {
const builtin_macros = try comp.generateBuiltinMacros(.no_system_defines);
- var pp = Preprocessor.init(&comp, .default);
+ var pp = try Preprocessor.init(&comp, .testing);
defer pp.deinit();
try pp.addBuiltinMacros();
@@ -10633,7 +10828,6 @@ test "Node locations" {
var tree = try Parser.parse(&pp);
defer tree.deinit();
- try std.testing.expectEqual(0, comp.diagnostics.total);
for (tree.root_decls.items[tree.root_decls.items.len - 3 ..], 0..) |node, i| {
const slice = tree.tokSlice(node.tok(&tree));
const expected_slice = switch (i) {
diff --git a/lib/compiler/aro/aro/Parser/Diagnostic.zig b/lib/compiler/aro/aro/Parser/Diagnostic.zig
@@ -79,9 +79,9 @@ pub const expected_integer_constant_expr: Diagnostic = .{
};
pub const missing_type_specifier: Diagnostic = .{
- .fmt = "type specifier missing, defaults to 'int'",
+ .fmt = "type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int",
.opt = .@"implicit-int",
- .kind = .warning,
+ .kind = .@"error",
};
pub const missing_type_specifier_c23: Diagnostic = .{
@@ -90,9 +90,9 @@ pub const missing_type_specifier_c23: Diagnostic = .{
};
pub const param_not_declared: Diagnostic = .{
- .fmt = "parameter '{s}' was not declared, defaults to 'int'",
+ .fmt = "parameter '{s}' was not declared, defaults to 'int'; ISO C99 and later do not support implicit int",
.opt = .@"implicit-int",
- .kind = .warning,
+ .kind = .@"error",
.extension = true,
};
@@ -216,8 +216,13 @@ pub const illegal_storage_on_func: Diagnostic = .{
.kind = .@"error",
};
-pub const illegal_storage_on_global: Diagnostic = .{
- .fmt = "illegal storage class on global variable",
+pub const auto_on_global: Diagnostic = .{
+ .fmt = "'auto' specified on global variable",
+ .kind = .@"error",
+};
+
+pub const register_on_global: Diagnostic = .{
+ .fmt = "register name not specified for global variable",
.kind = .@"error",
};
@@ -1507,13 +1512,38 @@ pub const builtin_must_be_called: Diagnostic = .{
.kind = .@"error",
};
-pub const va_start_not_in_func: Diagnostic = .{
- .fmt = "'va_start' cannot be used outside a function",
+pub const va_func_not_in_func: Diagnostic = .{
+ .fmt = "'{s}' cannot be used outside a function",
+ .kind = .@"error",
+};
+
+pub const va_func_fixed_args: Diagnostic = .{
+ .fmt = "'{s}' used in a function with fixed args",
+ .kind = .@"error",
+};
+
+pub const va_func_not_always_inline: Diagnostic = .{
+ .fmt = "'{s}' used in a function that is not always inlined",
+ .kind = .@"error",
+};
+
+pub const va_pack_non_call: Diagnostic = .{
+ .fmt = "'__va_arg_pack' used outside a call",
+ .kind = .@"error",
+};
+
+pub const va_pack_non_variadic_call: Diagnostic = .{
+ .fmt = "'__va_arg_pack' passed to non-variadic function",
+ .kind = .@"error",
+};
+
+pub const va_pack_non_variadic_arg: Diagnostic = .{
+ .fmt = "'__va_arg_pack' passed as non-variadic argument",
.kind = .@"error",
};
-pub const va_start_fixed_args: Diagnostic = .{
- .fmt = "'va_start' used in a function with fixed args",
+pub const va_pack_non_final_arg: Diagnostic = .{
+ .fmt = "'__va_arg_pack' is not the final argument",
.kind = .@"error",
};
@@ -2258,11 +2288,11 @@ pub const unterminated_char_literal_error: Diagnostic = .{
.kind = .@"error",
};
-// pub const def_no_proto_deprecated: Diagnostic = .{
-// .fmt = "a function definition without a prototype is deprecated in all versions of C and is not supported in C23",
-// .kind = .warning,
-// .opt = .@"deprecated-non-prototype",
-// };
+pub const def_no_proto_deprecated: Diagnostic = .{
+ .fmt = "a function definition without a prototype is deprecated in all versions of C and is not supported in C23",
+ .kind = .warning,
+ .opt = .@"deprecated-non-prototype",
+};
pub const passing_args_to_kr: Diagnostic = .{
.fmt = "passing arguments to a function without a prototype is deprecated in all versions of C and is not supported in C23",
@@ -2296,6 +2326,11 @@ pub const invalid_compound_literal_storage_class: Diagnostic = .{
.kind = .@"error",
};
+pub const register_on_global_compound_literal: Diagnostic = .{
+ .fmt = "file scope compound literal specifies 'register'",
+ .kind = .@"error",
+};
+
pub const identifier_not_normalized: Diagnostic = .{
.fmt = "'{normalized}' is not in NFC",
.kind = .warning,
@@ -2465,10 +2500,9 @@ pub const declared_const_here: Diagnostic = .{
.kind = .note,
};
-pub const nonnull_not_applicable: Diagnostic = .{
- .fmt = "'nonnull' attribute only applies to functions, methods, and parameters",
- .kind = .warning,
- .opt = .@"ignored-attributes",
+pub const pointer_bounds_declared_here: Diagnostic = .{
+ .fmt = "pointer '{s}' declared {s} here",
+ .kind = .note,
};
pub const mixing_decimal_floats: Diagnostic = .{
@@ -2480,3 +2514,29 @@ pub const invalid_attribute_location: Diagnostic = .{
.fmt = "{s} cannot appear here",
.kind = .@"error",
};
+
+pub const attribute_requires_pointer: Diagnostic = .{
+ .fmt = "'{s}' attribute only applies to pointer arguments",
+ .kind = .@"error",
+};
+
+pub const single_requires_zero_index: Diagnostic = .{
+ .fmt = "array subscript on single pointer must use a constant index of 0 to be in bounds",
+ .kind = .@"error",
+};
+
+pub const pointer_arith_single: Diagnostic = .{
+ .fmt = "pointer arithmetic on single pointer is out of bounds; consider adding '__counted_by'",
+ .kind = .@"error",
+};
+
+pub const redundant_bounds_annotation: Diagnostic = .{
+ .fmt = "pointer annotated with {s} multiple times. Annotate only once to remove this warning",
+ .kind = .warning,
+ .opt = .@"bounds-attributes-redundant",
+};
+
+pub const multiple_bounds_annotations: Diagnostic = .{
+ .fmt = "pointer cannot have more than one bound attribute",
+ .kind = .@"error",
+};
diff --git a/lib/compiler/aro/aro/Preprocessor.zig b/lib/compiler/aro/aro/Preprocessor.zig
@@ -1,6 +1,6 @@
const std = @import("std");
-const Io = std.Io;
const mem = std.mem;
+const path = std.Io.Dir.path;
const Allocator = mem.Allocator;
const assert = std.debug.assert;
@@ -79,12 +79,15 @@ pub const Macro = struct {
});
const Object = enum {
+ base_file,
file,
+ file_basename,
line,
counter,
date,
time,
timestamp,
+ include_level,
};
const Func = enum {
@@ -216,8 +219,6 @@ pub const Macro = struct {
}
};
-const Preprocessor = @This();
-
const ExpansionEntry = struct {
idx: Tree.TokenIndex,
locs: [*]Source.Location,
@@ -228,6 +229,8 @@ const TokenState = struct {
expansion_entries_len: usize,
};
+const Preprocessor = @This();
+
comp: *Compilation,
diagnostics: *Diagnostics,
@@ -275,6 +278,12 @@ m_times: std.AutoHashMapUnmanaged(Source.Id, u64) = .empty,
/// The dependency file tracking all includes and embeds.
dep_file: ?*DepFile = null,
+/// Path prefixes to replace when expanding __FILE__
+path_replacements: []const struct { []const u8, []const u8 } = &.{},
+
+/// File used for __BASE_FILE__ macro.
+base_file: Source.Id,
+
pub const parse = Parser.parse;
pub const Linemarkers = enum {
@@ -286,21 +295,22 @@ pub const Linemarkers = enum {
numeric_directives,
};
-pub fn init(comp: *Compilation, source_epoch: SourceEpoch) Preprocessor {
- const pp: Preprocessor = .{
- .comp = comp,
- .diagnostics = comp.diagnostics,
- .arena = .init(comp.gpa),
- .hideset = .{ .comp = comp },
- .source_epoch = source_epoch,
+pub const InitOptions = struct {
+ base_file: Source.Id,
+
+ source_epoch: ?SourceEpoch = null,
+ add_builtin_macros: bool = true,
+ path_replacements: []const struct { []const u8, []const u8 } = &.{},
+
+ pub const testing: InitOptions = .{
+ .base_file = undefined,
+ .source_epoch = .default,
+ .add_builtin_macros = false,
};
- comp.pragmaEvent(.before_preprocess);
- return pp;
-}
+};
-/// Initialize Preprocessor with builtin macros.
-pub fn initDefault(comp: *Compilation) !Preprocessor {
- const source_epoch: SourceEpoch = comp.environment.sourceEpoch(comp.io) catch |er| switch (er) {
+pub fn init(comp: *Compilation, options: InitOptions) !Preprocessor {
+ const source_epoch: SourceEpoch = options.source_epoch orelse comp.environment.sourceEpoch(comp.io) catch |er| switch (er) {
error.InvalidEpoch => blk: {
const diagnostic: Diagnostic = .invalid_source_epoch;
try comp.diagnostics.add(.{ .text = diagnostic.fmt, .kind = diagnostic.kind, .opt = diagnostic.opt, .location = null });
@@ -308,9 +318,18 @@ pub fn initDefault(comp: *Compilation) !Preprocessor {
},
};
- var pp = init(comp, source_epoch);
+ var pp: Preprocessor = .{
+ .comp = comp,
+ .diagnostics = comp.diagnostics,
+ .arena = .init(comp.gpa),
+ .hideset = .{ .comp = comp },
+ .source_epoch = source_epoch,
+ .base_file = options.base_file,
+ .path_replacements = options.path_replacements,
+ };
errdefer pp.deinit();
- try pp.addBuiltinMacros();
+ comp.pragmaEvent(.before_preprocess);
+ if (options.add_builtin_macros) try pp.addBuiltinMacros();
return pp;
}
@@ -339,7 +358,7 @@ pub fn addBuiltinMacros(pp: *Preprocessor) !void {
try pp.addBuiltinMacro("__is_identifier", .{ .func = .is_identifier });
try pp.addBuiltinMacro("_Pragma", .{ .func = .pragma_operator });
- if (pp.comp.langopts.emulate == .clang) {
+ if (pp.comp.langopts.emulate == .no or pp.comp.langopts.emulate == .clang) {
try pp.addBuiltinMacro("__is_target_arch", .{ .func = .is_target_arch });
try pp.addBuiltinMacro("__is_target_vendor", .{ .func = .is_target_vendor });
try pp.addBuiltinMacro("__is_target_os", .{ .func = .is_target_os });
@@ -359,6 +378,12 @@ pub fn addBuiltinMacros(pp: *Preprocessor) !void {
try pp.addBuiltinMacro("__DATE__", .{ .obj = .date });
try pp.addBuiltinMacro("__TIME__", .{ .obj = .time });
try pp.addBuiltinMacro("__TIMESTAMP__", .{ .obj = .timestamp });
+
+ if (pp.comp.langopts.emulate == .no or pp.comp.langopts.emulate == .clang) {
+ try pp.addBuiltinMacro("__BASE_FILE__", .{ .obj = .base_file });
+ try pp.addBuiltinMacro("__FILE_NAME__", .{ .obj = .file_basename });
+ try pp.addBuiltinMacro("__INCLUDE_LEVEL__", .{ .obj = .include_level });
+ }
}
pub fn deinit(pp: *Preprocessor) void {
@@ -395,7 +420,7 @@ fn mTime(pp: *Preprocessor, source_id: Source.Id) !u64 {
return gop.value_ptr.*;
}
-pub fn expansionSlice(pp: *Preprocessor, tok: Tree.TokenIndex) []Source.Location {
+pub fn expansionSlice(pp: *const Preprocessor, tok: Tree.TokenIndex) []Source.Location {
const S = struct {
fn orderTokenIndex(context: Tree.TokenIndex, item: Tree.TokenIndex) std.math.Order {
return std.math.order(context, item);
@@ -1065,13 +1090,11 @@ fn fatalNotFound(pp: *Preprocessor, tok: TokenWithExpansionLocs, filename: []con
fn verboseLog(pp: *Preprocessor, raw: RawToken, comptime fmt: []const u8, args: anytype) void {
@branchHint(.cold);
- const comp = pp.comp;
- const io = comp.io;
- const source = comp.getSource(raw.source);
+ const source = pp.comp.getSource(raw.source);
const line_col = source.lineCol(.{ .id = raw.source, .line = raw.line, .byte_offset = raw.start });
var stderr_buf: [4096]u8 = undefined;
- var stderr = Io.File.stderr().writer(io, &stderr_buf);
+ var stderr = std.Io.File.stderr().writer(pp.comp.io, &stderr_buf);
const w = &stderr.interface;
w.print("{s}:{d}:{d}: ", .{ source.path, line_col.line_no, line_col.col }) catch return;
@@ -1435,7 +1458,37 @@ fn expandObjMacro(pp: *Preprocessor, simple_macro: *const Macro) Error!ExpandBuf
.file => {
const start = pp.comp.generated_buf.items.len;
const source = pp.comp.getSource(pp.expansion_source_loc.id);
- try pp.comp.generated_buf.print(gpa, "\"{f}\"\n", .{fmtEscapes(source.path)});
+ for (pp.path_replacements) |replacement| {
+ if (mem.cutPrefix(u8, source.path, replacement[0])) |rest| {
+ try pp.comp.generated_buf.print(gpa, "\"{f}{f}\"", .{ fmtEscapes(replacement[1]), fmtEscapes(rest) });
+ break;
+ }
+ } else {
+ try pp.comp.generated_buf.print(gpa, "\"{f}\"\n", .{fmtEscapes(source.path)});
+ }
+
+ buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .string_literal, tok));
+ },
+ .base_file => {
+ try pp.err(pp.expansion_source_loc, .base_file_is_clang_extension, .{});
+ const start = pp.comp.generated_buf.items.len;
+ const base_file = pp.comp.getSource(pp.base_file);
+ for (pp.path_replacements) |replacement| {
+ if (mem.cutPrefix(u8, base_file.path, replacement[0])) |rest| {
+ try pp.comp.generated_buf.print(gpa, "\"{f}{f}\"", .{ fmtEscapes(replacement[1]), fmtEscapes(rest) });
+ }
+ } else {
+ try pp.comp.generated_buf.print(gpa, "\"{f}\"", .{fmtEscapes(base_file.path)});
+ }
+
+ buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .string_literal, tok));
+ },
+ .file_basename => {
+ try pp.err(pp.expansion_source_loc, .file_name_is_clang_extension, .{});
+ const start = pp.comp.generated_buf.items.len;
+ const source = pp.comp.getSource(pp.expansion_source_loc.id);
+ const basename = path.basename(source.path);
+ try pp.comp.generated_buf.print(gpa, "\"{f}\"", .{fmtEscapes(basename)});
buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .string_literal, tok));
},
@@ -1472,6 +1525,13 @@ fn expandObjMacro(pp: *Preprocessor, simple_macro: *const Macro) Error!ExpandBuf
try pp.writeDateTimeStamp(.fromBuiltin(builtin_kind), timestamp);
buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .string_literal, tok));
},
+ .include_level => {
+ try pp.err(pp.expansion_source_loc, .include_level_is_clang_extension, .{});
+ const start = pp.comp.generated_buf.items.len;
+ try pp.comp.generated_buf.print(gpa, "{d}\n", .{pp.include_depth});
+
+ buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .pp_num, tok));
+ },
},
else => buf.appendAssumeCapacity(tok),
}
@@ -1828,7 +1888,11 @@ fn handleBuiltinMacro(pp: *Preprocessor, builtin: Macro.Builtin.Func, param_toks
features.hasFeature(pp.comp, ident_str)
else
features.hasExtension(pp.comp, ident_str),
- .has_builtin => Builtins.fromName(pp.comp, ident_str) != null or (pp.comp.langopts.emulate == .clang and Macro.Builtin.has_builtin_special_cases.has(ident_str)),
+
+ .has_builtin => Builtins.fromName(pp.comp, ident_str) != null or
+ ((pp.comp.langopts.emulate == .no or pp.comp.langopts.emulate == .clang) and
+ Macro.Builtin.has_builtin_special_cases.has(ident_str)),
+
.is_target_arch => pp.comp.isTargetArch(ident_str),
.is_target_os => pp.comp.isTargetOs(ident_str),
.is_target_vendor => pp.comp.isTargetVendor(ident_str),
@@ -1972,7 +2036,7 @@ fn expandFuncMacro(
},
.macro_param_no_expand => {
if (tok_i + 1 < func_macro.tokens.len and func_macro.tokens[tok_i + 1].id == .hash_hash) {
- hideset = pp.hideset.get(tokFromRaw(func_macro.tokens[tok_i + 1]).loc);
+ hideset = .none;
}
const slice = getPasteArgs(args.items[raw.end]);
const raw_loc = Source.Location{ .id = raw.source, .byte_offset = raw.start, .line = raw.line };
@@ -1980,7 +2044,7 @@ fn expandFuncMacro(
},
.macro_param => {
if (tok_i + 1 < func_macro.tokens.len and func_macro.tokens[tok_i + 1].id == .hash_hash) {
- hideset = pp.hideset.get(tokFromRaw(func_macro.tokens[tok_i + 1]).loc);
+ hideset = .none;
}
const arg = expanded_args.items[raw.end];
const raw_loc = Source.Location{ .id = raw.source, .byte_offset = raw.start, .line = raw.line };
@@ -2330,9 +2394,10 @@ fn expandFuncMacro(
for (buf.items) |*tok| {
try tok.addExpansionLocation(gpa, &.{macro_tok.loc});
try tok.addExpansionLocation(gpa, macro_expansion_locs);
- const tok_hidelist = pp.hideset.get(tok.loc);
- const new_hidelist = try pp.hideset.@"union"(tok_hidelist, hideset);
- try pp.hideset.put(tok.loc, new_hidelist);
+ if (tok.id.shouldTrackHideset(.func)) {
+ const new_hideset = try pp.hideset.@"union"(pp.hideset.get(tok.loc), hideset);
+ try pp.hideset.put(tok.loc, new_hideset);
+ }
}
return buf;
@@ -2698,9 +2763,10 @@ fn expandMacroExhaustive(
try tok.addExpansionLocation(gpa, &.{macro_tok.loc});
try tok.addExpansionLocation(gpa, macro_expansion_locs);
- const tok_hidelist = pp.hideset.get(tok.loc);
- const new_hidelist = try pp.hideset.@"union"(tok_hidelist, hs);
- try pp.hideset.put(tok.loc, new_hidelist);
+ if (tok.id.shouldTrackHideset(.obj)) {
+ const new_hideset = try pp.hideset.@"union"(pp.hideset.get(tok.loc), hs);
+ try pp.hideset.put(tok.loc, new_hideset);
+ }
if (tok.id == .keyword_defined and eval_ctx == .expr) {
if (macro.is_func) {
@@ -2914,7 +2980,10 @@ fn pasteTokens(pp: *Preprocessor, lhs_toks: *ExpandBuf, rhs_toks: []const TokenW
.placemarker
else
pasted_token.id;
- try lhs_toks.append(gpa, try pp.makeGeneratedToken(start, pasted_id, lhs));
+
+ const hideset = try pp.hideset.intersection(pp.hideset.get(lhs.loc), pp.hideset.get(rhs.loc));
+ const generated_token = try pp.makeGeneratedTokenExtra(start, pasted_id, lhs, hideset);
+ try lhs_toks.append(gpa, generated_token);
if (next.id != .nl and next.id != .eof) {
try pp.err(lhs, .pasting_formed_invalid, .{pp.comp.generated_buf.items[start..end]});
@@ -2924,7 +2993,7 @@ fn pasteTokens(pp: *Preprocessor, lhs_toks: *ExpandBuf, rhs_toks: []const TokenW
try bufCopyTokens(gpa, lhs_toks, rhs_toks[rhs_rest..], &.{});
}
-fn makeGeneratedToken(pp: *Preprocessor, start: usize, id: Token.Id, source: TokenWithExpansionLocs) !TokenWithExpansionLocs {
+fn makeGeneratedTokenExtra(pp: *Preprocessor, start: usize, id: Token.Id, source: TokenWithExpansionLocs, hideset: Hideset.Index) !TokenWithExpansionLocs {
const gpa = pp.comp.gpa;
var pasted_token = TokenWithExpansionLocs{ .id = id, .loc = .{
.id = .generated,
@@ -2934,9 +3003,15 @@ fn makeGeneratedToken(pp: *Preprocessor, start: usize, id: Token.Id, source: Tok
pp.generated_line += 1;
try pasted_token.addExpansionLocation(gpa, &.{source.loc});
try pasted_token.addExpansionLocation(gpa, source.expansionSlice());
+ try pp.hideset.put(pasted_token.loc, hideset);
+
return pasted_token;
}
+fn makeGeneratedToken(pp: *Preprocessor, start: usize, id: Token.Id, source: TokenWithExpansionLocs) !TokenWithExpansionLocs {
+ return pp.makeGeneratedTokenExtra(start, id, source, pp.hideset.get(source.loc));
+}
+
/// Defines a new macro and warns if it is a duplicate
fn defineMacro(pp: *Preprocessor, define_tok: RawToken, name_tok: TokenWithExpansionLocs, macro: Macro) Error!void {
const name_str = pp.expandedSlice(name_tok);
@@ -3898,16 +3973,14 @@ test "Preserve pragma tokens sometimes" {
const gpa = std.testing.allocator;
const Test = struct {
fn runPreprocessor(source_text: []const u8) ![]const u8 {
- var arena: std.heap.ArenaAllocator = .init(gpa);
- defer arena.deinit();
-
var diagnostics: Diagnostics = .{ .output = .ignore };
- var comp = Compilation.init(gpa, arena.allocator(), std.testing.io, &diagnostics, Io.Dir.cwd());
+ var comp = try Compilation.init(.testing);
+ comp.diagnostics = &diagnostics;
defer comp.deinit();
try comp.addDefaultPragmaHandlers();
- var pp = Preprocessor.init(&comp, .default);
+ var pp = try Preprocessor.init(&comp, .testing);
defer pp.deinit();
pp.preserve_whitespace = true;
@@ -3966,12 +4039,10 @@ test "destringify" {
try std.testing.expectEqualStrings(destringified, pp.char_buf.items);
}
};
- var arena: std.heap.ArenaAllocator = .init(gpa);
- defer arena.deinit();
- var diagnostics: Diagnostics = .{ .output = .ignore };
- var comp = Compilation.init(gpa, arena.allocator(), std.testing.io, &diagnostics, Io.Dir.cwd());
+ var comp = try Compilation.init(.testing);
defer comp.deinit();
- var pp = Preprocessor.init(&comp, .default);
+
+ var pp = try Preprocessor.init(&comp, .testing);
defer pp.deinit();
try Test.testDestringify(&pp, "hello\tworld\n", "hello\tworld\n");
@@ -4026,20 +4097,20 @@ test "Include guards" {
};
}
- fn testIncludeGuard(gpa: std.mem.Allocator, comptime template: []const u8, tok_id: RawToken.Id, expected_guards: u32) !void {
- var arena_state: std.heap.ArenaAllocator = .init(gpa);
- defer arena_state.deinit();
- const arena = arena_state.allocator();
+ fn testIncludeGuard(comptime template: []const u8, tok_id: RawToken.Id, expected_guards: u32) !void {
+ const gpa = std.testing.allocator;
var diagnostics: Diagnostics = .{ .output = .ignore };
- var comp = Compilation.init(gpa, arena, std.testing.io, &diagnostics, Io.Dir.cwd());
+ var comp = try Compilation.init(.testing);
+ comp.diagnostics = &diagnostics;
defer comp.deinit();
- var pp = Preprocessor.init(&comp, .default);
+ var pp = try Preprocessor.init(&comp, .testing);
defer pp.deinit();
- const path = try std.fs.path.join(arena, &.{ ".", "bar.h" });
+ const file_path = try path.join(gpa, &.{ ".", "bar.h" });
+ defer gpa.free(file_path);
- _ = try comp.addSourceFromBuffer(path, "int bar = 5;\n");
+ _ = try comp.addSourceFromBuffer(file_path, "int bar = 5;\n");
var buf: std.ArrayList(u8) = .empty;
defer buf.deinit(gpa);
@@ -4074,14 +4145,14 @@ test "Include guards" {
\\#endif
;
const expected_guards: u32 = if (Test.pairsWithIfndef(tag)) 0 else 1;
- try Test.testIncludeGuard(std.testing.allocator, inside_ifndef_template, tag, expected_guards);
+ try Test.testIncludeGuard(inside_ifndef_template, tag, expected_guards);
const outside_ifndef_template =
\\#ifndef FOO
\\#endif
\\#{s}{s}
;
- try Test.testIncludeGuard(std.testing.allocator, outside_ifndef_template, tag, 0);
+ try Test.testIncludeGuard(outside_ifndef_template, tag, 0);
}
}
}
diff --git a/lib/compiler/aro/aro/Preprocessor/Diagnostic.zig b/lib/compiler/aro/aro/Preprocessor/Diagnostic.zig
@@ -472,3 +472,24 @@ pub const pragma_once_in_main_file: Diagnostic = .{
.kind = .warning,
.opt = .@"pragma-once-outside-header",
};
+
+pub const file_name_is_clang_extension: Diagnostic = .{
+ .fmt = "__FILE_NAME__ is a clang extension",
+ .opt = .@"file-name-extension",
+ .kind = .off,
+ .extension = true,
+};
+
+pub const base_file_is_clang_extension: Diagnostic = .{
+ .fmt = "__BASE_FILE__ is a clang extension",
+ .opt = .@"base-file-extension",
+ .kind = .off,
+ .extension = true,
+};
+
+pub const include_level_is_clang_extension: Diagnostic = .{
+ .fmt = "__INCLUDE_LEVEL__ is a clang extension",
+ .opt = .@"include-level-extension",
+ .kind = .off,
+ .extension = true,
+};
diff --git a/lib/compiler/aro/aro/Target.zig b/lib/compiler/aro/aro/Target.zig
@@ -229,7 +229,7 @@ pub fn intMaxType(target: *const Target) QualType {
=> return .long,
.x86_64 => switch (target.os.tag) {
- .windows, .openbsd => {},
+ .windows, .openbsd, .uefi => {},
else => switch (target.abi) {
.gnux32, .muslx32 => {},
else => return .long,
@@ -546,18 +546,10 @@ pub fn systemCompiler(target: *const Target) LangOpts.Compiler {
}
pub fn hasFloat128(target: *const Target) bool {
- if (target.cpu.arch.isWasm()) return true;
if (target.os.tag.isDarwin()) return false;
- if (target.cpu.arch.isPowerPC()) return std.Target.powerpc.featureSetHas(target.cpu.features, .float128);
- return switch (target.os.tag) {
- .dragonfly,
- .haiku,
- .linux,
- .openbsd,
- .illumos,
- => target.cpu.arch.isX86(),
- else => false,
- };
+ if (target.os.tag == .windows) return false;
+ if (target.cpu.arch.isX86()) return true;
+ return target.cTypeBitSize(.longdouble) == 128;
}
pub fn hasInt128(target: *const Target) bool {
@@ -1238,6 +1230,7 @@ pub fn toLLVMTriple(target: *const Target, buf: []u8) []const u8 {
.other,
.plan9,
.vita,
+ .psp,
=> "unknown",
};
writer.writeAll(llvm_os) catch unreachable;
@@ -1356,6 +1349,18 @@ pub fn isPIEDefault(target: *const Target) DefaultPIStatus {
};
}
+pub fn ppcElfVersion(target: *const Target) u32 {
+ std.debug.assert(target.cpu.arch.isPowerPC());
+ return switch (target.cpu.arch) {
+ .powerpc64le => 2,
+ .powerpc64 => if ((target.os.isAtLeast(.freebsd, .{ .major = 13, .minor = 0, .patch = 0 }) orelse false) or target.os.tag == .openbsd or target.abi.isMusl())
+ 2
+ else
+ 1,
+ else => 1,
+ };
+}
+
pub fn isPICdefault(target: *const Target) DefaultPIStatus {
return switch (target.os.tag) {
.haiku,
diff --git a/lib/compiler/aro/aro/Tokenizer.zig b/lib/compiler/aro/aro/Tokenizer.zig
@@ -1,5 +1,4 @@
const std = @import("std");
-const Io = std.Io;
const assert = std.debug.assert;
const Compilation = @import("Compilation.zig");
@@ -891,6 +890,14 @@ pub const Token = struct {
else => false,
};
}
+
+ pub fn shouldTrackHideset(id: Id, context: enum { func, obj }) bool {
+ return switch (id) {
+ .identifier, .extended_identifier => true,
+ .r_paren => context == .func,
+ else => false,
+ };
+ }
};
/// double underscore and underscore + capital letter identifiers
@@ -938,6 +945,18 @@ pub const Token = struct {
.keyword_unaligned,
.keyword_unaligned2,
=> if (langopts.ms_extensions) kw else .identifier,
+
+ .keyword_float32,
+ .keyword_float64,
+ .keyword_float128,
+ .keyword_float32x,
+ .keyword_float64x,
+ .keyword_float128x,
+ .keyword_dfloat32,
+ .keyword_dfloat64,
+ .keyword_dfloat128,
+ .keyword_dfloat64x,
+ => if (langopts.emulate == .clang) .identifier else kw,
else => kw,
};
}
@@ -2008,11 +2027,11 @@ test "operators" {
test "keywords" {
try expectTokens(
\\auto __auto_type break case char const continue default do
- \\double else enum extern float for goto if int
- \\long register return short signed sizeof static
- \\struct switch typedef union unsigned void volatile
- \\while _Bool _Complex _Imaginary inline restrict _Alignas
- \\_Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local
+ \\double else enum extern float for goto if int
+ \\long register return short signed sizeof static
+ \\struct switch typedef union unsigned void volatile
+ \\while _Bool _Complex _Imaginary inline restrict _Alignas
+ \\_Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local
\\__attribute __attribute__
\\
, &.{
@@ -2324,13 +2343,13 @@ test "Universal character names" {
test "Tokenizer fuzz test" {
const Context = struct {
- fn testOne(_: @This(), input_bytes: []const u8) anyerror!void {
- var arena: std.heap.ArenaAllocator = .init(std.testing.allocator);
- defer arena.deinit();
- var comp = Compilation.init(std.testing.allocator, arena.allocator(), std.testing.io, undefined, Io.Dir.cwd());
+ fn testOne(_: @This(), smith: *std.testing.Smith) anyerror!void {
+ var comp = try Compilation.init(.testing);
defer comp.deinit();
- const source = try comp.addSourceFromBuffer("fuzz.c", input_bytes);
+ var buf: [256]u8 = undefined;
+ const contents_len = smith.slice(&buf);
+ const source = try comp.addSourceFromBuffer("fuzz.c", buf[0..contents_len]);
var tokenizer: Tokenizer = .{
.buf = source.buf,
@@ -2350,9 +2369,7 @@ test "Tokenizer fuzz test" {
}
fn expectTokensExtra(contents: []const u8, expected_tokens: []const Token.Id, langopts: ?LangOpts) !void {
- var arena: std.heap.ArenaAllocator = .init(std.testing.allocator);
- defer arena.deinit();
- var comp = Compilation.init(std.testing.allocator, arena.allocator(), std.testing.io, undefined, Io.Dir.cwd());
+ var comp = try Compilation.init(.testing);
defer comp.deinit();
if (langopts) |provided| {
comp.langopts = provided;
diff --git a/lib/compiler/aro/aro/Toolchain.zig b/lib/compiler/aro/aro/Toolchain.zig
@@ -495,9 +495,9 @@ pub fn addSystemIncludeDir(tc: *const Toolchain, path: []const u8) !void {
pub fn addBuiltinIncludeDir(tc: *const Toolchain) !void {
const d = tc.driver;
const comp = d.comp;
+ const io = comp.io;
const gpa = comp.gpa;
const arena = comp.arena;
- const io = comp.io;
try d.includes.ensureUnusedCapacity(gpa, 1);
if (d.resource_dir) |resource_dir| {
const path = try std.fs.path.join(arena, &.{ resource_dir, "include" });
@@ -524,14 +524,12 @@ pub fn addBuiltinIncludeDir(tc: *const Toolchain) !void {
/// Otherwise returns a slice of `buf`. If the file is larger than `buf` partial contents are returned
pub fn readFile(tc: *const Toolchain, path: []const u8, buf: []u8) ?[]const u8 {
const comp = tc.driver.comp;
- const io = comp.io;
- return comp.cwd.readFile(io, path, buf) catch null;
+ return comp.cwd.readFile(comp.io, path, buf) catch null;
}
pub fn exists(tc: *const Toolchain, path: []const u8) bool {
const comp = tc.driver.comp;
- const io = comp.io;
- comp.cwd.access(io, path, .{}) catch return false;
+ comp.cwd.access(comp.io, path, .{}) catch return false;
return true;
}
@@ -549,8 +547,7 @@ pub fn canExecute(tc: *const Toolchain, path: []const u8) bool {
}
const comp = tc.driver.comp;
- const io = comp.io;
- comp.cwd.access(io, path, .{ .execute = true }) catch return false;
+ comp.cwd.access(comp.io, path, .{ .execute = true }) catch return false;
// Todo: ensure path is not a directory
return true;
}
diff --git a/lib/compiler/aro/aro/Tree.zig b/lib/compiler/aro/aro/Tree.zig
@@ -34,7 +34,7 @@ pub const TokenWithExpansionLocs = struct {
expansion_locs: ?[*]Source.Location = null,
pub fn expansionSlice(tok: TokenWithExpansionLocs) []const Source.Location {
- const locs = tok.expansion_locs orelse return &[0]Source.Location{};
+ const locs = tok.expansion_locs orelse return &.{};
var i: usize = 0;
while (locs[i].id.index != .unused) : (i += 1) {}
return locs[0..i];
@@ -243,6 +243,8 @@ pub const Node = union(enum) {
builtin_choose_expr: Conditional,
builtin_convertvector: Convertvector,
builtin_shufflevector: Shufflevector,
+ builtin_va_arg_pack: VaArgPack,
+ builtin_va_arg_pack_len: VaArgPack,
/// C23 bool literal `true` / `false`
bool_literal: Literal,
@@ -633,6 +635,10 @@ pub const Node = union(enum) {
indexes: []const Node.Index,
};
+ pub const VaArgPack = struct {
+ builtin_tok: TokenIndex,
+ };
+
pub const Literal = struct {
literal_tok: TokenIndex,
qt: QualType,
@@ -1689,6 +1695,16 @@ pub const Node = union(enum) {
.indexes = @ptrCast(tree.extra.items[node_data[1] + 2 ..][0..node_data[2]]),
},
},
+ .builtin_va_arg_pack => .{
+ .builtin_va_arg_pack = .{
+ .builtin_tok = node_tok,
+ },
+ },
+ .builtin_va_arg_pack_len => .{
+ .builtin_va_arg_pack_len = .{
+ .builtin_tok = node_tok,
+ },
+ },
.array_init_expr_two => .{
.array_init_expr = .{
.l_brace_tok = node_tok,
@@ -1797,7 +1813,9 @@ pub const Node = union(enum) {
.global_asm,
.generic_association_expr,
.generic_default_expr,
+ .builtin_va_arg_pack,
=> null,
+ .builtin_va_arg_pack_len => .int,
.builtin_types_compatible_p => .int,
else => {
// If a node is typed the type is stored in data[0].
@@ -1963,6 +1981,8 @@ pub const Node = union(enum) {
builtin_types_compatible_p,
builtin_convertvector,
builtin_shufflevector,
+ builtin_va_arg_pack,
+ builtin_va_arg_pack_len,
array_init_expr,
array_init_expr_two,
struct_init_expr,
@@ -2789,6 +2809,14 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void {
tree.extra.appendAssumeCapacity(@intFromEnum(builtin.rhs));
tree.extra.appendSliceAssumeCapacity(@ptrCast(builtin.indexes));
},
+ .builtin_va_arg_pack => |builtin| {
+ repr.tag = .builtin_va_arg_pack;
+ repr.tok = builtin.builtin_tok;
+ },
+ .builtin_va_arg_pack_len => |builtin| {
+ repr.tag = .builtin_va_arg_pack_len;
+ repr.tok = builtin.builtin_tok;
+ },
.array_init_expr => |init| {
repr.data[0] = @bitCast(init.container_qt);
if (init.items.len > 2) {
@@ -3000,12 +3028,12 @@ pub fn tokSlice(tree: *const Tree, tok_i: TokenIndex) []const u8 {
return tree.comp.locSlice(loc);
}
-pub fn dump(tree: *const Tree, config: std.Io.tty.Config, w: *std.Io.Writer) std.Io.tty.Config.SetColorError!void {
+pub fn dump(tree: *const Tree, term: std.Io.Terminal) std.Io.Terminal.SetColorError!void {
for (tree.root_decls.items) |i| {
- try tree.dumpNode(i, 0, config, w);
- try w.writeByte('\n');
+ try tree.dumpNode(i, 0, term);
+ try term.writer.writeByte('\n');
}
- try w.flush();
+ try term.writer.flush();
}
fn dumpFieldAttributes(tree: *const Tree, attributes: []const Attribute, level: u32, w: *std.Io.Writer) !void {
@@ -3052,25 +3080,26 @@ fn dumpNode(
tree: *const Tree,
node_index: Node.Index,
level: u32,
- config: std.Io.tty.Config,
- w: *std.Io.Writer,
+ term: std.Io.Terminal,
) !void {
const delta = 2;
const half = delta / 2;
- const TYPE = std.Io.tty.Color.bright_magenta;
- const TAG = std.Io.tty.Color.bright_cyan;
- const IMPLICIT = std.Io.tty.Color.bright_blue;
- const NAME = std.Io.tty.Color.bright_red;
- const LITERAL = std.Io.tty.Color.bright_green;
- const ATTRIBUTE = std.Io.tty.Color.bright_yellow;
+ const TYPE = std.Io.Terminal.Color.bright_magenta;
+ const TAG = std.Io.Terminal.Color.bright_cyan;
+ const IMPLICIT = std.Io.Terminal.Color.bright_blue;
+ const NAME = std.Io.Terminal.Color.bright_red;
+ const LITERAL = std.Io.Terminal.Color.bright_green;
+ const ATTRIBUTE = std.Io.Terminal.Color.bright_yellow;
+
+ const w = term.writer;
const node = node_index.get(tree);
try w.splatByteAll(' ', level);
- if (config == .no_color) {
+ if (term.mode == .no_color) {
if (node.isImplicit()) try w.writeAll("implicit ");
} else {
- try config.setColor(w, if (node.isImplicit()) IMPLICIT else TAG);
+ try term.setColor(if (node.isImplicit()) IMPLICIT else TAG);
}
try w.print("{s}", .{@tagName(node)});
@@ -3078,36 +3107,36 @@ fn dumpNode(
try w.writeAll(": ");
switch (node) {
.cast => |cast| {
- try config.setColor(w, .white);
+ try term.setColor(.white);
try w.print("({s}) ", .{@tagName(cast.kind)});
},
else => {},
}
- try config.setColor(w, TYPE);
+ try term.setColor(TYPE);
try w.writeByte('\'');
try qt.dump(tree.comp, w);
try w.writeByte('\'');
}
if (tree.isLval(node_index)) {
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
try w.writeAll(" lvalue");
}
if (tree.isBitfield(node_index)) {
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
try w.writeAll(" bitfield");
}
if (node == .asm_stmt) {
const quals = node.asm_stmt.quals;
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
if (quals.@"inline") try w.writeAll(" inline");
if (quals.@"volatile") try w.writeAll(" volatile");
if (quals.goto) try w.writeAll(" goto");
}
if (tree.value_map.get(node_index)) |val| {
- try config.setColor(w, LITERAL);
+ try term.setColor(LITERAL);
try w.writeAll(" (value: ");
if (try val.print(node_index.qt(tree), tree.comp, w)) |nested| switch (nested) {
.pointer => |ptr| {
@@ -3127,15 +3156,15 @@ fn dumpNode(
try w.writeByte(')');
}
if (node == .return_stmt and node.return_stmt.operand == .implicit and node.return_stmt.operand.implicit) {
- try config.setColor(w, IMPLICIT);
+ try term.setColor(IMPLICIT);
try w.writeAll(" (value: 0)");
}
try w.writeAll("\n");
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
if (node_index.qtOrNull(tree)) |qt| {
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
var it = Attribute.Iterator.initType(qt, tree.comp);
while (it.next()) |item| {
const attr, _ = item;
@@ -3143,56 +3172,56 @@ fn dumpNode(
try w.print("attr: {s}", .{@tagName(attr.tag)});
try tree.dumpAttribute(attr, w);
}
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
}
switch (node) {
.empty_decl => {},
.global_asm => |@"asm"| {
- try tree.dumpNode(@"asm".asm_str, level + delta, config, w);
+ try tree.dumpNode(@"asm".asm_str, level + delta, term);
},
.static_assert => |assert| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("condition:\n");
- try tree.dumpNode(assert.cond, level + delta, config, w);
+ try tree.dumpNode(assert.cond, level + delta, term);
if (assert.message) |some| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("diagnostic:\n");
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
}
},
.function => |function| {
try w.splatByteAll(' ', level + half);
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
if (function.static) try w.writeAll("static ");
if (function.@"inline") try w.writeAll("inline ");
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
try w.writeAll("name: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("{s}\n", .{tree.tokSlice(function.name_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
if (function.body) |body| {
try w.splatByteAll(' ', level + half);
try w.writeAll("body:\n");
- try tree.dumpNode(body, level + delta, config, w);
+ try tree.dumpNode(body, level + delta, term);
}
if (function.definition) |definition| {
try w.splatByteAll(' ', level + half);
try w.writeAll("definition: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("0x{X}\n", .{@intFromEnum(definition)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
}
},
.typedef => |typedef| {
try w.splatByteAll(' ', level + half);
try w.writeAll("name: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("{s}\n", .{tree.tokSlice(typedef.name_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
},
.param => |param| {
try w.splatByteAll(' ', level + half);
@@ -3200,21 +3229,21 @@ fn dumpNode(
switch (param.storage_class) {
.auto => {},
.register => {
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
try w.writeAll("register ");
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
},
}
try w.writeAll("name: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("{s}\n", .{tree.tokSlice(param.name_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
},
.variable => |variable| {
try w.splatByteAll(' ', level + half);
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
switch (variable.storage_class) {
.auto => {},
.static => try w.writeAll("static "),
@@ -3222,37 +3251,37 @@ fn dumpNode(
.register => try w.writeAll("register "),
}
if (variable.thread_local) try w.writeAll("thread_local ");
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
try w.writeAll("name: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("{s}\n", .{tree.tokSlice(variable.name_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
if (variable.initializer) |some| {
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
try w.splatByteAll(' ', level + half);
try w.writeAll("init:\n");
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
}
if (variable.definition) |definition| {
try w.splatByteAll(' ', level + half);
try w.writeAll("definition: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("0x{X}\n", .{@intFromEnum(definition)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
}
},
.enum_field => |field| {
try w.splatByteAll(' ', level + half);
try w.writeAll("name: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("{s}\n", .{tree.tokSlice(field.name_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
if (field.init) |some| {
try w.splatByteAll(' ', level + half);
try w.writeAll("init:\n");
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
}
},
.record_field => |field| {
@@ -3260,26 +3289,26 @@ fn dumpNode(
if (name_tok_id == .identifier or name_tok_id == .extended_identifier) {
try w.splatByteAll(' ', level + half);
try w.writeAll("name: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("{s}\n", .{tree.tokSlice(field.name_or_first_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
}
if (field.bit_width) |some| {
try w.splatByteAll(' ', level + half);
try w.writeAll("bits:\n");
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
}
},
.compound_stmt => |compound| {
for (compound.body, 0..) |stmt, i| {
if (i != 0) try w.writeByte('\n');
- try tree.dumpNode(stmt, level + delta, config, w);
+ try tree.dumpNode(stmt, level + delta, term);
}
},
.enum_decl => |decl| {
for (decl.fields, 0..) |field, i| {
if (i != 0) try w.writeByte('\n');
- try tree.dumpNode(field, level + delta, config, w);
+ try tree.dumpNode(field, level + delta, term);
}
},
.struct_decl, .union_decl => |decl| {
@@ -3291,7 +3320,7 @@ fn dumpNode(
var field_i: u32 = 0;
for (decl.fields, 0..) |field_node, i| {
if (i != 0) try w.writeByte('\n');
- try tree.dumpNode(field_node, level + delta, config, w);
+ try tree.dumpNode(field_node, level + delta, term);
if (field_node.get(tree) != .record_field) continue;
if (fields.len == 0) continue;
@@ -3301,32 +3330,32 @@ fn dumpNode(
if (field_attributes.len == 0) continue;
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
try tree.dumpFieldAttributes(field_attributes, level + delta + half, w);
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
}
},
.array_init_expr, .struct_init_expr => |init| {
for (init.items, 0..) |item, i| {
if (i != 0) try w.writeByte('\n');
- try tree.dumpNode(item, level + delta, config, w);
+ try tree.dumpNode(item, level + delta, term);
}
},
.union_init_expr => |init| {
try w.splatByteAll(' ', level + half);
try w.writeAll("field index: ");
- try config.setColor(w, LITERAL);
+ try term.setColor(LITERAL);
try w.print("{d}\n", .{init.field_index});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
if (init.initializer) |some| {
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
}
},
.compound_literal_expr => |literal| {
if (literal.storage_class != .auto or literal.thread_local) {
try w.splatByteAll(' ', level + half - 1);
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
switch (literal.storage_class) {
.auto => {},
.static => try w.writeAll(" static"),
@@ -3334,137 +3363,138 @@ fn dumpNode(
}
if (literal.thread_local) try w.writeAll(" thread_local");
try w.writeByte('\n');
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
}
- try tree.dumpNode(literal.initializer, level + half, config, w);
+ try tree.dumpNode(literal.initializer, level + half, term);
},
.labeled_stmt => |labeled| {
try w.splatByteAll(' ', level + half);
try w.writeAll("label: ");
- try config.setColor(w, LITERAL);
+ try term.setColor(LITERAL);
try w.print("{s}\n", .{tree.tokSlice(labeled.label_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
try w.splatByteAll(' ', level + half);
try w.writeAll("stmt:\n");
- try tree.dumpNode(labeled.body, level + delta, config, w);
+ try tree.dumpNode(labeled.body, level + delta, term);
},
.case_stmt => |case| {
try w.splatByteAll(' ', level + half);
if (case.end) |some| {
try w.writeAll("range start:\n");
- try tree.dumpNode(case.start, level + delta, config, w);
+ try tree.dumpNode(case.start, level + delta, term);
try w.splatByteAll(' ', level + half);
try w.writeAll("range end:\n");
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
} else {
try w.writeAll("value:\n");
- try tree.dumpNode(case.start, level + delta, config, w);
+ try tree.dumpNode(case.start, level + delta, term);
}
try w.splatByteAll(' ', level + half);
try w.writeAll("stmt:\n");
- try tree.dumpNode(case.body, level + delta, config, w);
+ try tree.dumpNode(case.body, level + delta, term);
},
.default_stmt => |default| {
try w.splatByteAll(' ', level + half);
try w.writeAll("stmt:\n");
- try tree.dumpNode(default.body, level + delta, config, w);
+ try tree.dumpNode(default.body, level + delta, term);
},
.binary_cond_expr, .cond_expr, .builtin_choose_expr => |conditional| {
try w.splatByteAll(' ', level + half);
try w.writeAll("cond:\n");
- try tree.dumpNode(conditional.cond, level + delta, config, w);
+ try tree.dumpNode(conditional.cond, level + delta, term);
try w.splatByteAll(' ', level + half);
try w.writeAll("then:\n");
- try tree.dumpNode(conditional.then_expr, level + delta, config, w);
+ try tree.dumpNode(conditional.then_expr, level + delta, term);
try w.splatByteAll(' ', level + half);
try w.writeAll("else:\n");
- try tree.dumpNode(conditional.else_expr, level + delta, config, w);
+ try tree.dumpNode(conditional.else_expr, level + delta, term);
},
.builtin_types_compatible_p => |call| {
try w.splatByteAll(' ', level + half);
try w.writeAll("lhs: ");
- try config.setColor(w, TYPE);
+ try term.setColor(TYPE);
try call.lhs.dump(tree.comp, w);
try w.writeByte('\n');
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
try w.splatByteAll(' ', level + half);
try w.writeAll("rhs: ");
- try config.setColor(w, TYPE);
+ try term.setColor(TYPE);
try call.rhs.dump(tree.comp, w);
try w.writeByte('\n');
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
},
.builtin_convertvector => |convert| {
try w.splatByteAll(' ', level + half);
try w.writeAll("operand:\n");
- try tree.dumpNode(convert.operand, level + delta, config, w);
+ try tree.dumpNode(convert.operand, level + delta, term);
},
.builtin_shufflevector => |shuffle| {
try w.splatByteAll(' ', level + half);
try w.writeAll("lhs:\n");
- try tree.dumpNode(shuffle.lhs, level + delta, config, w);
+ try tree.dumpNode(shuffle.lhs, level + delta, term);
try w.splatByteAll(' ', level + half);
try w.writeAll("rhs:\n");
- try tree.dumpNode(shuffle.rhs, level + delta, config, w);
+ try tree.dumpNode(shuffle.rhs, level + delta, term);
if (shuffle.indexes.len > 0) {
try w.splatByteAll(' ', level + half);
try w.writeAll("indexes:\n");
for (shuffle.indexes) |index| {
- try tree.dumpNode(index, level + delta, config, w);
+ try tree.dumpNode(index, level + delta, term);
}
}
},
+ .builtin_va_arg_pack, .builtin_va_arg_pack_len => {},
.if_stmt => |@"if"| {
try w.splatByteAll(' ', level + half);
try w.writeAll("cond:\n");
- try tree.dumpNode(@"if".cond, level + delta, config, w);
+ try tree.dumpNode(@"if".cond, level + delta, term);
try w.splatByteAll(' ', level + half);
try w.writeAll("then:\n");
- try tree.dumpNode(@"if".then_body, level + delta, config, w);
+ try tree.dumpNode(@"if".then_body, level + delta, term);
if (@"if".else_body) |some| {
try w.splatByteAll(' ', level + half);
try w.writeAll("else:\n");
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
}
},
.switch_stmt => |@"switch"| {
try w.splatByteAll(' ', level + half);
try w.writeAll("cond:\n");
- try tree.dumpNode(@"switch".cond, level + delta, config, w);
+ try tree.dumpNode(@"switch".cond, level + delta, term);
try w.splatByteAll(' ', level + half);
try w.writeAll("body:\n");
- try tree.dumpNode(@"switch".body, level + delta, config, w);
+ try tree.dumpNode(@"switch".body, level + delta, term);
},
.while_stmt => |@"while"| {
try w.splatByteAll(' ', level + half);
try w.writeAll("cond:\n");
- try tree.dumpNode(@"while".cond, level + delta, config, w);
+ try tree.dumpNode(@"while".cond, level + delta, term);
try w.splatByteAll(' ', level + half);
try w.writeAll("body:\n");
- try tree.dumpNode(@"while".body, level + delta, config, w);
+ try tree.dumpNode(@"while".body, level + delta, term);
},
.do_while_stmt => |do| {
try w.splatByteAll(' ', level + half);
try w.writeAll("cond:\n");
- try tree.dumpNode(do.cond, level + delta, config, w);
+ try tree.dumpNode(do.cond, level + delta, term);
try w.splatByteAll(' ', level + half);
try w.writeAll("body:\n");
- try tree.dumpNode(do.body, level + delta, config, w);
+ try tree.dumpNode(do.body, level + delta, term);
},
.for_stmt => |@"for"| {
switch (@"for".init) {
@@ -3472,48 +3502,48 @@ fn dumpNode(
try w.splatByteAll(' ', level + half);
try w.writeAll("decl:\n");
for (decls) |decl| {
- try tree.dumpNode(decl, level + delta, config, w);
+ try tree.dumpNode(decl, level + delta, term);
try w.writeByte('\n');
}
},
.expr => |expr| if (expr) |some| {
try w.splatByteAll(' ', level + half);
try w.writeAll("init:\n");
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
},
}
if (@"for".cond) |some| {
try w.splatByteAll(' ', level + half);
try w.writeAll("cond:\n");
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
}
if (@"for".incr) |some| {
try w.splatByteAll(' ', level + half);
try w.writeAll("incr:\n");
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
}
try w.splatByteAll(' ', level + half);
try w.writeAll("body:\n");
- try tree.dumpNode(@"for".body, level + delta, config, w);
+ try tree.dumpNode(@"for".body, level + delta, term);
},
.addr_of_label => |addr| {
try w.splatByteAll(' ', level + half);
try w.writeAll("label: ");
- try config.setColor(w, LITERAL);
+ try term.setColor(LITERAL);
try w.print("{s}\n", .{tree.tokSlice(addr.label_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
},
.goto_stmt => |goto| {
try w.splatByteAll(' ', level + half);
try w.writeAll("label: ");
- try config.setColor(w, LITERAL);
+ try term.setColor(LITERAL);
try w.print("{s}\n", .{tree.tokSlice(goto.label_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
},
.computed_goto_stmt => |goto| {
try w.splatByteAll(' ', level + half);
try w.writeAll("expr:\n");
- try tree.dumpNode(goto.expr, level + delta, config, w);
+ try tree.dumpNode(goto.expr, level + delta, term);
},
.continue_stmt, .break_stmt, .null_stmt => {},
.return_stmt => |ret| {
@@ -3521,43 +3551,43 @@ fn dumpNode(
.expr => |expr| {
try w.splatByteAll(' ', level + half);
try w.writeAll("expr:\n");
- try tree.dumpNode(expr, level + delta, config, w);
+ try tree.dumpNode(expr, level + delta, term);
},
.implicit => {},
.none => {},
}
},
.asm_stmt => |@"asm"| {
- try tree.dumpNode(@"asm".asm_str, level + delta, config, w);
+ try tree.dumpNode(@"asm".asm_str, level + delta, term);
const write_operand = struct {
fn write_operand(
- _w: *std.Io.Writer,
_level: u32,
- _config: std.Io.tty.Config,
+ _term: std.Io.Terminal,
_tree: *const Tree,
operands: []const Node.AsmStmt.Operand,
- ) std.Io.tty.Config.SetColorError!void {
+ ) std.Io.Terminal.SetColorError!void {
+ const _w = _term.writer;
for (operands) |operand| {
if (operand.name != 0) {
try _w.splatByteAll(' ', _level + delta);
try _w.writeAll("asm name: ");
- try _config.setColor(_w, NAME);
+ try _term.setColor(NAME);
try _w.writeAll(_tree.tokSlice(operand.name));
try _w.writeByte('\n');
- try _config.setColor(_w, .reset);
+ try _term.setColor(.reset);
}
try _w.splatByteAll(' ', _level + delta);
try _w.writeAll("constraint: ");
const constraint_val = _tree.value_map.get(operand.constraint).?;
- try _config.setColor(_w, LITERAL);
+ try _term.setColor(LITERAL);
_ = try constraint_val.print(operand.constraint.qt(_tree), _tree.comp, _w);
try _w.writeByte('\n');
- try _tree.dumpNode(operand.expr, _level + delta, _config, _w);
+ try _tree.dumpNode(operand.expr, _level + delta, _term);
}
- try _config.setColor(_w, .reset);
+ try _term.setColor(.reset);
}
}.write_operand;
@@ -3565,18 +3595,18 @@ fn dumpNode(
try w.splatByteAll(' ', level + half);
try w.writeAll("ouputs:\n");
- try write_operand(w, level, config, tree, @"asm".outputs);
+ try write_operand(level, term, tree, @"asm".outputs);
}
if (@"asm".inputs.len > 0) {
try w.splatByteAll(' ', level + half);
try w.writeAll("inputs:\n");
- try write_operand(w, level, config, tree, @"asm".inputs);
+ try write_operand(level, term, tree, @"asm".inputs);
}
if (@"asm".clobbers.len > 0) {
try w.splatByteAll(' ', level + half);
try w.writeAll("clobbers:\n");
- try config.setColor(w, LITERAL);
+ try term.setColor(LITERAL);
for (@"asm".clobbers) |clobber| {
const clobber_val = tree.value_map.get(clobber).?;
@@ -3584,41 +3614,41 @@ fn dumpNode(
_ = try clobber_val.print(clobber.qt(tree), tree.comp, w);
try w.writeByte('\n');
}
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
}
if (@"asm".labels.len > 0) {
try w.splatByteAll(' ', level + half);
try w.writeAll("labels:\n");
for (@"asm".labels) |label| {
- try tree.dumpNode(label, level + delta, config, w);
+ try tree.dumpNode(label, level + delta, term);
}
}
},
.call_expr => |call| {
try w.splatByteAll(' ', level + half);
try w.writeAll("callee:\n");
- try tree.dumpNode(call.callee, level + delta, config, w);
+ try tree.dumpNode(call.callee, level + delta, term);
if (call.args.len > 0) {
try w.splatByteAll(' ', level + half);
try w.writeAll("args:\n");
for (call.args) |arg| {
- try tree.dumpNode(arg, level + delta, config, w);
+ try tree.dumpNode(arg, level + delta, term);
}
}
},
.builtin_call_expr => |call| {
try w.splatByteAll(' ', level + half);
try w.writeAll("name: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("{s}\n", .{tree.tokSlice(call.builtin_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
if (call.args.len > 0) {
try w.splatByteAll(' ', level + half);
try w.writeAll("args:\n");
for (call.args) |arg| {
- try tree.dumpNode(arg, level + delta, config, w);
+ try tree.dumpNode(arg, level + delta, term);
}
}
},
@@ -3655,13 +3685,13 @@ fn dumpNode(
=> |bin| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("lhs:\n");
- try tree.dumpNode(bin.lhs, level + delta, config, w);
+ try tree.dumpNode(bin.lhs, level + delta, term);
try w.splatByteAll(' ', level + 1);
try w.writeAll("rhs:\n");
- try tree.dumpNode(bin.rhs, level + delta, config, w);
+ try tree.dumpNode(bin.rhs, level + delta, term);
},
- .cast => |cast| try tree.dumpNode(cast.operand, level + delta, config, w),
+ .cast => |cast| try tree.dumpNode(cast.operand, level + delta, term),
.addr_of_expr,
.deref_expr,
.plus_expr,
@@ -3680,21 +3710,21 @@ fn dumpNode(
=> |un| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("operand:\n");
- try tree.dumpNode(un.operand, level + delta, config, w);
+ try tree.dumpNode(un.operand, level + delta, term);
},
.decl_ref_expr, .enumeration_ref => |dr| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("name: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("{s}\n", .{tree.tokSlice(dr.name_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
},
.builtin_ref => |dr| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("name: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("{s}\n", .{tree.tokSlice(dr.name_tok)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
},
.bool_literal,
.nullptr_literal,
@@ -3706,7 +3736,7 @@ fn dumpNode(
.member_access_expr, .member_access_ptr_expr => |access| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("lhs:\n");
- try tree.dumpNode(access.base, level + delta, config, w);
+ try tree.dumpNode(access.base, level + delta, term);
var base_qt = access.base.qt(tree);
if (base_qt.get(tree.comp, .pointer)) |some| base_qt = some.child;
@@ -3714,61 +3744,61 @@ fn dumpNode(
try w.splatByteAll(' ', level + 1);
try w.writeAll("name: ");
- try config.setColor(w, NAME);
+ try term.setColor(NAME);
try w.print("{s}\n", .{fields[access.member_index].name.lookup(tree.comp)});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
},
.array_access_expr => |access| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("base:\n");
- try tree.dumpNode(access.base, level + delta, config, w);
+ try tree.dumpNode(access.base, level + delta, term);
try w.splatByteAll(' ', level + 1);
try w.writeAll("index:\n");
- try tree.dumpNode(access.index, level + delta, config, w);
+ try tree.dumpNode(access.index, level + delta, term);
},
.sizeof_expr, .alignof_expr => |type_info| {
if (type_info.expr) |some| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("expr:\n");
- try tree.dumpNode(some, level + delta, config, w);
+ try tree.dumpNode(some, level + delta, term);
} else {
try w.splatByteAll(' ', level + half);
try w.writeAll("operand type: ");
- try config.setColor(w, TYPE);
+ try term.setColor(TYPE);
try type_info.operand_qt.dump(tree.comp, w);
try w.writeByte('\n');
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
}
},
.generic_expr => |generic| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("controlling:\n");
- try tree.dumpNode(generic.controlling, level + delta, config, w);
+ try tree.dumpNode(generic.controlling, level + delta, term);
try w.splatByteAll(' ', level + 1);
try w.writeAll("chosen:\n");
- try tree.dumpNode(generic.chosen, level + delta, config, w);
+ try tree.dumpNode(generic.chosen, level + delta, term);
if (generic.rest.len > 0) {
try w.splatByteAll(' ', level + 1);
try w.writeAll("rest:\n");
for (generic.rest) |expr| {
- try tree.dumpNode(expr, level + delta, config, w);
+ try tree.dumpNode(expr, level + delta, term);
}
}
},
.generic_association_expr => |assoc| {
- try tree.dumpNode(assoc.expr, level + delta, config, w);
+ try tree.dumpNode(assoc.expr, level + delta, term);
},
.generic_default_expr => |default| {
- try tree.dumpNode(default.expr, level + delta, config, w);
+ try tree.dumpNode(default.expr, level + delta, term);
},
.array_filler_expr => |filler| {
try w.splatByteAll(' ', level + 1);
try w.writeAll("count: ");
- try config.setColor(w, LITERAL);
+ try term.setColor(LITERAL);
try w.print("{d}\n", .{filler.count});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
},
.struct_forward_decl,
.union_forward_decl,
diff --git a/lib/compiler/aro/aro/TypeStore.zig b/lib/compiler/aro/aro/TypeStore.zig
@@ -219,9 +219,9 @@ pub const QualType = packed struct(u32) {
.float_dfloat64 => return .{ .float = .dfloat64 },
.float_dfloat128 => return .{ .float = .dfloat128 },
.float_dfloat64x => return .{ .float = .dfloat64x },
- .void_pointer => return .{ .pointer = .{ .child = .void, .decayed = null } },
- .char_pointer => return .{ .pointer = .{ .child = .char, .decayed = null } },
- .int_pointer => return .{ .pointer = .{ .child = .int, .decayed = null } },
+ .void_pointer => return .{ .pointer = .{ .child = .void } },
+ .char_pointer => return .{ .pointer = .{ .child = .char } },
+ .int_pointer => return .{ .pointer = .{ .child = .int } },
else => {},
}
@@ -280,7 +280,7 @@ pub const QualType = packed struct(u32) {
},
.pointer => .{ .pointer = .{
.child = @bitCast(repr.data[0]),
- .decayed = null,
+ .bounds = @enumFromInt(repr.data[1]),
} },
.pointer_decayed => .{ .pointer = .{
.child = @bitCast(repr.data[0]),
@@ -800,7 +800,6 @@ pub const QualType = packed struct(u32) {
return comp.type_store.put(comp.gpa, .{ .pointer = .{
.child = qt,
- .decayed = null,
} });
},
else => return qt,
@@ -1013,6 +1012,15 @@ pub const QualType = packed struct(u32) {
return qt.scalarKind(comp).isPointer();
}
+ /// Function or function pointer
+ pub fn isCallable(qt: QualType, comp: *const Compilation) bool {
+ return switch (qt.base(comp).type) {
+ .func => true,
+ .pointer => |ptr| ptr.child.is(comp, .func),
+ else => false,
+ };
+ }
+
pub fn eqlQualified(a_qt: QualType, b_qt: QualType, comp: *const Compilation) bool {
if (a_qt.@"const" != b_qt.@"const") return false;
if (a_qt.@"volatile" != b_qt.@"volatile") return false;
@@ -1632,7 +1640,25 @@ pub const Type = union(enum) {
pub const Pointer = struct {
child: QualType,
- decayed: ?QualType,
+ decayed: ?QualType = null,
+ bounds: Bounds = .c,
+
+ pub const Bounds = enum {
+ /// C pointer with no bounds attribute
+ c,
+ /// No pointer arithmetic or non-zero indexing
+ single,
+ /// Explicitly specified as a traditional C pointer
+ unsafe_indexable,
+
+ pub fn fromTag(tag: Attribute.Tag) Bounds {
+ return switch (tag) {
+ .single => .single,
+ .unsafe_indexable => .unsafe_indexable,
+ else => unreachable,
+ };
+ }
+ };
};
pub const Array = struct {
@@ -1784,6 +1810,7 @@ attributes: std.ArrayList(Attribute) = .empty,
anon_name_arena: std.heap.ArenaAllocator.State = .{},
wchar: QualType = .invalid,
+wint: QualType = .invalid,
uint_least16_t: QualType = .invalid,
uint_least32_t: QualType = .invalid,
ptrdiff: QualType = .invalid,
@@ -1918,10 +1945,12 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
.pointer => |pointer| {
repr.data[0] = @bitCast(pointer.child);
if (pointer.decayed) |array| {
+ std.debug.assert(pointer.bounds == .c);
repr.tag = .pointer_decayed;
repr.data[1] = @bitCast(array);
} else {
repr.tag = .pointer;
+ repr.data[1] = @intFromEnum(pointer.bounds);
}
},
.array => |array| {
@@ -2070,17 +2099,44 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void
pub fn initNamedTypes(ts: *TypeStore, comp: *Compilation) !void {
const os = comp.target.os.tag;
- ts.wchar = switch (comp.target.cpu.arch) {
- .xcore => .uchar,
- .ve, .msp430 => .uint,
- .arm, .armeb, .thumb, .thumbeb => if (os != .windows and os != .netbsd and os != .openbsd) .uint else .int,
- .aarch64, .aarch64_be => if (!os.isDarwin() and os != .netbsd) .uint else .int,
- .x86_64, .x86 => if (os == .windows) .ushort else .int,
- else => .int,
+ const arch = comp.target.cpu.arch;
+ ts.wchar = switch (os) {
+ .openbsd, .netbsd => .int,
+ .ps4, .ps5 => .ushort,
+ .uefi => .ushort,
+ .windows => .ushort,
+ .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => .int,
+ else => switch (arch) {
+ .aarch64, .aarch64_be => .uint,
+ .arm, .armeb, .thumb, .thumbeb => .uint,
+ .ve, .msp430 => .uint,
+ .x86_64, .x86 => .int,
+ .xcore => .uchar,
+ else => .int,
+ },
+ };
+
+ ts.wint = switch (os) {
+ .fuchsia => .uint,
+ .linux => .uint,
+ .openbsd => .int,
+ .uefi => .ushort,
+ .windows => .ushort,
+ else => switch (arch) {
+ .csky => .uint,
+ .loongarch32, .loongarch64 => .uint,
+ .riscv32, .riscv32be, .riscv64, .riscv64be => .uint,
+ .ve => .uint,
+ .xcore => .uint,
+ .xtensa, .xtensaeb => .uint,
+ else => .int,
+ },
};
const ptr_width = comp.target.ptrBitWidth();
- ts.ptrdiff = if (os == .windows and ptr_width == 64)
+ ts.ptrdiff = if (arch == .wasm32)
+ .long
+ else if (os == .windows and ptr_width == 64)
.long_long
else switch (ptr_width) {
16 => .int,
@@ -2089,7 +2145,9 @@ pub fn initNamedTypes(ts: *TypeStore, comp: *Compilation) !void {
else => unreachable,
};
- ts.size = if (os == .windows and ptr_width == 64)
+ ts.size = if (arch == .wasm32)
+ .ulong
+ else if (os == .windows and ptr_width == 64)
.ulong_long
else switch (ptr_width) {
16 => .uint,
@@ -2206,9 +2264,9 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
};
const struct_qt = switch (kind) {
- .aarch64_va_list => blk: {
+ .aarch64_va_list => {
var record: Type.Record = .{
- .name = try comp.internString("__va_list_tag"),
+ .name = try comp.internString("__va_list"),
.decl_node = undefined, // TODO
.layout = null,
.fields = &.{},
@@ -2226,11 +2284,11 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
- break :blk qt;
+ return qt;
},
- .arm_va_list => blk: {
+ .arm_va_list => {
var record: Type.Record = .{
- .name = try comp.internString("__va_list_tag"),
+ .name = try comp.internString("__va_list"),
.decl_node = undefined, // TODO
.layout = null,
.fields = &.{},
@@ -2244,7 +2302,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
- break :blk qt;
+ return qt;
},
.hexagon_va_list => blk: {
var record: Type.Record = .{
@@ -2330,7 +2388,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
break :blk qt;
},
- .xtensa_va_list => blk: {
+ .xtensa_va_list => {
var record: Type.Record = .{
.name = try comp.internString("__va_list_tag"),
.decl_node = undefined, // TODO
@@ -2348,7 +2406,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType {
record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable;
try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index));
- break :blk qt;
+ return qt;
},
};
@@ -2830,7 +2888,7 @@ pub const Builder = struct {
}
fn duplicateSpec(b: *Builder, source_tok: TokenIndex, spec: []const u8) !void {
- if (b.parser.comp.langopts.emulate != .clang) return b.cannotCombine(source_tok);
+ if (b.parser.comp.langopts.emulate == .gcc) return b.cannotCombine(source_tok);
try b.parser.err(b.parser.tok_i, .duplicate_decl_spec, .{spec});
}
diff --git a/lib/compiler/aro/aro/Value.zig b/lib/compiler/aro/aro/Value.zig
@@ -1,5 +1,4 @@
const std = @import("std");
-const Io = std.Io;
const assert = std.debug.assert;
const BigIntConst = std.math.big.int.Const;
const BigIntMutable = std.math.big.int.Mutable;
@@ -9,8 +8,8 @@ const BigIntSpace = Interner.Tag.Int.BigIntSpace;
const annex_g = @import("annex_g.zig");
const Compilation = @import("Compilation.zig");
-const Target = @import("Target.zig");
const QualType = @import("TypeStore.zig").QualType;
+const Target = @import("Target.zig");
const Value = @This();
@@ -77,11 +76,7 @@ test "minUnsignedBits" {
}
};
- var arena_state: std.heap.ArenaAllocator = .init(std.testing.allocator);
- defer arena_state.deinit();
- const arena = arena_state.allocator();
-
- var comp = Compilation.init(std.testing.allocator, arena, std.testing.io, undefined, Io.Dir.cwd());
+ var comp = try Compilation.init(.testing);
defer comp.deinit();
const target_query = try std.Target.Query.parse(.{ .arch_os_abi = "x86_64-linux-gnu" });
comp.target = .fromZigTarget(try std.zig.system.resolveTargetQuery(std.testing.io, target_query));
@@ -116,11 +111,7 @@ test "minSignedBits" {
}
};
- var arena_state: std.heap.ArenaAllocator = .init(std.testing.allocator);
- defer arena_state.deinit();
- const arena = arena_state.allocator();
-
- var comp = Compilation.init(std.testing.allocator, arena, std.testing.io, undefined, Io.Dir.cwd());
+ var comp = try Compilation.init(.testing);
defer comp.deinit();
const target_query = try std.Target.Query.parse(.{ .arch_os_abi = "x86_64-linux-gnu" });
comp.target = .fromZigTarget(try std.zig.system.resolveTargetQuery(std.testing.io, target_query));
@@ -465,6 +456,11 @@ pub fn isNan(v: Value, comp: *const Compilation) bool {
};
}
+pub fn isPointer(v: Value, comp: *const Compilation) bool {
+ if (v.opt_ref == .none) return false;
+ return comp.interner.get(v.ref()) == .pointer;
+}
+
/// Converts value to zero or one;
/// `.none` value remains unchanged.
pub fn boolCast(v: *Value, comp: *const Compilation) void {
@@ -1044,9 +1040,9 @@ fn twosCompIntLimit(limit: std.math.big.int.TwosCompIntLimit, qt: QualType, comp
const mag_bits: usize = @intCast(qt.bitSizeof(comp));
switch (mag_bits) {
inline 8, 16, 32, 64 => |bits| {
- if (limit == .min) return Value.int(@as(i64, std.math.minInt(std.meta.Int(.signed, bits))), comp);
+ if (limit == .min) return Value.int(@as(i64, std.math.minInt(@Int(.signed, bits))), comp);
return switch (signedness) {
- inline else => |sign| Value.int(std.math.maxInt(std.meta.Int(sign, bits)), comp),
+ inline else => |sign| Value.int(std.math.maxInt(@Int(sign, bits)), comp),
};
},
else => {},
@@ -1081,7 +1077,7 @@ const NestedPrint = union(enum) {
},
};
-pub fn printPointer(offset: Value, base: []const u8, comp: *const Compilation, w: *Io.Writer) Io.Writer.Error!void {
+pub fn printPointer(offset: Value, base: []const u8, comp: *const Compilation, w: *std.Io.Writer) std.Io.Writer.Error!void {
try w.writeByte('&');
try w.writeAll(base);
if (!offset.isZero(comp)) {
@@ -1090,7 +1086,7 @@ pub fn printPointer(offset: Value, base: []const u8, comp: *const Compilation, w
}
}
-pub fn print(v: Value, qt: QualType, comp: *const Compilation, w: *Io.Writer) Io.Writer.Error!?NestedPrint {
+pub fn print(v: Value, qt: QualType, comp: *const Compilation, w: *std.Io.Writer) std.Io.Writer.Error!?NestedPrint {
if (qt.is(comp, .bool)) {
try w.writeAll(if (v.isZero(comp)) "false" else "true");
return null;
@@ -1117,7 +1113,7 @@ pub fn print(v: Value, qt: QualType, comp: *const Compilation, w: *Io.Writer) Io
return null;
}
-pub fn printString(bytes: []const u8, qt: QualType, comp: *const Compilation, w: *Io.Writer) Io.Writer.Error!void {
+pub fn printString(bytes: []const u8, qt: QualType, comp: *const Compilation, w: *std.Io.Writer) std.Io.Writer.Error!void {
const size: Compilation.CharUnitSize = @enumFromInt(qt.childType(comp).sizeof(comp));
const without_null = bytes[0 .. bytes.len - @intFromEnum(size)];
try w.writeByte('"');
diff --git a/lib/compiler/aro/aro/features.zig b/lib/compiler/aro/aro/features.zig
@@ -44,6 +44,7 @@ pub fn hasFeature(comp: *Compilation, ext: []const u8) bool {
.c_generic_selections = comp.langopts.standard.atLeast(.c11),
.c_static_assert = comp.langopts.standard.atLeast(.c11),
.c_thread_local = comp.langopts.standard.atLeast(.c11) and comp.target.isTlsSupported(),
+ .bounds_attributes = comp.langopts.bounds_safety == .clang,
};
inline for (@typeInfo(@TypeOf(list)).@"struct".fields) |f| {
if (std.mem.eql(u8, f.name, ext)) return @field(list, f.name);
diff --git a/lib/compiler/aro/aro/pragmas/once.zig b/lib/compiler/aro/aro/pragmas/once.zig
@@ -35,7 +35,6 @@ fn deinit(pragma: *Pragma, comp: *Compilation) void {
var self: *Once = @fieldParentPtr("pragma", pragma);
self.pragma_once.deinit(comp.gpa);
comp.gpa.destroy(self);
- pragma.* = undefined;
}
fn preprocessorHandler(pragma: *Pragma, pp: *Preprocessor, start_idx: TokenIndex) Pragma.Error!void {
diff --git a/lib/compiler/aro/aro/record_layout.zig b/lib/compiler/aro/aro/record_layout.zig
@@ -332,7 +332,7 @@ const SysVContext = struct {
}
}
} else {
- std.debug.assert(self.comp.langopts.emulate == .clang);
+ std.debug.assert(self.comp.langopts.emulate == .no or self.comp.langopts.emulate == .clang);
// On Clang, the alignment requested by annotations is not respected if it is
// larger than the value of #pragma pack. See test case 0083.
@@ -569,7 +569,7 @@ const MsvcContext = struct {
pub fn compute(fields: []Type.Record.Field, qt: QualType, comp: *const Compilation, pragma_pack: ?u8) Error!Type.Record.Layout {
switch (comp.langopts.emulate) {
- .gcc, .clang => {
+ .no, .gcc, .clang => {
var context = SysVContext.init(qt, comp, pragma_pack);
try context.layoutFields(fields);
@@ -620,7 +620,7 @@ fn computeLayout(qt: QualType, comp: *const Compilation) RecordLayout {
else => {
const type_align = qt.alignof(comp) * BITS_PER_BYTE;
return .{
- .size_bits = qt.bitSizeofOrNull(comp) orelse 0,
+ .size_bits = BITS_PER_BYTE * (qt.sizeofOrNull(comp) orelse 0),
.pointer_alignment_bits = type_align,
.field_alignment_bits = type_align,
.required_alignment_bits = BITS_PER_BYTE,
diff --git a/lib/compiler/aro/assembly_backend/x86_64.zig b/lib/compiler/aro/assembly_backend/x86_64.zig
@@ -5,15 +5,14 @@ const assert = std.debug.assert;
const aro = @import("aro");
const Assembly = aro.Assembly;
const Compilation = aro.Compilation;
-const Node = Tree.Node;
const Source = aro.Source;
const Tree = aro.Tree;
const QualType = aro.QualType;
const Value = aro.Value;
-
-const AsmCodeGen = @This();
const Error = aro.Compilation.Error;
+const Node = Tree.Node;
+const AsmCodeGen = @This();
tree: *const Tree,
comp: *Compilation,
text: *std.Io.Writer,
@@ -58,7 +57,7 @@ fn serializeFloat(comptime T: type, value: T, w: *std.Io.Writer) !void {
},
else => {
const size = @bitSizeOf(T);
- const storage_unit = std.enums.fromInt(StorageUnit, size).?;
+ const storage_unit = std.enums.fromInt(StorageUnit, size) orelse unreachable;
const IntTy = @Int(.unsigned, size);
const int_val: IntTy = @bitCast(value);
return serializeInt(int_val, storage_unit, w);
diff --git a/lib/compiler/aro/backend/Assembly.zig b/lib/compiler/aro/backend/Assembly.zig
@@ -1,5 +1,4 @@
const std = @import("std");
-const Io = std.Io;
const Allocator = std.mem.Allocator;
data: []const u8,
@@ -12,7 +11,7 @@ pub fn deinit(self: *const Assembly, gpa: Allocator) void {
gpa.free(self.text);
}
-pub fn writeToFile(self: Assembly, io: Io, file: Io.File) !void {
+pub fn writeToFile(self: Assembly, io: std.Io, file: std.Io.File) !void {
var file_writer = file.writer(io, &.{});
var buffers = [_][]const u8{ self.data, self.text };
diff --git a/lib/compiler/aro/backend/Interner.zig b/lib/compiler/aro/backend/Interner.zig
@@ -102,13 +102,13 @@ pub const Key = union(enum) {
.float => |repr| switch (repr) {
inline else => |data| std.hash.autoHash(
&hasher,
- @as(std.meta.Int(.unsigned, @bitSizeOf(@TypeOf(data))), @bitCast(data)),
+ @as(@Int(.unsigned, @bitSizeOf(@TypeOf(data))), @bitCast(data)),
),
},
.complex => |repr| switch (repr) {
inline else => |data| std.hash.autoHash(
&hasher,
- @as(std.meta.Int(.unsigned, @bitSizeOf(@TypeOf(data))), @bitCast(data)),
+ @as(@Int(.unsigned, @bitSizeOf(@TypeOf(data))), @bitCast(data)),
),
},
.int => |repr| {
diff --git a/lib/compiler/aro/backend/Ir.zig b/lib/compiler/aro/backend/Ir.zig
@@ -374,24 +374,27 @@ pub fn deinit(ir: *Ir, gpa: std.mem.Allocator) void {
ir.* = undefined;
}
-const TYPE = std.Io.tty.Color.bright_magenta;
-const INST = std.Io.tty.Color.bright_cyan;
-const REF = std.Io.tty.Color.bright_blue;
-const LITERAL = std.Io.tty.Color.bright_green;
-const ATTRIBUTE = std.Io.tty.Color.bright_yellow;
+const TYPE = std.Io.Terminal.Color.bright_magenta;
+const INST = std.Io.Terminal.Color.bright_cyan;
+const REF = std.Io.Terminal.Color.bright_blue;
+const LITERAL = std.Io.Terminal.Color.bright_green;
+const ATTRIBUTE = std.Io.Terminal.Color.bright_yellow;
const RefMap = std.AutoArrayHashMapUnmanaged(Ref, void);
-pub fn dump(ir: *const Ir, gpa: Allocator, config: std.Io.tty.Config, w: *std.Io.Writer) !void {
+pub const DumpError = std.Io.Terminal.SetColorError || std.mem.Allocator.Error;
+
+pub fn dump(ir: *const Ir, gpa: Allocator, term: std.Io.Terminal) DumpError!void {
for (ir.decls.keys(), ir.decls.values()) |name, *decl| {
- try ir.dumpDecl(decl, gpa, name, config, w);
+ try ir.dumpDecl(decl, gpa, name, term);
}
- try w.flush();
+ try term.writer.flush();
}
-fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, config: std.Io.tty.Config, w: *std.Io.Writer) !void {
+fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, term: std.Io.Terminal) !void {
const tags = decl.instructions.items(.tag);
const data = decl.instructions.items(.data);
+ const w = term.writer;
var ref_map: RefMap = .empty;
defer ref_map.deinit(gpa);
@@ -402,10 +405,10 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8,
const ret_inst = decl.body.items[decl.body.items.len - 1];
const ret_operand = data[@intFromEnum(ret_inst)].un;
const ret_ty = decl.instructions.items(.ty)[@intFromEnum(ret_operand)];
- try ir.writeType(ret_ty, config, w);
- try config.setColor(w, REF);
+ try ir.writeType(ret_ty, term);
+ try term.setColor(REF);
try w.print(" @{s}", .{name});
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
try w.writeAll("(");
var arg_count: u32 = 0;
@@ -414,8 +417,8 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8,
if (tags[@intFromEnum(ref)] != .arg) break;
if (arg_count != 0) try w.writeAll(", ");
try ref_map.put(gpa, ref, {});
- try ir.writeRef(decl, &ref_map, ref, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, &ref_map, ref, term);
+ try term.setColor(.reset);
}
try w.writeAll(") {\n");
for (decl.body.items[arg_count..]) |ref| {
@@ -432,7 +435,7 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8,
.arg, .constant, .symbol => unreachable,
.label => {
const label_index = label_map.getIndex(ref).?;
- try config.setColor(w, REF);
+ try term.setColor(REF);
try w.print("{s}.{d}:\n", .{ data[i].label, label_index });
},
// .label_val => {
@@ -441,35 +444,35 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8,
// },
.jmp => {
const un = data[i].un;
- try config.setColor(w, INST);
+ try term.setColor(INST);
try w.writeAll(" jmp ");
- try writeLabel(decl, &label_map, un, config, w);
+ try writeLabel(decl, &label_map, un, term);
try w.writeByte('\n');
},
.branch => {
const br = data[i].branch;
- try config.setColor(w, INST);
+ try term.setColor(INST);
try w.writeAll(" branch ");
- try ir.writeRef(decl, &ref_map, br.cond, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, &ref_map, br.cond, term);
+ try term.setColor(.reset);
try w.writeAll(", ");
- try writeLabel(decl, &label_map, br.then, config, w);
- try config.setColor(w, .reset);
+ try writeLabel(decl, &label_map, br.then, term);
+ try term.setColor(.reset);
try w.writeAll(", ");
- try writeLabel(decl, &label_map, br.@"else", config, w);
+ try writeLabel(decl, &label_map, br.@"else", term);
try w.writeByte('\n');
},
.select => {
const br = data[i].branch;
- try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w);
+ try ir.writeNewRef(gpa, decl, &ref_map, ref, term);
try w.writeAll("select ");
- try ir.writeRef(decl, &ref_map, br.cond, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, &ref_map, br.cond, term);
+ try term.setColor(.reset);
try w.writeAll(", ");
- try ir.writeRef(decl, &ref_map, br.then, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, &ref_map, br.then, term);
+ try term.setColor(.reset);
try w.writeAll(", ");
- try ir.writeRef(decl, &ref_map, br.@"else", config, w);
+ try ir.writeRef(decl, &ref_map, br.@"else", term);
try w.writeByte('\n');
},
// .jmp_val => {
@@ -478,91 +481,91 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8,
// },
.@"switch" => {
const @"switch" = data[i].@"switch";
- try config.setColor(w, INST);
+ try term.setColor(INST);
try w.writeAll(" switch ");
- try ir.writeRef(decl, &ref_map, @"switch".target, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, &ref_map, @"switch".target, term);
+ try term.setColor(.reset);
try w.writeAll(" {");
for (@"switch".case_vals[0..@"switch".cases_len], @"switch".case_labels) |val_ref, label_ref| {
try w.writeAll("\n ");
- try ir.writeValue(val_ref, config, w);
- try config.setColor(w, .reset);
+ try ir.writeValue(val_ref, term);
+ try term.setColor(.reset);
try w.writeAll(" => ");
- try writeLabel(decl, &label_map, label_ref, config, w);
- try config.setColor(w, .reset);
+ try writeLabel(decl, &label_map, label_ref, term);
+ try term.setColor(.reset);
}
- try config.setColor(w, LITERAL);
+ try term.setColor(LITERAL);
try w.writeAll("\n default ");
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
try w.writeAll("=> ");
- try writeLabel(decl, &label_map, @"switch".default, config, w);
- try config.setColor(w, .reset);
+ try writeLabel(decl, &label_map, @"switch".default, term);
+ try term.setColor(.reset);
try w.writeAll("\n }\n");
},
.call => {
const call = data[i].call;
- try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w);
+ try ir.writeNewRef(gpa, decl, &ref_map, ref, term);
try w.writeAll("call ");
- try ir.writeRef(decl, &ref_map, call.func, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, &ref_map, call.func, term);
+ try term.setColor(.reset);
try w.writeAll("(");
for (call.args(), 0..) |arg, arg_i| {
if (arg_i != 0) try w.writeAll(", ");
- try ir.writeRef(decl, &ref_map, arg, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, &ref_map, arg, term);
+ try term.setColor(.reset);
}
try w.writeAll(")\n");
},
.alloc => {
const alloc = data[i].alloc;
- try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w);
+ try ir.writeNewRef(gpa, decl, &ref_map, ref, term);
try w.writeAll("alloc ");
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
try w.writeAll("size ");
- try config.setColor(w, LITERAL);
+ try term.setColor(LITERAL);
try w.print("{d}", .{alloc.size});
- try config.setColor(w, ATTRIBUTE);
+ try term.setColor(ATTRIBUTE);
try w.writeAll(" align ");
- try config.setColor(w, LITERAL);
+ try term.setColor(LITERAL);
try w.print("{d}", .{alloc.@"align"});
try w.writeByte('\n');
},
.phi => {
- try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w);
+ try ir.writeNewRef(gpa, decl, &ref_map, ref, term);
try w.writeAll("phi");
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
try w.writeAll(" {");
for (data[i].phi.inputs()) |input| {
try w.writeAll("\n ");
- try writeLabel(decl, &label_map, input.label, config, w);
- try config.setColor(w, .reset);
+ try writeLabel(decl, &label_map, input.label, term);
+ try term.setColor(.reset);
try w.writeAll(" => ");
- try ir.writeRef(decl, &ref_map, input.value, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, &ref_map, input.value, term);
+ try term.setColor(.reset);
}
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
try w.writeAll("\n }\n");
},
.store => {
const bin = data[i].bin;
- try config.setColor(w, INST);
+ try term.setColor(INST);
try w.writeAll(" store ");
- try ir.writeRef(decl, &ref_map, bin.lhs, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, &ref_map, bin.lhs, term);
+ try term.setColor(.reset);
try w.writeAll(", ");
- try ir.writeRef(decl, &ref_map, bin.rhs, config, w);
+ try ir.writeRef(decl, &ref_map, bin.rhs, term);
try w.writeByte('\n');
},
.ret => {
- try config.setColor(w, INST);
+ try term.setColor(INST);
try w.writeAll(" ret ");
- if (data[i].un != .none) try ir.writeRef(decl, &ref_map, data[i].un, config, w);
+ if (data[i].un != .none) try ir.writeRef(decl, &ref_map, data[i].un, term);
try w.writeByte('\n');
},
.load => {
- try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w);
+ try ir.writeNewRef(gpa, decl, &ref_map, ref, term);
try w.writeAll("load ");
- try ir.writeRef(decl, &ref_map, data[i].un, config, w);
+ try ir.writeRef(decl, &ref_map, data[i].un, term);
try w.writeByte('\n');
},
.bit_or,
@@ -583,12 +586,12 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8,
.mod,
=> {
const bin = data[i].bin;
- try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w);
+ try ir.writeNewRef(gpa, decl, &ref_map, ref, term);
try w.print("{s} ", .{@tagName(tag)});
- try ir.writeRef(decl, &ref_map, bin.lhs, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, &ref_map, bin.lhs, term);
+ try term.setColor(.reset);
try w.writeAll(", ");
- try ir.writeRef(decl, &ref_map, bin.rhs, config, w);
+ try ir.writeRef(decl, &ref_map, bin.rhs, term);
try w.writeByte('\n');
},
.bit_not,
@@ -598,33 +601,34 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8,
.sext,
=> {
const un = data[i].un;
- try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w);
+ try ir.writeNewRef(gpa, decl, &ref_map, ref, term);
try w.print("{s} ", .{@tagName(tag)});
- try ir.writeRef(decl, &ref_map, un, config, w);
+ try ir.writeRef(decl, &ref_map, un, term);
try w.writeByte('\n');
},
.label_addr, .jmp_val => {},
}
}
- try config.setColor(w, .reset);
+ try term.setColor(.reset);
try w.writeAll("}\n\n");
}
-fn writeType(ir: Ir, ty_ref: Interner.Ref, config: std.Io.tty.Config, w: *std.Io.Writer) !void {
+fn writeType(ir: Ir, ty_ref: Interner.Ref, term: std.Io.Terminal) !void {
+ const w = term.writer;
const ty = ir.interner.get(ty_ref);
- try config.setColor(w, TYPE);
+ try term.setColor(TYPE);
switch (ty) {
.ptr_ty, .noreturn_ty, .void_ty, .func_ty => try w.writeAll(@tagName(ty)),
.int_ty => |bits| try w.print("i{d}", .{bits}),
.float_ty => |bits| try w.print("f{d}", .{bits}),
.array_ty => |info| {
try w.print("[{d} * ", .{info.len});
- try ir.writeType(info.child, .no_color, w);
+ try ir.writeType(info.child, .{ .mode = .no_color, .writer = w });
try w.writeByte(']');
},
.vector_ty => |info| {
try w.print("<{d} * ", .{info.len});
- try ir.writeType(info.child, .no_color, w);
+ try ir.writeType(info.child, .{ .mode = .no_color, .writer = w });
try w.writeByte('>');
},
.record_ty => |elems| {
@@ -632,7 +636,7 @@ fn writeType(ir: Ir, ty_ref: Interner.Ref, config: std.Io.tty.Config, w: *std.Io
try w.writeAll("{ ");
for (elems, 0..) |elem, i| {
if (i != 0) try w.writeAll(", ");
- try ir.writeType(elem, config, w);
+ try ir.writeType(elem, .{ .mode = .no_color, .writer = w });
}
try w.writeAll(" }");
},
@@ -640,8 +644,9 @@ fn writeType(ir: Ir, ty_ref: Interner.Ref, config: std.Io.tty.Config, w: *std.Io
}
}
-fn writeValue(ir: Ir, val: Interner.Ref, config: std.Io.tty.Config, w: *std.Io.Writer) !void {
- try config.setColor(w, LITERAL);
+fn writeValue(ir: Ir, val: Interner.Ref, term: std.Io.Terminal) !void {
+ const w = term.writer;
+ try term.setColor(LITERAL);
const key = ir.interner.get(val);
switch (key) {
.null => return w.writeAll("nullptr_t"),
@@ -656,43 +661,46 @@ fn writeValue(ir: Ir, val: Interner.Ref, config: std.Io.tty.Config, w: *std.Io.W
}
}
-fn writeRef(ir: Ir, decl: *const Decl, ref_map: *RefMap, ref: Ref, config: std.Io.tty.Config, w: *std.Io.Writer) !void {
+fn writeRef(ir: Ir, decl: *const Decl, ref_map: *RefMap, ref: Ref, term: std.Io.Terminal) !void {
+ const w = term.writer;
assert(ref != .none);
const index = @intFromEnum(ref);
const ty_ref = decl.instructions.items(.ty)[index];
if (decl.instructions.items(.tag)[index] == .constant) {
- try ir.writeType(ty_ref, config, w);
+ try ir.writeType(ty_ref, term);
const v_ref = decl.instructions.items(.data)[index].constant;
try w.writeByte(' ');
- try ir.writeValue(v_ref, config, w);
+ try ir.writeValue(v_ref, term);
return;
} else if (decl.instructions.items(.tag)[index] == .symbol) {
const name = decl.instructions.items(.data)[index].label;
- try ir.writeType(ty_ref, config, w);
- try config.setColor(w, REF);
+ try ir.writeType(ty_ref, term);
+ try term.setColor(REF);
try w.print(" @{s}", .{name});
return;
}
- try ir.writeType(ty_ref, config, w);
- try config.setColor(w, REF);
+ try ir.writeType(ty_ref, term);
+ try term.setColor(REF);
const ref_index = ref_map.getIndex(ref).?;
try w.print(" %{d}", .{ref_index});
}
-fn writeNewRef(ir: Ir, gpa: Allocator, decl: *const Decl, ref_map: *RefMap, ref: Ref, config: std.Io.tty.Config, w: *std.Io.Writer) !void {
+fn writeNewRef(ir: Ir, gpa: Allocator, decl: *const Decl, ref_map: *RefMap, ref: Ref, term: std.Io.Terminal) !void {
+ const w = term.writer;
try ref_map.put(gpa, ref, {});
try w.writeAll(" ");
- try ir.writeRef(decl, ref_map, ref, config, w);
- try config.setColor(w, .reset);
+ try ir.writeRef(decl, ref_map, ref, term);
+ try term.setColor(.reset);
try w.writeAll(" = ");
- try config.setColor(w, INST);
+ try term.setColor(INST);
}
-fn writeLabel(decl: *const Decl, label_map: *RefMap, ref: Ref, config: std.Io.tty.Config, w: *std.Io.Writer) !void {
+fn writeLabel(decl: *const Decl, label_map: *RefMap, ref: Ref, term: std.Io.Terminal) !void {
+ const w = term.writer;
assert(ref != .none);
const index = @intFromEnum(ref);
const label = decl.instructions.items(.data)[index].label;
- try config.setColor(w, REF);
+ try term.setColor(REF);
const label_index = label_map.getIndex(ref).?;
try w.print("{s}.{d}", .{ label, label_index });
}
diff --git a/lib/compiler/aro/backend/Ir/x86/Renderer.zig b/lib/compiler/aro/backend/Ir/x86/Renderer.zig
@@ -21,17 +21,17 @@ const RegisterManager = zig.RegisterManager(Renderer, Register, Ir.Ref, abi.allo
const RegisterBitSet = RegisterManager.RegisterBitSet;
const RegisterClass = struct {
const gp: RegisterBitSet = blk: {
- var set = RegisterBitSet.empty;
+ var set = RegisterBitSet.initEmpty();
for (abi.allocatable_regs, 0..) |reg, index| if (reg.class() == .general_purpose) set.set(index);
break :blk set;
};
const x87: RegisterBitSet = blk: {
- var set = RegisterBitSet.empty;
+ var set = RegisterBitSet.initEmpty();
for (abi.allocatable_regs, 0..) |reg, index| if (reg.class() == .x87) set.set(index);
break :blk set;
};
const sse: RegisterBitSet = blk: {
- var set = RegisterBitSet.empty;
+ var set = RegisterBitSet.initEmpty();
for (abi.allocatable_regs, 0..) |reg, index| if (reg.class() == .sse) set.set(index);
break :blk set;
};
diff --git a/lib/compiler/aro/include/ptrcheck.h b/lib/compiler/aro/include/ptrcheck.h
@@ -0,0 +1,49 @@
+#pragma once
+
+#if defined(__has_feature) && __has_feature(bounds_attributes)
+ #define __has_ptrcheck 1
+#else
+ #define __has_ptrcheck 0
+#endif
+
+#if __has_ptrcheck
+
+#define __single __attribute__((__single__))
+#define __unsafe_indexable __attribute__((__unsafe_indexable__))
+
+#else
+
+#define __single
+#define __unsafe_indexable
+#define __counted_by(N)
+#define __counted_by_or_null(N)
+#define __sized_by(N)
+#define __sized_by_or_null(N)
+#define __ended_by(E)
+
+#define __terminated_by(T)
+#define __null_terminated
+
+/* __ptrcheck_abi_assume_indexable and __ptrcheck_abi_assume_bidi_indexable intentionally not defined */
+#define __ptrcheck_abi_assume_single()
+#define __ptrcheck_abi_assume_unsafe_indexable()
+
+#define __unsafe_forge_bidi_indexable(T, P, S) ((T)(P))
+#define __unsafe_forge_single(T, P) ((T)(P))
+#define __unsafe_forge_terminated_by(T, P, E) ((T)(P))
+#define __unsafe_forge_null_terminated(T, P) ((T)(P))
+
+#define __terminated_by_to_indexable(P) (P)
+#define __unsafe_terminated_by_to_indexable(P) (P)
+#define __null_terminated_to_indexable(P) (P)
+#define __unsafe_null_terminated_to_indexable(P) (P)
+#define __unsafe_terminated_by_from_indexable(T, P, ...) (P)
+#define __unsafe_null_terminated_from_indexable(P, ...) (P)
+
+#define __array_decay_dicards_count_in_parameters
+
+#define __ptrcheck_unavailable
+#define __ptrcheck_unavailable_r(REPLACEMENT)
+
+
+#endif
diff --git a/lib/compiler/aro/main.zig b/lib/compiler/aro/main.zig
@@ -1,8 +1,9 @@
const std = @import("std");
-const Io = std.Io;
-const Allocator = mem.Allocator;
const mem = std.mem;
const process = std.process;
+const Allocator = mem.Allocator;
+const build_options = @import("build_options");
+
const aro = @import("aro");
const Compilation = aro.Compilation;
const Diagnostics = aro.Diagnostics;
@@ -11,14 +12,15 @@ const Toolchain = aro.Toolchain;
const assembly_backend = @import("assembly_backend");
var debug_allocator: std.heap.DebugAllocator(.{
- .stack_trace_frames = 0,
+ .stack_trace_frames = if (build_options.debug_allocations and std.debug.sys_can_stack_trace) 10 else 0,
+ .resize_stack_traces = build_options.debug_allocations,
// A unique value so that when a default-constructed
- // DebugAllocator is incorrectly passed to testing allocator, or
+ // GeneralPurposeAllocator is incorrectly passed to testing allocator, or
// vice versa, panic occurs.
.canary = @truncate(0xc647026dc6875134),
}) = .{};
-pub fn main(init: std.process.Init.Minimal) u8 {
+pub fn main(init: process.Init.Minimal) u8 {
const gpa = if (@import("builtin").link_libc)
std.heap.c_allocator
else
@@ -31,7 +33,10 @@ pub fn main(init: std.process.Init.Minimal) u8 {
defer arena_instance.deinit();
const arena = arena_instance.allocator();
- var threaded: std.Io.Threaded = .init(gpa, .{});
+ var threaded: std.Io.Threaded = .init(gpa, .{
+ .argv0 = .init(init.args),
+ .environ = init.environ,
+ });
defer threaded.deinit();
const io = threaded.io();
@@ -43,7 +48,11 @@ pub fn main(init: std.process.Init.Minimal) u8 {
return 1;
};
- const aro_name = process.executablePathAlloc(io, gpa) catch {
+ var environ_map = std.process.Environ.createMap(init.environ, gpa) catch |err|
+ std.process.fatal("failed to parse environment variables: {t}", .{err});
+ defer environ_map.deinit();
+
+ const aro_name = std.process.executableDirPathAlloc(io, gpa) catch {
std.debug.print("unable to find Aro executable path\n", .{});
if (fast_exit) process.exit(1);
return 1;
@@ -51,15 +60,21 @@ pub fn main(init: std.process.Init.Minimal) u8 {
defer gpa.free(aro_name);
var stderr_buf: [1024]u8 = undefined;
- var stderr = Io.File.stderr().writer(&stderr_buf);
+ var stderr = std.Io.File.stderr().writer(io, &stderr_buf);
var diagnostics: Diagnostics = .{
.output = .{ .to_writer = .{
- .color = .detect(stderr.file),
+ .mode = std.Io.Terminal.Mode.detect(io, stderr.file, false, false) catch .no_color,
.writer = &stderr.interface,
} },
};
- var comp = Compilation.initDefault(gpa, arena, io, &diagnostics, Io.Dir.cwd()) catch |er| switch (er) {
+ var comp = Compilation.init(.{
+ .gpa = gpa,
+ .arena = arena,
+ .io = io,
+ .diagnostics = &diagnostics,
+ .environ_map = &environ_map,
+ }) catch |er| switch (er) {
error.OutOfMemory => {
std.debug.print("out of memory\n", .{});
if (fast_exit) process.exit(1);
@@ -85,6 +100,7 @@ pub fn main(init: std.process.Init.Minimal) u8 {
if (fast_exit) process.exit(1);
return 1;
},
+ error.Canceled => unreachable,
};
if (fast_exit) process.exit(@intFromBool(comp.diagnostics.errors != 0));
return @intFromBool(diagnostics.errors != 0);