| author | |
| committer | |
| log | 68bf81432cd0bafc355821370268eedc91ed8eb7 |
| tree | c994fd653f8d282feacc5bd06ebb25ebfc6ec9bb |
| parent | bc08199ef1f9419b5b8ed4165458783314934266 |
upstream commit 5f5a050569a95ecc40a426f0c3666ae7ef987ede32 files changed, 3686 insertions(+), 2540 deletions(-)
lib/compiler/aro/aro/Attribute.zig+202-116| ... | @@ -7,7 +7,9 @@ const Diagnostics = @import("Diagnostics.zig"); | ... | @@ -7,7 +7,9 @@ const Diagnostics = @import("Diagnostics.zig"); |
| 7 | const Parser = @import("Parser.zig"); | 7 | const Parser = @import("Parser.zig"); |
| 8 | const Tree = @import("Tree.zig"); | 8 | const Tree = @import("Tree.zig"); |
| 9 | const TokenIndex = Tree.TokenIndex; | 9 | const TokenIndex = Tree.TokenIndex; |
| 10 | const QualType = @import("TypeStore.zig").QualType; | 10 | const TypeStore = @import("TypeStore.zig"); |
| 11 | const Type = TypeStore.Type; | ||
| 12 | const QualType = TypeStore.QualType; | ||
| 11 | const Value = @import("Value.zig"); | 13 | const Value = @import("Value.zig"); |
| 12 | 14 | ||
| 13 | const Attribute = @This(); | 15 | const Attribute = @This(); |
| ... | @@ -341,7 +343,6 @@ fn diagnoseField( | ... | @@ -341,7 +343,6 @@ fn diagnoseField( |
| 341 | 343 | ||
| 342 | pub fn diagnose(attr: Tag, arguments: *Arguments, arg_idx: u32, res: Parser.Result, arg_start: TokenIndex, node: Tree.Node, p: *Parser) !bool { | 344 | pub fn diagnose(attr: Tag, arguments: *Arguments, arg_idx: u32, res: Parser.Result, arg_start: TokenIndex, node: Tree.Node, p: *Parser) !bool { |
| 343 | switch (attr) { | 345 | switch (attr) { |
| 344 | .nonnull => return false, | ||
| 345 | inline else => |tag| { | 346 | inline else => |tag| { |
| 346 | const decl = @typeInfo(attributes).@"struct".decls[@intFromEnum(tag)]; | 347 | const decl = @typeInfo(attributes).@"struct".decls[@intFromEnum(tag)]; |
| 347 | const max_arg_count = comptime maxArgCount(tag); | 348 | const max_arg_count = comptime maxArgCount(tag); |
| ... | @@ -529,7 +530,10 @@ const attributes = struct { | ... | @@ -529,7 +530,10 @@ const attributes = struct { |
| 529 | pub const @"noinline" = struct {}; | 530 | pub const @"noinline" = struct {}; |
| 530 | pub const noipa = struct {}; | 531 | pub const noipa = struct {}; |
| 531 | // TODO: arbitrary number of arguments | 532 | // TODO: arbitrary number of arguments |
| 532 | pub const nonnull = struct {}; | 533 | // const nonnull = struct { |
| 534 | // // arg_index: []const u32, | ||
| 535 | // }; | ||
| 536 | // }; | ||
| 533 | pub const nonstring = struct {}; | 537 | pub const nonstring = struct {}; |
| 534 | pub const noplt = struct {}; | 538 | pub const noplt = struct {}; |
| 535 | pub const @"noreturn" = struct {}; | 539 | pub const @"noreturn" = struct {}; |
| ... | @@ -577,6 +581,7 @@ const attributes = struct { | ... | @@ -577,6 +581,7 @@ const attributes = struct { |
| 577 | }; | 581 | }; |
| 578 | } = null, | 582 | } = null, |
| 579 | }; | 583 | }; |
| 584 | pub const single = struct {}; | ||
| 580 | pub const spectre = struct { | 585 | pub const spectre = struct { |
| 581 | arg: enum { | 586 | arg: enum { |
| 582 | nomitigation, | 587 | nomitigation, |
| ... | @@ -618,6 +623,7 @@ const attributes = struct { | ... | @@ -618,6 +623,7 @@ const attributes = struct { |
| 618 | __name_tok: TokenIndex, | 623 | __name_tok: TokenIndex, |
| 619 | }; | 624 | }; |
| 620 | pub const uninitialized = struct {}; | 625 | pub const uninitialized = struct {}; |
| 626 | pub const unsafe_indexable = struct {}; | ||
| 621 | pub const unsequenced = struct {}; | 627 | pub const unsequenced = struct {}; |
| 622 | pub const unused = struct {}; | 628 | pub const unused = struct {}; |
| 623 | pub const used = struct {}; | 629 | pub const used = struct {}; |
| ... | @@ -723,6 +729,7 @@ pub const Arguments = blk: { | ... | @@ -723,6 +729,7 @@ pub const Arguments = blk: { |
| 723 | name.* = decl.name; | 729 | name.* = decl.name; |
| 724 | T.* = @field(attributes, decl.name); | 730 | T.* = @field(attributes, decl.name); |
| 725 | } | 731 | } |
| 732 | |||
| 726 | break :blk @Union(.auto, null, &names, &types, &@splat(.{})); | 733 | break :blk @Union(.auto, null, &names, &types, &@splat(.{})); |
| 727 | }; | 734 | }; |
| 728 | 735 | ||
| ... | @@ -784,15 +791,8 @@ fn ignoredAttrErr(p: *Parser, tok: TokenIndex, attr: Attribute.Tag, context: []c | ... | @@ -784,15 +791,8 @@ fn ignoredAttrErr(p: *Parser, tok: TokenIndex, attr: Attribute.Tag, context: []c |
| 784 | try p.err(tok, .ignored_attribute, .{ @tagName(attr), context }); | 791 | try p.err(tok, .ignored_attribute, .{ @tagName(attr), context }); |
| 785 | } | 792 | } |
| 786 | 793 | ||
| 787 | pub fn applyParameterAttributes(p: *Parser, qt: QualType, attr_buf_start: usize, diagnostic: ?Parser.Diagnostic) !QualType { | 794 | pub const applyParameterAttributes = applyVariableAttributes; |
| 788 | return applyVariableOrParameterAttributes(p, qt, attr_buf_start, diagnostic, .parameter); | ||
| 789 | } | ||
| 790 | |||
| 791 | pub fn applyVariableAttributes(p: *Parser, qt: QualType, attr_buf_start: usize, diagnostic: ?Parser.Diagnostic) !QualType { | 795 | pub fn applyVariableAttributes(p: *Parser, qt: QualType, attr_buf_start: usize, diagnostic: ?Parser.Diagnostic) !QualType { |
| 792 | return applyVariableOrParameterAttributes(p, qt, attr_buf_start, diagnostic, .variable); | ||
| 793 | } | ||
| 794 | |||
| 795 | fn applyVariableOrParameterAttributes(p: *Parser, qt: QualType, attr_buf_start: usize, diagnostic: ?Parser.Diagnostic, context: enum { parameter, variable }) !QualType { | ||
| 796 | const gpa = p.comp.gpa; | 796 | const gpa = p.comp.gpa; |
| 797 | const attrs = p.attr_buf.items(.attr)[attr_buf_start..]; | 797 | const attrs = p.attr_buf.items(.attr)[attr_buf_start..]; |
| 798 | const toks = p.attr_buf.items(.tok)[attr_buf_start..]; | 798 | const toks = p.attr_buf.items(.tok)[attr_buf_start..]; |
| ... | @@ -804,6 +804,7 @@ fn applyVariableOrParameterAttributes(p: *Parser, qt: QualType, attr_buf_start: | ... | @@ -804,6 +804,7 @@ fn applyVariableOrParameterAttributes(p: *Parser, qt: QualType, attr_buf_start: |
| 804 | // zig fmt: off | 804 | // zig fmt: off |
| 805 | .alias, .may_alias, .deprecated, .unavailable, .unused, .warn_if_not_aligned, .weak, .used, | 805 | .alias, .may_alias, .deprecated, .unavailable, .unused, .warn_if_not_aligned, .weak, .used, |
| 806 | .noinit, .retain, .persistent, .section, .mode, .asm_label, .nullability, .unaligned, .selectany, .internal_linkage, | 806 | .noinit, .retain, .persistent, .section, .mode, .asm_label, .nullability, .unaligned, .selectany, .internal_linkage, |
| 807 | .visibility, | ||
| 807 | => try p.attr_application_buf.append(gpa, attr), | 808 | => try p.attr_application_buf.append(gpa, attr), |
| 808 | // zig fmt: on | 809 | // zig fmt: on |
| 809 | .common => if (nocommon) { | 810 | .common => if (nocommon) { |
| ... | @@ -820,12 +821,6 @@ fn applyVariableOrParameterAttributes(p: *Parser, qt: QualType, attr_buf_start: | ... | @@ -820,12 +821,6 @@ fn applyVariableOrParameterAttributes(p: *Parser, qt: QualType, attr_buf_start: |
| 820 | }, | 821 | }, |
| 821 | .vector_size => try attr.applyVectorSize(p, tok, &base_qt), | 822 | .vector_size => try attr.applyVectorSize(p, tok, &base_qt), |
| 822 | .aligned => try attr.applyAligned(p, base_qt, diagnostic), | 823 | .aligned => try attr.applyAligned(p, base_qt, diagnostic), |
| 823 | .nonnull => { | ||
| 824 | switch (context) { | ||
| 825 | .parameter => try p.err(tok, .attribute_todo, .{ "nonnull", "parameters" }), | ||
| 826 | .variable => try p.err(tok, .nonnull_not_applicable, .{}), | ||
| 827 | } | ||
| 828 | }, | ||
| 829 | .nonstring => { | 824 | .nonstring => { |
| 830 | if (base_qt.get(p.comp, .array)) |array_ty| { | 825 | if (base_qt.get(p.comp, .array)) |array_ty| { |
| 831 | if (array_ty.elem.get(p.comp, .int)) |int_ty| switch (int_ty) { | 826 | 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: | ... | @@ -848,11 +843,28 @@ fn applyVariableOrParameterAttributes(p: *Parser, qt: QualType, attr_buf_start: |
| 848 | } else { | 843 | } else { |
| 849 | try p.attr_application_buf.append(gpa, attr); | 844 | try p.attr_application_buf.append(gpa, attr); |
| 850 | }, | 845 | }, |
| 851 | .calling_convention => try applyCallingConvention(attr, p, tok, base_qt), | 846 | .single, |
| 847 | .unsafe_indexable, | ||
| 848 | => try applyBoundsSafetyAttr(.fromTag(attr.tag), p, tok, &base_qt), | ||
| 849 | |||
| 850 | .calling_convention => try applyKeywordCallingConvention(attr, p, tok, base_qt), | ||
| 851 | |||
| 852 | .fastcall, | ||
| 853 | .stdcall, | ||
| 854 | .thiscall, | ||
| 855 | .vectorcall, | ||
| 856 | .cdecl, | ||
| 857 | .pcs, | ||
| 858 | .riscv_vector_cc, | ||
| 859 | .aarch64_sve_pcs, | ||
| 860 | .aarch64_vector_pcs, | ||
| 861 | .sysv_abi, | ||
| 862 | .ms_abi, | ||
| 863 | => try applyGnuAttrCallingConvention(attr, p, tok, base_qt), | ||
| 864 | |||
| 852 | .alloc_size, | 865 | .alloc_size, |
| 853 | .copy, | 866 | .copy, |
| 854 | .tls_model, | 867 | .tls_model, |
| 855 | .visibility, | ||
| 856 | => |t| try p.err(tok, .attribute_todo, .{ @tagName(t), "variables" }), | 868 | => |t| try p.err(tok, .attribute_todo, .{ @tagName(t), "variables" }), |
| 857 | // There is already an error in Parser for _Noreturn keyword | 869 | // There is already an error in Parser for _Noreturn keyword |
| 858 | .noreturn => if (attr.syntax != .keyword) try ignoredAttrErr(p, tok, attr.tag, "variables"), | 870 | .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 | ... | @@ -903,7 +915,25 @@ pub fn applyTypeAttributes(p: *Parser, qt: QualType, attr_buf_start: usize, diag |
| 903 | } else { | 915 | } else { |
| 904 | try p.err(tok, .designated_init_invalid, .{}); | 916 | try p.err(tok, .designated_init_invalid, .{}); |
| 905 | }, | 917 | }, |
| 906 | .calling_convention => try applyCallingConvention(attr, p, tok, base_qt), | 918 | .calling_convention => try applyKeywordCallingConvention(attr, p, tok, base_qt), |
| 919 | |||
| 920 | .fastcall, | ||
| 921 | .stdcall, | ||
| 922 | .thiscall, | ||
| 923 | .vectorcall, | ||
| 924 | .cdecl, | ||
| 925 | .pcs, | ||
| 926 | .riscv_vector_cc, | ||
| 927 | .aarch64_sve_pcs, | ||
| 928 | .aarch64_vector_pcs, | ||
| 929 | .sysv_abi, | ||
| 930 | .ms_abi, | ||
| 931 | => try applyGnuAttrCallingConvention(attr, p, tok, base_qt), | ||
| 932 | |||
| 933 | .single, | ||
| 934 | .unsafe_indexable, | ||
| 935 | => try applyBoundsSafetyAttr(.fromTag(attr.tag), p, tok, &base_qt), | ||
| 936 | |||
| 907 | .alloc_size, | 937 | .alloc_size, |
| 908 | .copy, | 938 | .copy, |
| 909 | .scalar_storage_order, | 939 | .scalar_storage_order, |
| ... | @@ -931,6 +961,7 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize) | ... | @@ -931,6 +961,7 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize) |
| 931 | .@"const", .warn_unused_result, .section, .returns_nonnull, .returns_twice, .@"error", | 961 | .@"const", .warn_unused_result, .section, .returns_nonnull, .returns_twice, .@"error", |
| 932 | .externally_visible, .retain, .flatten, .gnu_inline, .alias, .asm_label, .nodiscard, | 962 | .externally_visible, .retain, .flatten, .gnu_inline, .alias, .asm_label, .nodiscard, |
| 933 | .reproducible, .unsequenced, .nothrow, .nullability, .unaligned, .internal_linkage, | 963 | .reproducible, .unsequenced, .nothrow, .nullability, .unaligned, .internal_linkage, |
| 964 | .visibility, | ||
| 934 | => try p.attr_application_buf.append(gpa, attr), | 965 | => try p.attr_application_buf.append(gpa, attr), |
| 935 | // zig fmt: on | 966 | // zig fmt: on |
| 936 | .hot => if (cold) { | 967 | .hot => if (cold) { |
| ... | @@ -959,97 +990,21 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize) | ... | @@ -959,97 +990,21 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize) |
| 959 | }, | 990 | }, |
| 960 | .aligned => try attr.applyAligned(p, base_qt, null), | 991 | .aligned => try attr.applyAligned(p, base_qt, null), |
| 961 | .format => try attr.applyFormat(p, base_qt), | 992 | .format => try attr.applyFormat(p, base_qt), |
| 962 | .calling_convention => try applyCallingConvention(attr, p, tok, base_qt), | 993 | .calling_convention => try applyKeywordCallingConvention(attr, p, tok, base_qt), |
| 963 | .fastcall => if (p.comp.target.cpu.arch == .x86) { | 994 | |
| 964 | try p.attr_application_buf.append(gpa, .{ | 995 | .fastcall, |
| 965 | .tag = .calling_convention, | 996 | .stdcall, |
| 966 | .args = .{ .calling_convention = .{ .cc = .fastcall } }, | 997 | .thiscall, |
| 967 | .syntax = attr.syntax, | 998 | .vectorcall, |
| 968 | }); | 999 | .cdecl, |
| 969 | } else { | 1000 | .pcs, |
| 970 | try p.err(tok, .callconv_not_supported, .{"fastcall"}); | 1001 | .riscv_vector_cc, |
| 971 | }, | 1002 | .aarch64_sve_pcs, |
| 972 | .stdcall => if (p.comp.target.cpu.arch == .x86) { | 1003 | .aarch64_vector_pcs, |
| 973 | try p.attr_application_buf.append(gpa, .{ | 1004 | .sysv_abi, |
| 974 | .tag = .calling_convention, | 1005 | .ms_abi, |
| 975 | .args = .{ .calling_convention = .{ .cc = .stdcall } }, | 1006 | => try applyGnuAttrCallingConvention(attr, p, tok, base_qt), |
| 976 | .syntax = attr.syntax, | 1007 | |
| 977 | }); | ||
| 978 | } else { | ||
| 979 | try p.err(tok, .callconv_not_supported, .{"stdcall"}); | ||
| 980 | }, | ||
| 981 | .thiscall => if (p.comp.target.cpu.arch == .x86) { | ||
| 982 | try p.attr_application_buf.append(gpa, .{ | ||
| 983 | .tag = .calling_convention, | ||
| 984 | .args = .{ .calling_convention = .{ .cc = .thiscall } }, | ||
| 985 | .syntax = attr.syntax, | ||
| 986 | }); | ||
| 987 | } else { | ||
| 988 | try p.err(tok, .callconv_not_supported, .{"thiscall"}); | ||
| 989 | }, | ||
| 990 | .vectorcall => if (p.comp.target.cpu.arch == .x86 or p.comp.target.cpu.arch.isAARCH64()) { | ||
| 991 | try p.attr_application_buf.append(gpa, .{ | ||
| 992 | .tag = .calling_convention, | ||
| 993 | .args = .{ .calling_convention = .{ .cc = .vectorcall } }, | ||
| 994 | .syntax = attr.syntax, | ||
| 995 | }); | ||
| 996 | } else { | ||
| 997 | try p.err(tok, .callconv_not_supported, .{"vectorcall"}); | ||
| 998 | }, | ||
| 999 | .cdecl => {}, | ||
| 1000 | .pcs => if (p.comp.target.cpu.arch.isArm()) { | ||
| 1001 | try p.attr_application_buf.append(gpa, .{ | ||
| 1002 | .tag = .calling_convention, | ||
| 1003 | .args = .{ .calling_convention = .{ .cc = switch (attr.args.pcs.kind) { | ||
| 1004 | .aapcs => .arm_aapcs, | ||
| 1005 | .@"aapcs-vfp" => .arm_aapcs_vfp, | ||
| 1006 | } } }, | ||
| 1007 | .syntax = attr.syntax, | ||
| 1008 | }); | ||
| 1009 | } else { | ||
| 1010 | try p.err(tok, .callconv_not_supported, .{"pcs"}); | ||
| 1011 | }, | ||
| 1012 | .riscv_vector_cc => if (p.comp.target.cpu.arch.isRISCV()) { | ||
| 1013 | try p.attr_application_buf.append(gpa, .{ | ||
| 1014 | .tag = .calling_convention, | ||
| 1015 | .args = .{ .calling_convention = .{ .cc = .riscv_vector } }, | ||
| 1016 | .syntax = attr.syntax, | ||
| 1017 | }); | ||
| 1018 | } else { | ||
| 1019 | try p.err(tok, .callconv_not_supported, .{"pcs"}); | ||
| 1020 | }, | ||
| 1021 | .aarch64_sve_pcs => if (p.comp.target.cpu.arch.isAARCH64()) { | ||
| 1022 | try p.attr_application_buf.append(gpa, .{ | ||
| 1023 | .tag = .calling_convention, | ||
| 1024 | .args = .{ .calling_convention = .{ .cc = .aarch64_sve_pcs } }, | ||
| 1025 | .syntax = attr.syntax, | ||
| 1026 | }); | ||
| 1027 | } else { | ||
| 1028 | try p.err(tok, .callconv_not_supported, .{"pcs"}); | ||
| 1029 | }, | ||
| 1030 | .aarch64_vector_pcs => if (p.comp.target.cpu.arch.isAARCH64()) { | ||
| 1031 | try p.attr_application_buf.append(gpa, .{ | ||
| 1032 | .tag = .calling_convention, | ||
| 1033 | .args = .{ .calling_convention = .{ .cc = .aarch64_vector_pcs } }, | ||
| 1034 | .syntax = attr.syntax, | ||
| 1035 | }); | ||
| 1036 | } else { | ||
| 1037 | try p.err(tok, .callconv_not_supported, .{"pcs"}); | ||
| 1038 | }, | ||
| 1039 | .sysv_abi => if (p.comp.target.cpu.arch == .x86_64 and p.comp.target.os.tag == .windows) { | ||
| 1040 | try p.attr_application_buf.append(gpa, .{ | ||
| 1041 | .tag = .calling_convention, | ||
| 1042 | .args = .{ .calling_convention = .{ .cc = .x86_64_sysv } }, | ||
| 1043 | .syntax = attr.syntax, | ||
| 1044 | }); | ||
| 1045 | }, | ||
| 1046 | .ms_abi => if (p.comp.target.cpu.arch == .x86_64 and p.comp.target.os.tag != .windows) { | ||
| 1047 | try p.attr_application_buf.append(gpa, .{ | ||
| 1048 | .tag = .calling_convention, | ||
| 1049 | .args = .{ .calling_convention = .{ .cc = .x86_64_win } }, | ||
| 1050 | .syntax = attr.syntax, | ||
| 1051 | }); | ||
| 1052 | }, | ||
| 1053 | .malloc => { | 1008 | .malloc => { |
| 1054 | if (base_qt.get(p.comp, .func).?.return_type.isPointer(p.comp)) { | 1009 | if (base_qt.get(p.comp, .func).?.return_type.isPointer(p.comp)) { |
| 1055 | try p.attr_application_buf.append(gpa, attr); | 1010 | try p.attr_application_buf.append(gpa, attr); |
| ... | @@ -1102,7 +1057,7 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize) | ... | @@ -1102,7 +1057,7 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize) |
| 1102 | .no_stack_protector, | 1057 | .no_stack_protector, |
| 1103 | .noclone, | 1058 | .noclone, |
| 1104 | .noipa, | 1059 | .noipa, |
| 1105 | .nonnull, | 1060 | // .nonnull, |
| 1106 | .noplt, | 1061 | .noplt, |
| 1107 | // .optimize, | 1062 | // .optimize, |
| 1108 | .patchable_function_entry, | 1063 | .patchable_function_entry, |
| ... | @@ -1112,7 +1067,6 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize) | ... | @@ -1112,7 +1067,6 @@ pub fn applyFunctionAttributes(p: *Parser, qt: QualType, attr_buf_start: usize) |
| 1112 | .symver, | 1067 | .symver, |
| 1113 | .target, | 1068 | .target, |
| 1114 | .target_clones, | 1069 | .target_clones, |
| 1115 | .visibility, | ||
| 1116 | .weakref, | 1070 | .weakref, |
| 1117 | .zero_call_used_regs, | 1071 | .zero_call_used_regs, |
| 1118 | => |t| try p.err(tok, .attribute_todo, .{ @tagName(t), "functions" }), | 1072 | => |t| try p.err(tok, .attribute_todo, .{ @tagName(t), "functions" }), |
| ... | @@ -1262,9 +1216,129 @@ fn applyFormat(attr: Attribute, p: *Parser, qt: QualType) !void { | ... | @@ -1262,9 +1216,129 @@ fn applyFormat(attr: Attribute, p: *Parser, qt: QualType) !void { |
| 1262 | try p.attr_application_buf.append(p.comp.gpa, attr); | 1216 | try p.attr_application_buf.append(p.comp.gpa, attr); |
| 1263 | } | 1217 | } |
| 1264 | 1218 | ||
| 1265 | fn applyCallingConvention(attr: Attribute, p: *Parser, tok: TokenIndex, qt: QualType) !void { | 1219 | /// These come from GNU attributes like __attribute__((sysv_abi)) |
| 1266 | if (!qt.is(p.comp, .func)) { | 1220 | fn applyGnuAttrCallingConvention(attr: Attribute, p: *Parser, tok: TokenIndex, qt: QualType) !void { |
| 1267 | return p.err(tok, .callconv_non_func, .{ p.tok_ids[tok].symbol(), qt }); | 1221 | if (!qt.isCallable(p.comp)) { |
| 1222 | return p.err(tok, .callconv_non_func, .{ p.tokSlice(tok), qt }); | ||
| 1223 | } | ||
| 1224 | const gpa = p.comp.gpa; | ||
| 1225 | switch (attr.tag) { | ||
| 1226 | .fastcall => if (p.comp.target.cpu.arch == .x86) { | ||
| 1227 | try p.attr_application_buf.append(gpa, .{ | ||
| 1228 | .tag = .calling_convention, | ||
| 1229 | .args = .{ .calling_convention = .{ .cc = .fastcall } }, | ||
| 1230 | .syntax = attr.syntax, | ||
| 1231 | }); | ||
| 1232 | } else { | ||
| 1233 | try p.err(tok, .callconv_not_supported, .{"fastcall"}); | ||
| 1234 | }, | ||
| 1235 | .stdcall => if (p.comp.target.cpu.arch == .x86) { | ||
| 1236 | try p.attr_application_buf.append(gpa, .{ | ||
| 1237 | .tag = .calling_convention, | ||
| 1238 | .args = .{ .calling_convention = .{ .cc = .stdcall } }, | ||
| 1239 | .syntax = attr.syntax, | ||
| 1240 | }); | ||
| 1241 | } else { | ||
| 1242 | try p.err(tok, .callconv_not_supported, .{"stdcall"}); | ||
| 1243 | }, | ||
| 1244 | .thiscall => if (p.comp.target.cpu.arch == .x86) { | ||
| 1245 | try p.attr_application_buf.append(gpa, .{ | ||
| 1246 | .tag = .calling_convention, | ||
| 1247 | .args = .{ .calling_convention = .{ .cc = .thiscall } }, | ||
| 1248 | .syntax = attr.syntax, | ||
| 1249 | }); | ||
| 1250 | } else { | ||
| 1251 | try p.err(tok, .callconv_not_supported, .{"thiscall"}); | ||
| 1252 | }, | ||
| 1253 | .vectorcall => if (p.comp.target.cpu.arch == .x86 or p.comp.target.cpu.arch.isAARCH64()) { | ||
| 1254 | try p.attr_application_buf.append(gpa, .{ | ||
| 1255 | .tag = .calling_convention, | ||
| 1256 | .args = .{ .calling_convention = .{ .cc = .vectorcall } }, | ||
| 1257 | .syntax = attr.syntax, | ||
| 1258 | }); | ||
| 1259 | } else { | ||
| 1260 | try p.err(tok, .callconv_not_supported, .{"vectorcall"}); | ||
| 1261 | }, | ||
| 1262 | .cdecl => {}, | ||
| 1263 | .pcs => if (p.comp.target.cpu.arch.isArm()) { | ||
| 1264 | try p.attr_application_buf.append(gpa, .{ | ||
| 1265 | .tag = .calling_convention, | ||
| 1266 | .args = .{ .calling_convention = .{ .cc = switch (attr.args.pcs.kind) { | ||
| 1267 | .aapcs => .arm_aapcs, | ||
| 1268 | .@"aapcs-vfp" => .arm_aapcs_vfp, | ||
| 1269 | } } }, | ||
| 1270 | .syntax = attr.syntax, | ||
| 1271 | }); | ||
| 1272 | } else { | ||
| 1273 | try p.err(tok, .callconv_not_supported, .{"pcs"}); | ||
| 1274 | }, | ||
| 1275 | .riscv_vector_cc => if (p.comp.target.cpu.arch.isRISCV()) { | ||
| 1276 | try p.attr_application_buf.append(gpa, .{ | ||
| 1277 | .tag = .calling_convention, | ||
| 1278 | .args = .{ .calling_convention = .{ .cc = .riscv_vector } }, | ||
| 1279 | .syntax = attr.syntax, | ||
| 1280 | }); | ||
| 1281 | } else { | ||
| 1282 | try p.err(tok, .callconv_not_supported, .{"pcs"}); | ||
| 1283 | }, | ||
| 1284 | .aarch64_sve_pcs => if (p.comp.target.cpu.arch.isAARCH64()) { | ||
| 1285 | try p.attr_application_buf.append(gpa, .{ | ||
| 1286 | .tag = .calling_convention, | ||
| 1287 | .args = .{ .calling_convention = .{ .cc = .aarch64_sve_pcs } }, | ||
| 1288 | .syntax = attr.syntax, | ||
| 1289 | }); | ||
| 1290 | } else { | ||
| 1291 | try p.err(tok, .callconv_not_supported, .{"pcs"}); | ||
| 1292 | }, | ||
| 1293 | .aarch64_vector_pcs => if (p.comp.target.cpu.arch.isAARCH64()) { | ||
| 1294 | try p.attr_application_buf.append(gpa, .{ | ||
| 1295 | .tag = .calling_convention, | ||
| 1296 | .args = .{ .calling_convention = .{ .cc = .aarch64_vector_pcs } }, | ||
| 1297 | .syntax = attr.syntax, | ||
| 1298 | }); | ||
| 1299 | } else { | ||
| 1300 | try p.err(tok, .callconv_not_supported, .{"pcs"}); | ||
| 1301 | }, | ||
| 1302 | .sysv_abi => if (p.comp.target.cpu.arch == .x86_64 and p.comp.target.os.tag == .windows) { | ||
| 1303 | try p.attr_application_buf.append(gpa, .{ | ||
| 1304 | .tag = .calling_convention, | ||
| 1305 | .args = .{ .calling_convention = .{ .cc = .x86_64_sysv } }, | ||
| 1306 | .syntax = attr.syntax, | ||
| 1307 | }); | ||
| 1308 | }, | ||
| 1309 | .ms_abi => if (p.comp.target.cpu.arch == .x86_64 and p.comp.target.os.tag != .windows) { | ||
| 1310 | try p.attr_application_buf.append(gpa, .{ | ||
| 1311 | .tag = .calling_convention, | ||
| 1312 | .args = .{ .calling_convention = .{ .cc = .x86_64_win } }, | ||
| 1313 | .syntax = attr.syntax, | ||
| 1314 | }); | ||
| 1315 | }, | ||
| 1316 | else => unreachable, | ||
| 1317 | } | ||
| 1318 | } | ||
| 1319 | |||
| 1320 | fn applyBoundsSafetyAttr(bounds: Type.Pointer.Bounds, p: *Parser, tok: TokenIndex, qt: *QualType) !void { | ||
| 1321 | if (qt.isInvalid()) return; | ||
| 1322 | const pointer = qt.get(p.comp, .pointer) orelse { | ||
| 1323 | return p.err(tok, .attribute_requires_pointer, .{@tagName(bounds)}); | ||
| 1324 | }; | ||
| 1325 | if (pointer.bounds == bounds) { | ||
| 1326 | return p.err(tok, .redundant_bounds_annotation, .{@tagName(bounds)}); | ||
| 1327 | } | ||
| 1328 | if (pointer.bounds != .c) { | ||
| 1329 | return p.err(tok, .multiple_bounds_annotations, .{}); | ||
| 1330 | } | ||
| 1331 | qt.* = try p.comp.type_store.put(p.comp.gpa, .{ .pointer = .{ | ||
| 1332 | .child = pointer.child, | ||
| 1333 | .decayed = pointer.decayed, | ||
| 1334 | .bounds = bounds, | ||
| 1335 | } }); | ||
| 1336 | } | ||
| 1337 | |||
| 1338 | /// These come from explicit MSVC keywords like __stdcall, __fastcall, etc | ||
| 1339 | fn applyKeywordCallingConvention(attr: Attribute, p: *Parser, tok: TokenIndex, qt: QualType) !void { | ||
| 1340 | if (!qt.isCallable(p.comp)) { | ||
| 1341 | return p.err(tok, .callconv_non_func, .{ p.tokSlice(tok), qt }); | ||
| 1268 | } | 1342 | } |
| 1269 | switch (attr.args.calling_convention.cc) { | 1343 | switch (attr.args.calling_convention.cc) { |
| 1270 | .c => {}, | 1344 | .c => {}, |
| ... | @@ -1295,3 +1369,15 @@ fn applySelected(qt: QualType, p: *Parser) !QualType { | ... | @@ -1295,3 +1369,15 @@ fn applySelected(qt: QualType, p: *Parser) !QualType { |
| 1295 | .attributes = p.attr_application_buf.items, | 1369 | .attributes = p.attr_application_buf.items, |
| 1296 | } })).withQualifiers(qt); | 1370 | } })).withQualifiers(qt); |
| 1297 | } | 1371 | } |
| 1372 | |||
| 1373 | pub fn visibilityFromString(s: []const u8) ?std.builtin.SymbolVisibility { | ||
| 1374 | if (mem.eql(u8, s, "internal")) { | ||
| 1375 | return .hidden; | ||
| 1376 | } | ||
| 1377 | const visibility = std.meta.stringToEnum(std.builtin.SymbolVisibility, s) orelse return null; | ||
| 1378 | // compiler will notify us if .internal is added as a visibility type | ||
| 1379 | switch (visibility) { | ||
| 1380 | .default, .hidden, .protected => {}, | ||
| 1381 | } | ||
| 1382 | return visibility; | ||
| 1383 | } |
lib/compiler/aro/aro/Attribute/names.zig+604-589| ... | @@ -99,6 +99,7 @@ pub const Tag = enum(u16) { aarch64_sve_pcs, | ... | @@ -99,6 +99,7 @@ pub const Tag = enum(u16) { aarch64_sve_pcs, |
| 99 | selectany, | 99 | selectany, |
| 100 | sentinel, | 100 | sentinel, |
| 101 | simd, | 101 | simd, |
| 102 | single, | ||
| 102 | spectre, | 103 | spectre, |
| 103 | stack_protect, | 104 | stack_protect, |
| 104 | stdcall, | 105 | stdcall, |
| ... | @@ -112,6 +113,7 @@ pub const Tag = enum(u16) { aarch64_sve_pcs, | ... | @@ -112,6 +113,7 @@ pub const Tag = enum(u16) { aarch64_sve_pcs, |
| 112 | transparent_union, | 113 | transparent_union, |
| 113 | unavailable, | 114 | unavailable, |
| 114 | uninitialized, | 115 | uninitialized, |
| 116 | unsafe_indexable, | ||
| 115 | unsequenced, | 117 | unsequenced, |
| 116 | unused, | 118 | unused, |
| 117 | used, | 119 | used, |
| ... | @@ -181,7 +183,7 @@ pub const longest_name = 30; | ... | @@ -181,7 +183,7 @@ pub const longest_name = 30; |
| 181 | /// If found, returns the index of the node within the `dafsa` array. | 183 | /// If found, returns the index of the node within the `dafsa` array. |
| 182 | /// Otherwise, returns `null`. | 184 | /// Otherwise, returns `null`. |
| 183 | pub fn findInList(first_child_index: u16, char: u8) ?u16 { | 185 | pub fn findInList(first_child_index: u16, char: u8) ?u16 { |
| 184 | @setEvalBranchQuota(234); | 186 | @setEvalBranchQuota(238); |
| 185 | var index = first_child_index; | 187 | var index = first_child_index; |
| 186 | while (true) { | 188 | while (true) { |
| 187 | if (dafsa[index].char == char) return index; | 189 | if (dafsa[index].char == char) return index; |
| ... | @@ -290,9 +292,9 @@ const dafsa = [_]Node{ | ... | @@ -290,9 +292,9 @@ const dafsa = [_]Node{ |
| 290 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 25, .child_index = 47 }, | 292 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 25, .child_index = 47 }, |
| 291 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 49 }, | 293 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 49 }, |
| 292 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 54 }, | 294 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 54 }, |
| 293 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 11, .child_index = 56 }, | 295 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 56 }, |
| 294 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 63 }, | 296 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 63 }, |
| 295 | .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 67 }, | 297 | .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 7, .child_index = 67 }, |
| 296 | .{ .char = 'v', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 70 }, | 298 | .{ .char = 'v', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 70 }, |
| 297 | .{ .char = 'w', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 72 }, | 299 | .{ .char = 'w', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 72 }, |
| 298 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 74 }, | 300 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 74 }, |
| ... | @@ -334,642 +336,653 @@ const dafsa = [_]Node{ | ... | @@ -334,642 +336,653 @@ const dafsa = [_]Node{ |
| 334 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 130 }, | 336 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 130 }, |
| 335 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 131 }, | 337 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 131 }, |
| 336 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 132 }, | 338 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 132 }, |
| 337 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 135 }, | 339 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 135 }, |
| 338 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 136 }, | 340 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 137 }, |
| 339 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 137 }, | 341 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 138 }, |
| 340 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 139 }, | 342 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 140 }, |
| 341 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 141 }, | 343 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 142 }, |
| 342 | .{ .char = 'h', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 142 }, | 344 | .{ .char = 'h', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 143 }, |
| 343 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 144 }, | 345 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 145 }, |
| 344 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 145 }, | 346 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 146 }, |
| 345 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 146 }, | 347 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 147 }, |
| 346 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 150 }, | 348 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 151 }, |
| 347 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 }, | 349 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 152 }, |
| 348 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 152 }, | 350 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 153 }, |
| 349 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 153 }, | 351 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 154 }, |
| 350 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 154 }, | 352 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 155 }, |
| 351 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 155 }, | 353 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 156 }, |
| 352 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 156 }, | 354 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 157 }, |
| 353 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 157 }, | 355 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 158 }, |
| 354 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 158 }, | 356 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 159 }, |
| 355 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 159 }, | 357 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 160 }, |
| 356 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 161 }, | 358 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 162 }, |
| 357 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 162 }, | 359 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 163 }, |
| 358 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 163 }, | 360 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 164 }, |
| 359 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 164 }, | 361 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 165 }, |
| 360 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 165 }, | 362 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 166 }, |
| 361 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 166 }, | 363 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 167 }, |
| 362 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 167 }, | ||
| 363 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 168 }, | 364 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 168 }, |
| 364 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 169 }, | 365 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 169 }, |
| 365 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 170 }, | 366 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 170 }, |
| 366 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 171 }, | 367 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 171 }, |
| 367 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 172 }, | 368 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 172 }, |
| 368 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 173 }, | 369 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 173 }, |
| 369 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 174 }, | 370 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 174 }, |
| 370 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 175 }, | 371 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 175 }, |
| 371 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 177 }, | 372 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 176 }, |
| 372 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 179 }, | 373 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 178 }, |
| 373 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 180 }, | 374 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 180 }, |
| 374 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 181 }, | 375 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 181 }, |
| 375 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 182 }, | 376 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 182 }, |
| 376 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 183 }, | 377 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 183 }, |
| 377 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 184 }, | 378 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 184 }, |
| 378 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 185 }, | 379 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 185 }, |
| 379 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | ||
| 380 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 186 }, | 380 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 186 }, |
| 381 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 187 }, | 381 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 382 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 188 }, | 382 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 187 }, |
| 383 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 189 }, | 383 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 188 }, |
| 384 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 190 }, | 384 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 189 }, |
| 385 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 191 }, | 385 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 190 }, |
| 386 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 }, | 386 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 191 }, |
| 387 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 }, | 387 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 192 }, |
| 388 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 }, | 388 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 }, |
| 389 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 13, .child_index = 195 }, | 389 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 195 }, |
| 390 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 200 }, | 390 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 }, |
| 391 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 201 }, | 391 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 13, .child_index = 196 }, |
| 392 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 203 }, | 392 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 201 }, |
| 393 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 204 }, | 393 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 202 }, |
| 394 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 206 }, | 394 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 204 }, |
| 395 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 207 }, | 395 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 205 }, |
| 396 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 208 }, | 396 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 207 }, |
| 397 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 209 }, | 397 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 208 }, |
| 398 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 110 }, | 398 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 209 }, |
| 399 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 210 }, | 399 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 210 }, |
| 400 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 110 }, | ||
| 401 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 211 }, | ||
| 400 | .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 402 | .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 401 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 211 }, | 403 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 212 }, |
| 402 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 76 }, | 404 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 76 }, |
| 403 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 }, | 405 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 }, |
| 404 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 212 }, | 406 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 213 }, |
| 405 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 213 }, | 407 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 214 }, |
| 406 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 214 }, | 408 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 215 }, |
| 407 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 216 }, | 409 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 217 }, |
| 408 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 217 }, | 410 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 218 }, |
| 409 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 218 }, | 411 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 219 }, |
| 410 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 219 }, | 412 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 220 }, |
| 411 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 220 }, | 413 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 221 }, |
| 412 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 221 }, | 414 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 222 }, |
| 413 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 }, | 415 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 171 }, |
| 414 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 222 }, | 416 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 223 }, |
| 415 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 223 }, | 417 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 224 }, |
| 416 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 224 }, | 418 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 225 }, |
| 417 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 225 }, | 419 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 226 }, |
| 418 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 226 }, | 420 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 227 }, |
| 419 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 227 }, | 421 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 228 }, |
| 420 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 228 }, | 422 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 229 }, |
| 421 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 229 }, | 423 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 230 }, |
| 422 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 230 }, | 424 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 231 }, |
| 423 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 231 }, | 425 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 232 }, |
| 424 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 232 }, | 426 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 233 }, |
| 425 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 233 }, | 427 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 234 }, |
| 426 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 234 }, | 428 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 235 }, |
| 427 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 235 }, | 429 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 236 }, |
| 428 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 }, | 430 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 238 }, |
| 429 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 }, | 431 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 }, |
| 430 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 236 }, | 432 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 }, |
| 431 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 237 }, | 433 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 239 }, |
| 432 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 238 }, | 434 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 240 }, |
| 433 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 239 }, | 435 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 241 }, |
| 434 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 240 }, | 436 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 242 }, |
| 435 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 241 }, | 437 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 243 }, |
| 436 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 242 }, | 438 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 244 }, |
| 439 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 245 }, | ||
| 437 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 122 }, | 440 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 122 }, |
| 438 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 243 }, | 441 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 246 }, |
| 439 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 244 }, | 442 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 247 }, |
| 440 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 245 }, | 443 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 248 }, |
| 441 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 246 }, | 444 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 249 }, |
| 442 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 247 }, | 445 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 250 }, |
| 443 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 248 }, | 446 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 251 }, |
| 444 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 249 }, | 447 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 252 }, |
| 445 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 250 }, | 448 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 }, |
| 446 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 251 }, | 449 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 254 }, |
| 447 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 252 }, | 450 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 255 }, |
| 448 | .{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 451 | .{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 449 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 }, | 452 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 256 }, |
| 450 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 254 }, | 453 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 257 }, |
| 451 | .{ .char = 'y', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 454 | .{ .char = 'y', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 452 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 255 }, | 455 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 258 }, |
| 453 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 256 }, | 456 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 259 }, |
| 454 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 257 }, | 457 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 260 }, |
| 455 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 258 }, | 458 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 261 }, |
| 456 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 259 }, | 459 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 262 }, |
| 457 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 260 }, | 460 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 263 }, |
| 458 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 261 }, | 461 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 264 }, |
| 459 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 262 }, | 462 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 265 }, |
| 460 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 224 }, | 463 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 226 }, |
| 461 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 263 }, | 464 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 266 }, |
| 462 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 264 }, | 465 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 267 }, |
| 463 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 265 }, | 466 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 268 }, |
| 464 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 266 }, | 467 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 269 }, |
| 465 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 267 }, | 468 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 270 }, |
| 466 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 268 }, | 469 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 271 }, |
| 467 | .{ .char = 'f', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 470 | .{ .char = 'f', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 468 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 269 }, | 471 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 272 }, |
| 469 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 270 }, | 472 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 273 }, |
| 470 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 271 }, | 473 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 274 }, |
| 471 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 474 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 472 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 272 }, | 475 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 275 }, |
| 473 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 273 }, | 476 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 276 }, |
| 474 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 274 }, | 477 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 277 }, |
| 475 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 276 }, | 478 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 279 }, |
| 476 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 277 }, | 479 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 280 }, |
| 477 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 278 }, | 480 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 281 }, |
| 478 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 }, | 481 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 284 }, |
| 479 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 282 }, | 482 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 285 }, |
| 480 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 283 }, | 483 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 286 }, |
| 481 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 284 }, | 484 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 287 }, |
| 482 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 285 }, | 485 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 288 }, |
| 483 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 287 }, | 486 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 290 }, |
| 484 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 288 }, | 487 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 291 }, |
| 485 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 }, | 488 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 }, |
| 486 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 289 }, | 489 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 292 }, |
| 487 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 290 }, | 490 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 293 }, |
| 488 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 291 }, | 491 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 294 }, |
| 489 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 292 }, | 492 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 295 }, |
| 490 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 293 }, | 493 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 296 }, |
| 491 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 294 }, | 494 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 297 }, |
| 492 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 295 }, | 495 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 298 }, |
| 493 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 296 }, | 496 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 299 }, |
| 494 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 297 }, | 497 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 300 }, |
| 495 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 298 }, | ||
| 496 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 299 }, | ||
| 497 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 300 }, | ||
| 498 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 301 }, | 498 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 301 }, |
| 499 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 302 }, | 499 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 302 }, |
| 500 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 303 }, | 500 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 303 }, |
| 501 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 304 }, | 501 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 304 }, |
| 502 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 305 }, | 502 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 305 }, |
| 503 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 306 }, | 503 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 306 }, |
| 504 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 307 }, | ||
| 505 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 308 }, | ||
| 506 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 309 }, | ||
| 507 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 310 }, | ||
| 504 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 109 }, | 508 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 109 }, |
| 505 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 307 }, | 509 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 311 }, |
| 506 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 224 }, | 510 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 226 }, |
| 507 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 308 }, | 511 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 312 }, |
| 508 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 309 }, | 512 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 313 }, |
| 509 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 310 }, | 513 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 314 }, |
| 510 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 311 }, | 514 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 315 }, |
| 511 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 312 }, | 515 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 316 }, |
| 512 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 313 }, | 516 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 317 }, |
| 513 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 }, | 517 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 318 }, |
| 514 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 314 }, | 518 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 }, |
| 515 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 315 }, | 519 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 319 }, |
| 516 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 316 }, | 520 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 320 }, |
| 517 | .{ .char = 'k', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 318 }, | 521 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 321 }, |
| 518 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 319 }, | 522 | .{ .char = 'k', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 323 }, |
| 519 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 320 }, | 523 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 324 }, |
| 524 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 325 }, | ||
| 520 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, | 525 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, |
| 521 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 321 }, | 526 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 326 }, |
| 522 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 322 }, | 527 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 327 }, |
| 523 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 324 }, | 528 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 329 }, |
| 524 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 325 }, | 529 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 330 }, |
| 525 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 326 }, | 530 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 }, |
| 526 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 327 }, | 531 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 332 }, |
| 527 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 328 }, | 532 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 333 }, |
| 528 | .{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 533 | .{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 529 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 329 }, | 534 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 334 }, |
| 530 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 330 }, | 535 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 }, |
| 531 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 }, | 536 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 }, |
| 532 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 332 }, | 537 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 337 }, |
| 533 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 333 }, | 538 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 338 }, |
| 534 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 334 }, | 539 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 339 }, |
| 535 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 }, | 540 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 340 }, |
| 536 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 }, | 541 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 341 }, |
| 537 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 }, | 542 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 341 }, |
| 538 | .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 543 | .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 539 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 337 }, | 544 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 342 }, |
| 540 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 338 }, | 545 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 343 }, |
| 541 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 339 }, | 546 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 344 }, |
| 542 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 340 }, | 547 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 345 }, |
| 543 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 341 }, | 548 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 346 }, |
| 544 | .{ .char = 'c', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 549 | .{ .char = 'c', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 545 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 342 }, | 550 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 347 }, |
| 546 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 344 }, | 551 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 349 }, |
| 547 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 266 }, | 552 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 269 }, |
| 548 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 200 }, | 553 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 201 }, |
| 549 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 345 }, | ||
| 550 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 346 }, | ||
| 551 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 347 }, | ||
| 552 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 189 }, | ||
| 553 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 348 }, | ||
| 554 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 349 }, | ||
| 555 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 350 }, | 554 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 350 }, |
| 556 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 351 }, | 555 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 351 }, |
| 557 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 352 }, | 556 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 352 }, |
| 558 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 353 }, | 557 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 190 }, |
| 559 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 354 }, | 558 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 353 }, |
| 560 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 355 }, | 559 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 354 }, |
| 561 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 }, | 560 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 355 }, |
| 562 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 356 }, | 561 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 356 }, |
| 562 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 357 }, | ||
| 563 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 358 }, | ||
| 564 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 359 }, | ||
| 565 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 360 }, | ||
| 566 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 172 }, | ||
| 567 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 361 }, | ||
| 563 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 101 }, | 568 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 101 }, |
| 564 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 357 }, | 569 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 362 }, |
| 565 | .{ .char = 'a', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 570 | .{ .char = 'a', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 566 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 358 }, | 571 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 363 }, |
| 567 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 359 }, | 572 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 364 }, |
| 568 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 360 }, | 573 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 365 }, |
| 569 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 361 }, | 574 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 366 }, |
| 570 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 362 }, | 575 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 367 }, |
| 571 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 363 }, | 576 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 368 }, |
| 572 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 364 }, | 577 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 369 }, |
| 573 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 }, | 578 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 }, |
| 574 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 365 }, | 579 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 370 }, |
| 575 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 366 }, | 580 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 371 }, |
| 576 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 367 }, | 581 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 372 }, |
| 577 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 368 }, | 582 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 373 }, |
| 578 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 }, | 583 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 256 }, |
| 579 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 369 }, | 584 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 374 }, |
| 580 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 370 }, | 585 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 375 }, |
| 586 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 }, | ||
| 581 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 125 }, | 587 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 125 }, |
| 582 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 371 }, | 588 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 376 }, |
| 583 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 372 }, | 589 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 377 }, |
| 584 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 260 }, | 590 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 263 }, |
| 585 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 373 }, | 591 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 378 }, |
| 586 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 }, | 592 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 }, |
| 587 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 374 }, | 593 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 379 }, |
| 588 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 375 }, | 594 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 380 }, |
| 589 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 376 }, | 595 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 381 }, |
| 590 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 377 }, | 596 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 382 }, |
| 591 | .{ .char = 'q', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 378 }, | 597 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 383 }, |
| 592 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 379 }, | 598 | .{ .char = 'q', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 384 }, |
| 593 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 380 }, | 599 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 385 }, |
| 594 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 381 }, | 600 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 386 }, |
| 595 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 383 }, | ||
| 596 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 384 }, | ||
| 597 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 385 }, | ||
| 598 | .{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 386 }, | ||
| 599 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 }, | ||
| 600 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 387 }, | 601 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 387 }, |
| 601 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 389 }, | 602 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 389 }, |
| 602 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 185 }, | 603 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 390 }, |
| 603 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 390 }, | 604 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 391 }, |
| 604 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 391 }, | 605 | .{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 392 }, |
| 605 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 392 }, | 606 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 }, |
| 606 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 315 }, | 607 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 393 }, |
| 607 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 393 }, | 608 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 395 }, |
| 608 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 394 }, | 609 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 186 }, |
| 610 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 396 }, | ||
| 611 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 397 }, | ||
| 612 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 398 }, | ||
| 613 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 320 }, | ||
| 614 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 399 }, | ||
| 615 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 400 }, | ||
| 609 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 616 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 610 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 }, | 617 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 340 }, |
| 611 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 395 }, | 618 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 401 }, |
| 612 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 396 }, | ||
| 613 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 397 }, | ||
| 614 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 398 }, | ||
| 615 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 399 }, | ||
| 616 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 400 }, | ||
| 617 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 }, | ||
| 618 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 401 }, | ||
| 619 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 402 }, | 619 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 402 }, |
| 620 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 403 }, | 620 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 403 }, |
| 621 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 404 }, | 621 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 404 }, |
| 622 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 405 }, | 622 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 405 }, |
| 623 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 406 }, | 623 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 406 }, |
| 624 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 }, | ||
| 625 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 407 }, | ||
| 626 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 408 }, | ||
| 627 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 409 }, | ||
| 628 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 410 }, | ||
| 629 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 411 }, | ||
| 630 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 412 }, | ||
| 624 | .{ .char = 'i', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 631 | .{ .char = 'i', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 625 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 407 }, | 632 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 413 }, |
| 626 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 408 }, | 633 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 414 }, |
| 627 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 409 }, | 634 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 415 }, |
| 628 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 410 }, | 635 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 416 }, |
| 629 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 411 }, | 636 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 417 }, |
| 630 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 412 }, | 637 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 418 }, |
| 631 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 413 }, | 638 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 419 }, |
| 632 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, | 639 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, |
| 633 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 }, | 640 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 }, |
| 634 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 414 }, | 641 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 420 }, |
| 635 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 355 }, | 642 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 360 }, |
| 636 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 415 }, | 643 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 421 }, |
| 637 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 416 }, | 644 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 422 }, |
| 638 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 417 }, | 645 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 423 }, |
| 639 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 418 }, | 646 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 424 }, |
| 640 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 419 }, | 647 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 425 }, |
| 641 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 420 }, | 648 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 426 }, |
| 642 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 421 }, | 649 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 427 }, |
| 643 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 422 }, | 650 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 428 }, |
| 644 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 423 }, | 651 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 429 }, |
| 645 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 424 }, | 652 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 430 }, |
| 646 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 425 }, | 653 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 431 }, |
| 647 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 426 }, | 654 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 432 }, |
| 648 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 427 }, | 655 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 433 }, |
| 649 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 428 }, | 656 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 434 }, |
| 650 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 250 }, | 657 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 }, |
| 651 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 429 }, | 658 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 435 }, |
| 652 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 430 }, | 659 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 436 }, |
| 653 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 431 }, | 660 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 }, |
| 654 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 432 }, | 661 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 438 }, |
| 655 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 433 }, | 662 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 439 }, |
| 656 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 434 }, | ||
| 657 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 435 }, | ||
| 658 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 }, | ||
| 659 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 438 }, | ||
| 660 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 439 }, | ||
| 661 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 440 }, | ||
| 662 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 189 }, | ||
| 663 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 441 }, | ||
| 664 | .{ .char = '4', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 442 }, | ||
| 665 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 443 }, | ||
| 666 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 444 }, | ||
| 667 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 445 }, | ||
| 668 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 295 }, | ||
| 669 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, | ||
| 670 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 }, | ||
| 671 | .{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | ||
| 672 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 440 }, | 663 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 440 }, |
| 673 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 449 }, | 664 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 441 }, |
| 674 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 450 }, | 665 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 442 }, |
| 675 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 451 }, | 666 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 444 }, |
| 676 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 452 }, | 667 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 445 }, |
| 677 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 453 }, | 668 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 446 }, |
| 678 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 454 }, | 669 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, |
| 670 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 190 }, | ||
| 671 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 }, | ||
| 672 | .{ .char = '4', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 449 }, | ||
| 673 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 450 }, | ||
| 674 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 451 }, | ||
| 675 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 452 }, | ||
| 676 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 298 }, | ||
| 677 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 454 }, | ||
| 679 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 455 }, | 678 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 455 }, |
| 680 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 357 }, | 679 | .{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 680 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, | ||
| 681 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 456 }, | 681 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 456 }, |
| 682 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 457 }, | 682 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 457 }, |
| 683 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 458 }, | 683 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 458 }, |
| 684 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 459 }, | 684 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 459 }, |
| 685 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 460 }, | 685 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 460 }, |
| 686 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 461 }, | 686 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 461 }, |
| 687 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 462 }, | 687 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 462 }, |
| 688 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 463 }, | 688 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 362 }, |
| 689 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 464 }, | 689 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 463 }, |
| 690 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 465 }, | 690 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 464 }, |
| 691 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 466 }, | 691 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 465 }, |
| 692 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 467 }, | 692 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 466 }, |
| 693 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 383 }, | 693 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 467 }, |
| 694 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 }, | 694 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 468 }, |
| 695 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 469 }, | ||
| 696 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 470 }, | ||
| 697 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 471 }, | ||
| 698 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 472 }, | ||
| 699 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 473 }, | ||
| 700 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 474 }, | ||
| 701 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 389 }, | ||
| 702 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 }, | ||
| 695 | .{ .char = 'w', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 703 | .{ .char = 'w', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 696 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 468 }, | 704 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 475 }, |
| 697 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 469 }, | 705 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 476 }, |
| 698 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 470 }, | 706 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 477 }, |
| 699 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 }, | 707 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 }, |
| 700 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 471 }, | 708 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 478 }, |
| 701 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 472 }, | 709 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 479 }, |
| 702 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 473 }, | 710 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 480 }, |
| 703 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 474 }, | 711 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 481 }, |
| 704 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 475 }, | 712 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 482 }, |
| 705 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 250 }, | 713 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 }, |
| 706 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 476 }, | 714 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 483 }, |
| 707 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 477 }, | 715 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 484 }, |
| 708 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 427 }, | 716 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 433 }, |
| 709 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 478 }, | 717 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 485 }, |
| 710 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 479 }, | 718 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 }, |
| 711 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 480 }, | 719 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 487 }, |
| 712 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 481 }, | 720 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 488 }, |
| 713 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 482 }, | 721 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 489 }, |
| 714 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 305 }, | 722 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 490 }, |
| 715 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 483 }, | 723 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 309 }, |
| 716 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 484 }, | 724 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 491 }, |
| 717 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 485 }, | 725 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 492 }, |
| 726 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 493 }, | ||
| 718 | .{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 727 | .{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 719 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 }, | 728 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 494 }, |
| 720 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 487 }, | 729 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 495 }, |
| 721 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 489 }, | ||
| 722 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 490 }, | ||
| 723 | .{ .char = 'e', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, | ||
| 724 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 260 }, | ||
| 725 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 491 }, | ||
| 726 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 492 }, | ||
| 727 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 }, | ||
| 728 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 493 }, | ||
| 729 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 179 }, | ||
| 730 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 }, | ||
| 731 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 494 }, | ||
| 732 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 495 }, | ||
| 733 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 496 }, | ||
| 734 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 497 }, | 730 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 497 }, |
| 735 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 498 }, | 731 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 498 }, |
| 732 | .{ .char = 'e', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, | ||
| 733 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 263 }, | ||
| 736 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 499 }, | 734 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 499 }, |
| 737 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 500 }, | 735 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 500 }, |
| 738 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 501 }, | 736 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 }, |
| 739 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 502 }, | 737 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 501 }, |
| 740 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 503 }, | 738 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 180 }, |
| 741 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 306 }, | 739 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 }, |
| 742 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 504 }, | 740 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 502 }, |
| 743 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 505 }, | 741 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 503 }, |
| 744 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 506 }, | 742 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 504 }, |
| 745 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 170 }, | 743 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 505 }, |
| 746 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 507 }, | 744 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 506 }, |
| 747 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 508 }, | 745 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 507 }, |
| 748 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 509 }, | 746 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 508 }, |
| 749 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 510 }, | 747 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 509 }, |
| 750 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 }, | 748 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 510 }, |
| 751 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 513 }, | 749 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 511 }, |
| 752 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 514 }, | 750 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 310 }, |
| 753 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 173 }, | 751 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 512 }, |
| 754 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 515 }, | 752 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 513 }, |
| 755 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 516 }, | 753 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 514 }, |
| 756 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 517 }, | 754 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 171 }, |
| 757 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 518 }, | 755 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 515 }, |
| 758 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 519 }, | 756 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 516 }, |
| 759 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 520 }, | 757 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 517 }, |
| 760 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 444 }, | 758 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 518 }, |
| 761 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 521 }, | 759 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 520 }, |
| 762 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 522 }, | 760 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 521 }, |
| 763 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 523 }, | 761 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 522 }, |
| 764 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 524 }, | 762 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 174 }, |
| 765 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 525 }, | 763 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 523 }, |
| 766 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 526 }, | 764 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 524 }, |
| 767 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 527 }, | 765 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 525 }, |
| 768 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 }, | 766 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 526 }, |
| 769 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 250 }, | 767 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 527 }, |
| 770 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 528 }, | 768 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 528 }, |
| 771 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 529 }, | 769 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 529 }, |
| 772 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 530 }, | 770 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 451 }, |
| 773 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 531 }, | 771 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 530 }, |
| 774 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 440 }, | 772 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 531 }, |
| 775 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 532 }, | 773 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 532 }, |
| 776 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 533 }, | 774 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 533 }, |
| 777 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 534 }, | 775 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 534 }, |
| 778 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 235 }, | 776 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 535 }, |
| 779 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 535 }, | 777 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 536 }, |
| 780 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 536 }, | 778 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 }, |
| 779 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 253 }, | ||
| 781 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 537 }, | 780 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 537 }, |
| 782 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 538 }, | 781 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 538 }, |
| 783 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 539 }, | 782 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 539 }, |
| 784 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 540 }, | 783 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 540 }, |
| 785 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 542 }, | 784 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, |
| 785 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 541 }, | ||
| 786 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 542 }, | ||
| 787 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 543 }, | ||
| 788 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 238 }, | ||
| 789 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 544 }, | ||
| 790 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 545 }, | ||
| 791 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 546 }, | ||
| 792 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 547 }, | ||
| 793 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 548 }, | ||
| 794 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 549 }, | ||
| 795 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 551 }, | ||
| 786 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 }, | 796 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 }, |
| 787 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 518 }, | 797 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 526 }, |
| 788 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 543 }, | 798 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 552 }, |
| 789 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 544 }, | 799 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 553 }, |
| 790 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 545 }, | 800 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 554 }, |
| 791 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 546 }, | 801 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 555 }, |
| 792 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 547 }, | 802 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 556 }, |
| 793 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 548 }, | 803 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 557 }, |
| 794 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 549 }, | 804 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 558 }, |
| 795 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 550 }, | 805 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 796 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 551 }, | 806 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 306 }, |
| 797 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 552 }, | 807 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 560 }, |
| 798 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 }, | 808 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 561 }, |
| 799 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 173 }, | 809 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 }, |
| 800 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 553 }, | 810 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 174 }, |
| 801 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 554 }, | 811 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 562 }, |
| 802 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 555 }, | 812 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 563 }, |
| 803 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 556 }, | 813 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 564 }, |
| 804 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 557 }, | 814 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 565 }, |
| 805 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 331 }, | 815 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 566 }, |
| 806 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 558 }, | 816 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 336 }, |
| 807 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 817 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 }, |
| 808 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 560 }, | 818 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 568 }, |
| 809 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 561 }, | 819 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 569 }, |
| 810 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 562 }, | 820 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 570 }, |
| 811 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 563 }, | 821 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 571 }, |
| 812 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 564 }, | ||
| 813 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 565 }, | ||
| 814 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 566 }, | ||
| 815 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 }, | ||
| 816 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 568 }, | ||
| 817 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 569 }, | ||
| 818 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 570 }, | ||
| 819 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 571 }, | ||
| 820 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 }, | 822 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 }, |
| 821 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 573 }, | 823 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 573 }, |
| 822 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 574 }, | 824 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 574 }, |
| 823 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 575 }, | 825 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 575 }, |
| 826 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 576 }, | ||
| 827 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 577 }, | ||
| 828 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 578 }, | ||
| 829 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 579 }, | ||
| 830 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 580 }, | ||
| 831 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 581 }, | ||
| 832 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 582 }, | ||
| 833 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 583 }, | ||
| 834 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 584 }, | ||
| 824 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, | 835 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, |
| 825 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 576 }, | 836 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 585 }, |
| 826 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 577 }, | 837 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 586 }, |
| 827 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 578 }, | 838 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 587 }, |
| 828 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 579 }, | 839 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 588 }, |
| 829 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 }, | ||
| 830 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 580 }, | ||
| 831 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 581 }, | ||
| 832 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 582 }, | ||
| 833 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 583 }, | ||
| 834 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 584 }, | ||
| 835 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 585 }, | ||
| 836 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 586 }, | ||
| 837 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 587 }, | ||
| 838 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 588 }, | ||
| 839 | .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | ||
| 840 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 589 }, | 840 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 589 }, |
| 841 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 590 }, | 841 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 590 }, |
| 842 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 266 }, | 842 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 591 }, |
| 843 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 591 }, | ||
| 844 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 592 }, | 843 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 592 }, |
| 845 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 593 }, | 844 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 593 }, |
| 846 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 5, .child_index = 594 }, | 845 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 594 }, |
| 847 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 595 }, | 846 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 595 }, |
| 848 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 596 }, | 847 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 596 }, |
| 849 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 597 }, | 848 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 597 }, |
| 850 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 598 }, | 849 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 598 }, |
| 851 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 599 }, | 850 | .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 852 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 600 }, | 851 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 599 }, |
| 853 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 601 }, | 852 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 600 }, |
| 854 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 602 }, | 853 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 269 }, |
| 855 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 421 }, | 854 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 601 }, |
| 856 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 603 }, | 855 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 602 }, |
| 857 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 604 }, | 856 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 603 }, |
| 858 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 }, | 857 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 5, .child_index = 604 }, |
| 859 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 392 }, | 858 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 605 }, |
| 860 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 605 }, | 859 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 606 }, |
| 861 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 606 }, | 860 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 607 }, |
| 862 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 607 }, | 861 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 608 }, |
| 863 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 608 }, | 862 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 609 }, |
| 864 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 150 }, | 863 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 610 }, |
| 865 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 609 }, | 864 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 611 }, |
| 866 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 610 }, | 865 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 612 }, |
| 867 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 611 }, | 866 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 427 }, |
| 868 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 612 }, | 867 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 613 }, |
| 869 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 613 }, | 868 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 614 }, |
| 870 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 614 }, | 869 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 }, |
| 871 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 615 }, | 870 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 615 }, |
| 872 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 616 }, | 871 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 398 }, |
| 873 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 620 }, | 872 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 616 }, |
| 874 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 621 }, | 873 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 617 }, |
| 875 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 622 }, | 874 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 618 }, |
| 876 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 623 }, | 875 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 619 }, |
| 877 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 624 }, | 876 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 151 }, |
| 878 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 }, | 877 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 620 }, |
| 879 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 625 }, | 878 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 621 }, |
| 880 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 626 }, | 879 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 622 }, |
| 880 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 623 }, | ||
| 881 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 624 }, | ||
| 882 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 625 }, | ||
| 883 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 626 }, | ||
| 884 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 627 }, | ||
| 885 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 631 }, | ||
| 886 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 632 }, | ||
| 887 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 }, | ||
| 888 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 634 }, | ||
| 889 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 635 }, | ||
| 890 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 }, | ||
| 891 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 636 }, | ||
| 892 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 637 }, | ||
| 881 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, | 893 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, |
| 882 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 627 }, | 894 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 638 }, |
| 883 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 628 }, | 895 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 }, |
| 884 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 629 }, | 896 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 639 }, |
| 885 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 630 }, | 897 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 }, |
| 886 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 631 }, | 898 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 641 }, |
| 887 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 621 }, | 899 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 642 }, |
| 888 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 632 }, | 900 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 632 }, |
| 889 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 }, | 901 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 643 }, |
| 890 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 634 }, | 902 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 644 }, |
| 891 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 635 }, | 903 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 645 }, |
| 892 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 636 }, | 904 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 646 }, |
| 893 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 348 }, | 905 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 647 }, |
| 894 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 637 }, | 906 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 353 }, |
| 895 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 638 }, | 907 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 648 }, |
| 896 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 639 }, | 908 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 649 }, |
| 897 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 }, | 909 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 650 }, |
| 898 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 641 }, | 910 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 651 }, |
| 911 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 652 }, | ||
| 899 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 }, | 912 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 101 }, |
| 900 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 642 }, | 913 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 653 }, |
| 901 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 643 }, | 914 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 654 }, |
| 902 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 372 }, | 915 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 377 }, |
| 903 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 644 }, | 916 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 655 }, |
| 904 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 645 }, | 917 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 656 }, |
| 905 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 646 }, | 918 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 657 }, |
| 906 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 647 }, | 919 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 658 }, |
| 907 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 648 }, | ||
| 908 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, | ||
| 909 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 584 }, | ||
| 910 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 509 }, | ||
| 911 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, | ||
| 912 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 650 }, | ||
| 913 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 651 }, | ||
| 914 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 652 }, | ||
| 915 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 653 }, | ||
| 916 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 654 }, | ||
| 917 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 655 }, | ||
| 918 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 656 }, | ||
| 919 | .{ .char = 'k', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | ||
| 920 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 397 }, | ||
| 921 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 657 }, | ||
| 922 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 266 }, | ||
| 923 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 658 }, | ||
| 924 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 300 }, | ||
| 925 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 659 }, | 920 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 659 }, |
| 926 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 660 }, | 921 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, |
| 927 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 193 }, | 922 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 594 }, |
| 928 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 306 }, | 923 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 517 }, |
| 929 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 661 }, | 924 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 660 }, |
| 925 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 661 }, | ||
| 930 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 662 }, | 926 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 662 }, |
| 931 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 663 }, | 927 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 663 }, |
| 932 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 664 }, | 928 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 664 }, |
| 933 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 229 }, | 929 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 665 }, |
| 934 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 665 }, | 930 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 666 }, |
| 935 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 666 }, | 931 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 667 }, |
| 936 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 350 }, | 932 | .{ .char = 'k', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 937 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 667 }, | 933 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 403 }, |
| 938 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 668 }, | 934 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 668 }, |
| 939 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 669 }, | 935 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 269 }, |
| 940 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 670 }, | 936 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 669 }, |
| 941 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 158 }, | 937 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 303 }, |
| 942 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 671 }, | 938 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 670 }, |
| 939 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 671 }, | ||
| 940 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 194 }, | ||
| 941 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 310 }, | ||
| 943 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 672 }, | 942 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 672 }, |
| 944 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 673 }, | 943 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 673 }, |
| 945 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 207 }, | 944 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 674 }, |
| 946 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 674 }, | 945 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 675 }, |
| 947 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 675 }, | 946 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 231 }, |
| 948 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 676 }, | 947 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 676 }, |
| 949 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 }, | 948 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 677 }, |
| 950 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 677 }, | 949 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 355 }, |
| 951 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 678 }, | 950 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 678 }, |
| 952 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 679 }, | 951 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 679 }, |
| 953 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 680 }, | 952 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 680 }, |
| 954 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 219 }, | 953 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 681 }, |
| 955 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 586 }, | 954 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 159 }, |
| 956 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 681 }, | 955 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 682 }, |
| 957 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, | 956 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 683 }, |
| 958 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 682 }, | 957 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 684 }, |
| 959 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 683 }, | 958 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 208 }, |
| 960 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 684 }, | 959 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 685 }, |
| 961 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 685 }, | 960 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 686 }, |
| 962 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 686 }, | ||
| 963 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 687 }, | 961 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 687 }, |
| 964 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 688 }, | 962 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 644 }, |
| 965 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 689 }, | 963 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 688 }, |
| 966 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 690 }, | 964 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 689 }, |
| 967 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 173 }, | 965 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 690 }, |
| 968 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 691 }, | 966 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 691 }, |
| 967 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 220 }, | ||
| 968 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 596 }, | ||
| 969 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 692 }, | ||
| 970 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, | ||
| 971 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 693 }, | ||
| 972 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 694 }, | ||
| 973 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 695 }, | ||
| 974 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 696 }, | ||
| 975 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 697 }, | ||
| 976 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 698 }, | ||
| 977 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 699 }, | ||
| 978 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 700 }, | ||
| 979 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 701 }, | ||
| 980 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 174 }, | ||
| 981 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 702 }, | ||
| 969 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, | 982 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 122 }, |
| 970 | }; | 983 | }; |
| 971 | pub const data = blk: { | 984 | pub const data = blk: { |
| 972 | @setEvalBranchQuota(1053); | 985 | @setEvalBranchQuota(1071); |
| 973 | break :blk [_]Properties{ | 986 | break :blk [_]Properties{ |
| 974 | .{ .tag = .aarch64_sve_pcs, .gnu = true }, | 987 | .{ .tag = .aarch64_sve_pcs, .gnu = true }, |
| 975 | .{ .tag = .aarch64_vector_pcs, .gnu = true }, | 988 | .{ .tag = .aarch64_vector_pcs, .gnu = true }, |
| ... | @@ -1062,6 +1075,7 @@ pub const data = blk: { | ... | @@ -1062,6 +1075,7 @@ pub const data = blk: { |
| 1062 | .{ .tag = .selectany, .gnu = true, .declspec = true }, | 1075 | .{ .tag = .selectany, .gnu = true, .declspec = true }, |
| 1063 | .{ .tag = .sentinel, .gnu = true }, | 1076 | .{ .tag = .sentinel, .gnu = true }, |
| 1064 | .{ .tag = .simd, .gnu = true }, | 1077 | .{ .tag = .simd, .gnu = true }, |
| 1078 | .{ .tag = .single, .gnu = true }, | ||
| 1065 | .{ .tag = .spectre, .declspec = true }, | 1079 | .{ .tag = .spectre, .declspec = true }, |
| 1066 | .{ .tag = .stack_protect, .gnu = true }, | 1080 | .{ .tag = .stack_protect, .gnu = true }, |
| 1067 | .{ .tag = .stdcall, .gnu = true }, | 1081 | .{ .tag = .stdcall, .gnu = true }, |
| ... | @@ -1075,6 +1089,7 @@ pub const data = blk: { | ... | @@ -1075,6 +1089,7 @@ pub const data = blk: { |
| 1075 | .{ .tag = .transparent_union, .gnu = true }, | 1089 | .{ .tag = .transparent_union, .gnu = true }, |
| 1076 | .{ .tag = .unavailable, .gnu = true }, | 1090 | .{ .tag = .unavailable, .gnu = true }, |
| 1077 | .{ .tag = .uninitialized, .gnu = true }, | 1091 | .{ .tag = .uninitialized, .gnu = true }, |
| 1092 | .{ .tag = .unsafe_indexable, .gnu = true }, | ||
| 1078 | .{ .tag = .unsequenced, .c23 = true }, | 1093 | .{ .tag = .unsequenced, .c23 = true }, |
| 1079 | .{ .tag = .unused, .gnu = true }, | 1094 | .{ .tag = .unused, .gnu = true }, |
| 1080 | .{ .tag = .used, .gnu = true }, | 1095 | .{ .tag = .used, .gnu = true }, |
lib/compiler/aro/aro/Builtins.zig-1| ... | @@ -264,7 +264,6 @@ fn createType(desc: TypeDescription, it: *TypeDescription.TypeIterator, comp: *C | ... | @@ -264,7 +264,6 @@ fn createType(desc: TypeDescription, it: *TypeDescription.TypeIterator, comp: *C |
| 264 | _ = address_space; // TODO: handle address space | 264 | _ = address_space; // TODO: handle address space |
| 265 | const pointer_qt = try comp.type_store.put(comp.gpa, .{ .pointer = .{ | 265 | const pointer_qt = try comp.type_store.put(comp.gpa, .{ .pointer = .{ |
| 266 | .child = builder.finish() catch unreachable, | 266 | .child = builder.finish() catch unreachable, |
| 267 | .decayed = null, | ||
| 268 | } }); | 267 | } }); |
| 269 | 268 | ||
| 270 | builder.@"const" = null; | 269 | builder.@"const" = null; |
lib/compiler/aro/aro/Builtins/common.zig+874-863| ... | @@ -751,6 +751,8 @@ pub const Tag = enum(u16) { _Block_object_assign, | ... | @@ -751,6 +751,8 @@ pub const Tag = enum(u16) { _Block_object_assign, |
| 751 | __builtin_usubl_overflow, | 751 | __builtin_usubl_overflow, |
| 752 | __builtin_usubll_overflow, | 752 | __builtin_usubll_overflow, |
| 753 | __builtin_va_arg, | 753 | __builtin_va_arg, |
| 754 | __builtin_va_arg_pack, | ||
| 755 | __builtin_va_arg_pack_len, | ||
| 754 | __builtin_va_copy, | 756 | __builtin_va_copy, |
| 755 | __builtin_va_end, | 757 | __builtin_va_end, |
| 756 | __builtin_va_start, | 758 | __builtin_va_start, |
| ... | @@ -1436,7 +1438,7 @@ pub const longest_name = 41; | ... | @@ -1436,7 +1438,7 @@ pub const longest_name = 41; |
| 1436 | /// If found, returns the index of the node within the `dafsa` array. | 1438 | /// If found, returns the index of the node within the `dafsa` array. |
| 1437 | /// Otherwise, returns `null`. | 1439 | /// Otherwise, returns `null`. |
| 1438 | pub fn findInList(first_child_index: u16, char: u8) ?u16 { | 1440 | pub fn findInList(first_child_index: u16, char: u8) ?u16 { |
| 1439 | @setEvalBranchQuota(2744); | 1441 | @setEvalBranchQuota(2748); |
| 1440 | var index = first_child_index; | 1442 | var index = first_child_index; |
| 1441 | while (true) { | 1443 | while (true) { |
| 1442 | if (dafsa[index].char == char) return index; | 1444 | if (dafsa[index].char == char) return index; |
| ... | @@ -1531,7 +1533,7 @@ const Node = packed struct { | ... | @@ -1531,7 +1533,7 @@ const Node = packed struct { |
| 1531 | 1533 | ||
| 1532 | const dafsa = [_]Node{ | 1534 | const dafsa = [_]Node{ |
| 1533 | .{ .char = 0, .end_of_word = false, .end_of_list = true, .number = 0, .child_index = 1 }, | 1535 | .{ .char = 0, .end_of_word = false, .end_of_list = true, .number = 0, .child_index = 1 }, |
| 1534 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1016, .child_index = 19 }, | 1536 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1018, .child_index = 19 }, |
| 1535 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 25, .child_index = 31 }, | 1537 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 25, .child_index = 31 }, |
| 1536 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 36 }, | 1538 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 36 }, |
| 1537 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 82, .child_index = 38 }, | 1539 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 82, .child_index = 38 }, |
| ... | @@ -1553,7 +1555,7 @@ const dafsa = [_]Node{ | ... | @@ -1553,7 +1555,7 @@ const dafsa = [_]Node{ |
| 1553 | .{ .char = 'E', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 102 }, | 1555 | .{ .char = 'E', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 102 }, |
| 1554 | .{ .char = 'I', .end_of_word = false, .end_of_list = false, .number = 29, .child_index = 103 }, | 1556 | .{ .char = 'I', .end_of_word = false, .end_of_list = false, .number = 29, .child_index = 103 }, |
| 1555 | .{ .char = 'R', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 104 }, | 1557 | .{ .char = 'R', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 104 }, |
| 1556 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 938, .child_index = 105 }, | 1558 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 940, .child_index = 105 }, |
| 1557 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 123 }, | 1559 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 123 }, |
| 1558 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 11, .child_index = 125 }, | 1560 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 11, .child_index = 125 }, |
| 1559 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 127 }, | 1561 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 127 }, |
| ... | @@ -1637,7 +1639,7 @@ const dafsa = [_]Node{ | ... | @@ -1637,7 +1639,7 @@ const dafsa = [_]Node{ |
| 1637 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 238 }, | 1639 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 238 }, |
| 1638 | .{ .char = 'G', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 239 }, | 1640 | .{ .char = 'G', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 239 }, |
| 1639 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 34, .child_index = 240 }, | 1641 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 34, .child_index = 240 }, |
| 1640 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 694, .child_index = 245 }, | 1642 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 696, .child_index = 245 }, |
| 1641 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 19, .child_index = 246 }, | 1643 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 19, .child_index = 246 }, |
| 1642 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 248 }, | 1644 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 248 }, |
| 1643 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 249 }, | 1645 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 249 }, |
| ... | @@ -1775,7 +1777,7 @@ const dafsa = [_]Node{ | ... | @@ -1775,7 +1777,7 @@ const dafsa = [_]Node{ |
| 1775 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 398 }, | 1777 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 398 }, |
| 1776 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 399 }, | 1778 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 399 }, |
| 1777 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 400 }, | 1779 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 400 }, |
| 1778 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 401 }, | 1780 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 401 }, |
| 1779 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 17, .child_index = 402 }, | 1781 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 17, .child_index = 402 }, |
| 1780 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 403 }, | 1782 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 403 }, |
| 1781 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 404 }, | 1783 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 404 }, |
| ... | @@ -1931,7 +1933,7 @@ const dafsa = [_]Node{ | ... | @@ -1931,7 +1933,7 @@ const dafsa = [_]Node{ |
| 1931 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 523 }, | 1933 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 523 }, |
| 1932 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 524 }, | 1934 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 524 }, |
| 1933 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 525 }, | 1935 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 525 }, |
| 1934 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 526 }, | 1936 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 526 }, |
| 1935 | .{ .char = '1', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 527 }, | 1937 | .{ .char = '1', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 527 }, |
| 1936 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 528 }, | 1938 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 528 }, |
| 1937 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 529 }, | 1939 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 529 }, |
| ... | @@ -2056,7 +2058,7 @@ const dafsa = [_]Node{ | ... | @@ -2056,7 +2058,7 @@ const dafsa = [_]Node{ |
| 2056 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 610 }, | 2058 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 610 }, |
| 2057 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 611 }, | 2059 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 611 }, |
| 2058 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 612 }, | 2060 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 612 }, |
| 2059 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 613 }, | 2061 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 613 }, |
| 2060 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 614 }, | 2062 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 614 }, |
| 2061 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 615 }, | 2063 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 615 }, |
| 2062 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 616 }, | 2064 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 616 }, |
| ... | @@ -2143,7 +2145,7 @@ const dafsa = [_]Node{ | ... | @@ -2143,7 +2145,7 @@ const dafsa = [_]Node{ |
| 2143 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 658 }, | 2145 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 658 }, |
| 2144 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 2146 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 2145 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 659 }, | 2147 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 659 }, |
| 2146 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 660 }, | 2148 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 660 }, |
| 2147 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 661 }, | 2149 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 661 }, |
| 2148 | .{ .char = 'i', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 662 }, | 2150 | .{ .char = 'i', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 662 }, |
| 2149 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 663 }, | 2151 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 663 }, |
| ... | @@ -2190,7 +2192,7 @@ const dafsa = [_]Node{ | ... | @@ -2190,7 +2192,7 @@ const dafsa = [_]Node{ |
| 2190 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 700 }, | 2192 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 700 }, |
| 2191 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 701 }, | 2193 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 701 }, |
| 2192 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 702 }, | 2194 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 702 }, |
| 2193 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 703 }, | 2195 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 703 }, |
| 2194 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 704 }, | 2196 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 704 }, |
| 2195 | .{ .char = 'f', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 2197 | .{ .char = 'f', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 2196 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 705 }, | 2198 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 705 }, |
| ... | @@ -2233,7 +2235,7 @@ const dafsa = [_]Node{ | ... | @@ -2233,7 +2235,7 @@ const dafsa = [_]Node{ |
| 2233 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 740 }, | 2235 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 740 }, |
| 2234 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 741 }, | 2236 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 741 }, |
| 2235 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 742 }, | 2237 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 30, .child_index = 742 }, |
| 2236 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 754 }, | 2238 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 754 }, |
| 2237 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 755 }, | 2239 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 755 }, |
| 2238 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 756 }, | 2240 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 756 }, |
| 2239 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 }, | 2241 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 }, |
| ... | @@ -2284,7 +2286,7 @@ const dafsa = [_]Node{ | ... | @@ -2284,7 +2286,7 @@ const dafsa = [_]Node{ |
| 2284 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 799 }, | 2286 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 799 }, |
| 2285 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 802 }, | 2287 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 802 }, |
| 2286 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 804 }, | 2288 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 804 }, |
| 2287 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 694, .child_index = 805 }, | 2289 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 696, .child_index = 805 }, |
| 2288 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 825 }, | 2290 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 825 }, |
| 2289 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 826 }, | 2291 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 826 }, |
| 2290 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 12, .child_index = 827 }, | 2292 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 12, .child_index = 827 }, |
| ... | @@ -2353,7 +2355,7 @@ const dafsa = [_]Node{ | ... | @@ -2353,7 +2355,7 @@ const dafsa = [_]Node{ |
| 2353 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 76, .child_index = 940 }, | 2355 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 76, .child_index = 940 }, |
| 2354 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 23, .child_index = 952 }, | 2356 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 23, .child_index = 952 }, |
| 2355 | .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 957 }, | 2357 | .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 957 }, |
| 2356 | .{ .char = 'v', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 961 }, | 2358 | .{ .char = 'v', .end_of_word = false, .end_of_list = false, .number = 14, .child_index = 961 }, |
| 2357 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 99 }, | 2359 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 99 }, |
| 2358 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 966 }, | 2360 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 17, .child_index = 966 }, |
| 2359 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 }, | 2361 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 }, |
| ... | @@ -2491,7 +2493,7 @@ const dafsa = [_]Node{ | ... | @@ -2491,7 +2493,7 @@ const dafsa = [_]Node{ |
| 2491 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1140 }, | 2493 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1140 }, |
| 2492 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1154 }, | 2494 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1154 }, |
| 2493 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1157 }, | 2495 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1157 }, |
| 2494 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1158 }, | 2496 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 1158 }, |
| 2495 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1159 }, | 2497 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1159 }, |
| 2496 | .{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1160 }, | 2498 | .{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1160 }, |
| 2497 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 174 }, | 2499 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 174 }, |
| ... | @@ -2688,7 +2690,7 @@ const dafsa = [_]Node{ | ... | @@ -2688,7 +2690,7 @@ const dafsa = [_]Node{ |
| 2688 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1387 }, | 2690 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1387 }, |
| 2689 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1388 }, | 2691 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1388 }, |
| 2690 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1371 }, | 2692 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1371 }, |
| 2691 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1389 }, | 2693 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1389 }, |
| 2692 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1393 }, | 2694 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1393 }, |
| 2693 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 174 }, | 2695 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 174 }, |
| 2694 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 176 }, | 2696 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 176 }, |
| ... | @@ -2919,7 +2921,7 @@ const dafsa = [_]Node{ | ... | @@ -2919,7 +2921,7 @@ const dafsa = [_]Node{ |
| 2919 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1574 }, | 2921 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1574 }, |
| 2920 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1575 }, | 2922 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1575 }, |
| 2921 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1576 }, | 2923 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1576 }, |
| 2922 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1577 }, | 2924 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1577 }, |
| 2923 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 509 }, | 2925 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 509 }, |
| 2924 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 510 }, | 2926 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 510 }, |
| 2925 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 511 }, | 2927 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 511 }, |
| ... | @@ -3107,1047 +3109,1054 @@ const dafsa = [_]Node{ | ... | @@ -3107,1047 +3109,1054 @@ const dafsa = [_]Node{ |
| 3107 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1728 }, | 3109 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1728 }, |
| 3108 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1729 }, | 3110 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1729 }, |
| 3109 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1730 }, | 3111 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1730 }, |
| 3110 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1604 }, | 3112 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1731 }, |
| 3111 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1731 }, | 3113 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1732 }, |
| 3112 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1732 }, | 3114 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1733 }, |
| 3113 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1733 }, | 3115 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1734 }, |
| 3114 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 236 }, | 3116 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 236 }, |
| 3115 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 857 }, | 3117 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 857 }, |
| 3116 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1734 }, | 3118 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1735 }, |
| 3117 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 863 }, | 3119 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 863 }, |
| 3118 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1735 }, | 3120 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1736 }, |
| 3119 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 867 }, | 3121 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 867 }, |
| 3120 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1736 }, | 3122 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1737 }, |
| 3121 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1735 }, | 3123 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1736 }, |
| 3122 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1737 }, | 3124 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1738 }, |
| 3123 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 13, .child_index = 1739 }, | 3125 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 13, .child_index = 1740 }, |
| 3124 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 25, .child_index = 1740 }, | 3126 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 25, .child_index = 1741 }, |
| 3125 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1741 }, | 3127 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1742 }, |
| 3126 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1742 }, | 3128 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1743 }, |
| 3127 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1743 }, | 3129 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1744 }, |
| 3128 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1744 }, | 3130 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1745 }, |
| 3129 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1745 }, | 3131 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1746 }, |
| 3130 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1746 }, | 3132 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1747 }, |
| 3131 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1747 }, | 3133 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1748 }, |
| 3132 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 }, | 3134 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 }, |
| 3133 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1748 }, | 3135 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1749 }, |
| 3134 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1749 }, | 3136 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1750 }, |
| 3135 | .{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 }, | 3137 | .{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 }, |
| 3136 | .{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 }, | 3138 | .{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 }, |
| 3137 | .{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3139 | .{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3138 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 1750 }, | 3140 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 1751 }, |
| 3139 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1751 }, | 3141 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 }, |
| 3140 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 }, | 3142 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1753 }, |
| 3141 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1753 }, | 3143 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1754 }, |
| 3142 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1754 }, | 3144 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1755 }, |
| 3143 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 1755 }, | 3145 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 1756 }, |
| 3144 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 569 }, | 3146 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 569 }, |
| 3145 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1756 }, | 3147 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1757 }, |
| 3146 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1208 }, | 3148 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1208 }, |
| 3147 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1757 }, | 3149 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1758 }, |
| 3148 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1759 }, | 3150 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1760 }, |
| 3149 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1761 }, | 3151 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1762 }, |
| 3150 | .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 572 }, | 3152 | .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 572 }, |
| 3151 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1762 }, | 3153 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1763 }, |
| 3152 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, | 3154 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, |
| 3153 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1763 }, | 3155 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1764 }, |
| 3154 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 641 }, | 3156 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 641 }, |
| 3155 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1764 }, | 3157 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1765 }, |
| 3156 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1765 }, | 3158 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1766 }, |
| 3157 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1766 }, | 3159 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1767 }, |
| 3158 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1767 }, | 3160 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1768 }, |
| 3159 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1768 }, | 3161 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1769 }, |
| 3160 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1770 }, | 3162 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1771 }, |
| 3161 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1771 }, | 3163 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1772 }, |
| 3162 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1772 }, | 3164 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1773 }, |
| 3163 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1773 }, | 3165 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1774 }, |
| 3164 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1774 }, | 3166 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1775 }, |
| 3165 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1771 }, | 3167 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1772 }, |
| 3166 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1775 }, | 3168 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1776 }, |
| 3167 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1777 }, | 3169 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1778 }, |
| 3168 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1777 }, | 3170 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1778 }, |
| 3169 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1778 }, | 3171 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1779 }, |
| 3170 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1779 }, | 3172 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1780 }, |
| 3171 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1780 }, | 3173 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1781 }, |
| 3172 | .{ .char = 'a', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1782 }, | 3174 | .{ .char = 'a', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1783 }, |
| 3173 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1783 }, | 3175 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1784 }, |
| 3174 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1784 }, | 3176 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1785 }, |
| 3175 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1785 }, | 3177 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1786 }, |
| 3176 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1786 }, | 3178 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1787 }, |
| 3177 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 }, | 3179 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 }, |
| 3178 | .{ .char = '3', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1787 }, | 3180 | .{ .char = '3', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1788 }, |
| 3179 | .{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 }, | 3181 | .{ .char = '6', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 633 }, |
| 3180 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1788 }, | 3182 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1789 }, |
| 3181 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1789 }, | 3183 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1790 }, |
| 3182 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1790 }, | 3184 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1791 }, |
| 3183 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1791 }, | 3185 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1792 }, |
| 3184 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1792 }, | 3186 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1793 }, |
| 3185 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1793 }, | 3187 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1794 }, |
| 3186 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1794 }, | 3188 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1795 }, |
| 3187 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1795 }, | 3189 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1796 }, |
| 3188 | .{ .char = '2', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1796 }, | 3190 | .{ .char = '2', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1797 }, |
| 3189 | .{ .char = '6', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3191 | .{ .char = '6', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3190 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1797 }, | 3192 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1798 }, |
| 3191 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 236 }, | 3193 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 236 }, |
| 3192 | .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3194 | .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3193 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1798 }, | 3195 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1799 }, |
| 3194 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1799 }, | 3196 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1800 }, |
| 3195 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1800 }, | 3197 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1801 }, |
| 3196 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1801 }, | 3198 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1802 }, |
| 3197 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1803 }, | 3199 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1804 }, |
| 3198 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1804 }, | 3200 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1805 }, |
| 3199 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1805 }, | 3201 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1806 }, |
| 3200 | .{ .char = '2', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1796 }, | 3202 | .{ .char = '2', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1797 }, |
| 3201 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1806 }, | 3203 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1807 }, |
| 3202 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1807 }, | 3204 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1808 }, |
| 3203 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1808 }, | 3205 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1809 }, |
| 3204 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1809 }, | 3206 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1810 }, |
| 3205 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1810 }, | 3207 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1811 }, |
| 3206 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1811 }, | 3208 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1812 }, |
| 3207 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1812 }, | 3209 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1813 }, |
| 3208 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1813 }, | 3210 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1814 }, |
| 3209 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1814 }, | 3211 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1815 }, |
| 3210 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1815 }, | 3212 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1816 }, |
| 3211 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1816 }, | 3213 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1817 }, |
| 3212 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1817 }, | 3214 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1818 }, |
| 3213 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1818 }, | 3215 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1819 }, |
| 3214 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1819 }, | 3216 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1820 }, |
| 3215 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1751 }, | 3217 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 }, |
| 3216 | .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1820 }, | 3218 | .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1821 }, |
| 3217 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1822 }, | 3219 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1823 }, |
| 3218 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1823 }, | ||
| 3219 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1824 }, | 3220 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1824 }, |
| 3220 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1825 }, | 3221 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1825 }, |
| 3222 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1826 }, | ||
| 3221 | .{ .char = 'a', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, | 3223 | .{ .char = 'a', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, |
| 3222 | .{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, | 3224 | .{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, |
| 3223 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1826 }, | 3225 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1827 }, |
| 3224 | .{ .char = 'y', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1827 }, | 3226 | .{ .char = 'y', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1828 }, |
| 3225 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1827 }, | 3227 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 1828 }, |
| 3226 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1828 }, | 3228 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1829 }, |
| 3227 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1829 }, | 3229 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1830 }, |
| 3228 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1830 }, | 3230 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1831 }, |
| 3229 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1831 }, | 3231 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1832 }, |
| 3230 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1832 }, | 3232 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1833 }, |
| 3231 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1833 }, | 3233 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1834 }, |
| 3232 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1834 }, | ||
| 3233 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1835 }, | 3234 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1835 }, |
| 3234 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1836 }, | 3235 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1836 }, |
| 3235 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1837 }, | 3236 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1837 }, |
| 3237 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1838 }, | ||
| 3236 | .{ .char = 'y', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1278 }, | 3238 | .{ .char = 'y', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1278 }, |
| 3237 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1838 }, | 3239 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1839 }, |
| 3238 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1839 }, | 3240 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1840 }, |
| 3239 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1840 }, | 3241 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1841 }, |
| 3240 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1841 }, | 3242 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1842 }, |
| 3241 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1842 }, | 3243 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1843 }, |
| 3242 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 9, .child_index = 1843 }, | 3244 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 9, .child_index = 1844 }, |
| 3243 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1844 }, | 3245 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1845 }, |
| 3244 | .{ .char = 'o', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, | 3246 | .{ .char = 'o', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, |
| 3245 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1674 }, | 3247 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1674 }, |
| 3246 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1845 }, | 3248 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1846 }, |
| 3247 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 1847 }, | 3249 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 1848 }, |
| 3248 | .{ .char = 'f', .end_of_word = true, .end_of_list = false, .number = 3, .child_index = 1489 }, | 3250 | .{ .char = 'f', .end_of_word = true, .end_of_list = false, .number = 3, .child_index = 1489 }, |
| 3249 | .{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3251 | .{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3250 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1458 }, | 3252 | .{ .char = '_', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1458 }, |
| 3251 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1327 }, | 3253 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1327 }, |
| 3252 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1848 }, | 3254 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1849 }, |
| 3253 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, | 3255 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, |
| 3254 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1849 }, | ||
| 3255 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1850 }, | 3256 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1850 }, |
| 3257 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1851 }, | ||
| 3256 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 287 }, | 3258 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 287 }, |
| 3257 | .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 8, .child_index = 1851 }, | 3259 | .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 8, .child_index = 1852 }, |
| 3258 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 419 }, | 3260 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 419 }, |
| 3259 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1854 }, | 3261 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1855 }, |
| 3260 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1855 }, | 3262 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1856 }, |
| 3261 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1856 }, | 3263 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1857 }, |
| 3262 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1857 }, | 3264 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1858 }, |
| 3263 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1858 }, | 3265 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1859 }, |
| 3264 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1859 }, | 3266 | .{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1860 }, |
| 3265 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1860 }, | 3267 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1861 }, |
| 3266 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1861 }, | 3268 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1862 }, |
| 3269 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1863 }, | ||
| 3267 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 }, | 3270 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 }, |
| 3268 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1862 }, | 3271 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1864 }, |
| 3269 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1863 }, | 3272 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1865 }, |
| 3270 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1864 }, | 3273 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1866 }, |
| 3271 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1865 }, | 3274 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1867 }, |
| 3272 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 13, .child_index = 1866 }, | 3275 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 13, .child_index = 1868 }, |
| 3273 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 25, .child_index = 1872 }, | 3276 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 25, .child_index = 1874 }, |
| 3274 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1883 }, | 3277 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1885 }, |
| 3275 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1884 }, | ||
| 3276 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1885 }, | ||
| 3277 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1886 }, | 3278 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1886 }, |
| 3278 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1887 }, | 3279 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1887 }, |
| 3279 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1888 }, | 3280 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1888 }, |
| 3280 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1889 }, | 3281 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1889 }, |
| 3282 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1890 }, | ||
| 3283 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1891 }, | ||
| 3281 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 657 }, | 3284 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 657 }, |
| 3282 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1890 }, | 3285 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1892 }, |
| 3283 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 1891 }, | 3286 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 1893 }, |
| 3284 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 571 }, | 3287 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 571 }, |
| 3285 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1892 }, | 3288 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1894 }, |
| 3286 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1893 }, | 3289 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1895 }, |
| 3287 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1894 }, | 3290 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1896 }, |
| 3288 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 1895 }, | 3291 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 1897 }, |
| 3289 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1896 }, | 3292 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1898 }, |
| 3290 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 448 }, | 3293 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 448 }, |
| 3291 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 }, | 3294 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 }, |
| 3292 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 453 }, | 3295 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 453 }, |
| 3293 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, | 3296 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, |
| 3294 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 510 }, | 3297 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 510 }, |
| 3295 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1897 }, | 3298 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1899 }, |
| 3296 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1898 }, | 3299 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1900 }, |
| 3297 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1899 }, | 3300 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1901 }, |
| 3298 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1900 }, | 3301 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1902 }, |
| 3299 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1901 }, | 3302 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1903 }, |
| 3300 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1902 }, | 3303 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1904 }, |
| 3301 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1774 }, | 3304 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1775 }, |
| 3302 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1903 }, | 3305 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1905 }, |
| 3303 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1904 }, | 3306 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1906 }, |
| 3304 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1774 }, | 3307 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1775 }, |
| 3305 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1905 }, | ||
| 3306 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1906 }, | ||
| 3307 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1903 }, | ||
| 3308 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1905 }, | ||
| 3309 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1903 }, | ||
| 3310 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1775 }, | ||
| 3311 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1907 }, | 3308 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1907 }, |
| 3312 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1835 }, | 3309 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1908 }, |
| 3313 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1908 }, | 3310 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1905 }, |
| 3311 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1907 }, | ||
| 3312 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1905 }, | ||
| 3313 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1776 }, | ||
| 3314 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1909 }, | ||
| 3315 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1836 }, | ||
| 3316 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1910 }, | ||
| 3314 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 }, | 3317 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 }, |
| 3315 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1909 }, | 3318 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1911 }, |
| 3316 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1911 }, | 3319 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1913 }, |
| 3317 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1912 }, | 3320 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1914 }, |
| 3318 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 301 }, | 3321 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 301 }, |
| 3319 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1915 }, | 3322 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1917 }, |
| 3320 | .{ .char = '2', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3323 | .{ .char = '2', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3321 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1916 }, | 3324 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1918 }, |
| 3322 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1917 }, | 3325 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1919 }, |
| 3323 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1918 }, | 3326 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1920 }, |
| 3324 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1919 }, | 3327 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1921 }, |
| 3325 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1920 }, | 3328 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1922 }, |
| 3326 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1921 }, | 3329 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1923 }, |
| 3327 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1922 }, | 3330 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1924 }, |
| 3328 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1923 }, | 3331 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1925 }, |
| 3329 | .{ .char = '8', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3332 | .{ .char = '8', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3330 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1924 }, | 3333 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1926 }, |
| 3331 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1925 }, | 3334 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1927 }, |
| 3332 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1926 }, | 3335 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1928 }, |
| 3333 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1927 }, | 3336 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1929 }, |
| 3334 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1928 }, | 3337 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1930 }, |
| 3335 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1929 }, | 3338 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1931 }, |
| 3336 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1930 }, | 3339 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1932 }, |
| 3337 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1931 }, | 3340 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1933 }, |
| 3338 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1932 }, | 3341 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1934 }, |
| 3339 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1933 }, | 3342 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1935 }, |
| 3340 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1934 }, | 3343 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1936 }, |
| 3341 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1513 }, | 3344 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1513 }, |
| 3342 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1935 }, | 3345 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1937 }, |
| 3343 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1936 }, | 3346 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1938 }, |
| 3344 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1937 }, | 3347 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1939 }, |
| 3345 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 698 }, | 3348 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 698 }, |
| 3346 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1938 }, | 3349 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1940 }, |
| 3347 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1939 }, | 3350 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1941 }, |
| 3348 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1241 }, | 3351 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1241 }, |
| 3349 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1940 }, | 3352 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1942 }, |
| 3350 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1941 }, | 3353 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1943 }, |
| 3351 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 998 }, | 3354 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 998 }, |
| 3352 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1942 }, | 3355 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1944 }, |
| 3353 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1943 }, | 3356 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1945 }, |
| 3354 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1944 }, | 3357 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1946 }, |
| 3355 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 }, | 3358 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 }, |
| 3356 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1945 }, | 3359 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1947 }, |
| 3357 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1525 }, | 3360 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1525 }, |
| 3358 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1946 }, | 3361 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1948 }, |
| 3359 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1947 }, | 3362 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1949 }, |
| 3360 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1949 }, | 3363 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1951 }, |
| 3361 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1318 }, | 3364 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1318 }, |
| 3362 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1950 }, | 3365 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1952 }, |
| 3363 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1951 }, | 3366 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1953 }, |
| 3364 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1952 }, | ||
| 3365 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1953 }, | ||
| 3366 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1954 }, | 3367 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1954 }, |
| 3367 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1955 }, | 3368 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1955 }, |
| 3369 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1956 }, | ||
| 3370 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1957 }, | ||
| 3368 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 }, | 3371 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 }, |
| 3369 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1956 }, | 3372 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1958 }, |
| 3370 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1957 }, | 3373 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1959 }, |
| 3371 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1958 }, | 3374 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1960 }, |
| 3372 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1959 }, | 3375 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1961 }, |
| 3373 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1960 }, | 3376 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 1962 }, |
| 3374 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1961 }, | 3377 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1963 }, |
| 3375 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1962 }, | 3378 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1964 }, |
| 3376 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 9, .child_index = 1963 }, | 3379 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 9, .child_index = 1965 }, |
| 3377 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1950 }, | 3380 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1952 }, |
| 3378 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1967 }, | 3381 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 1969 }, |
| 3379 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1968 }, | 3382 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1970 }, |
| 3380 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1969 }, | 3383 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1971 }, |
| 3381 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, | 3384 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, |
| 3382 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1280 }, | 3385 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1280 }, |
| 3383 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1922 }, | 3386 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1924 }, |
| 3384 | .{ .char = 'f', .end_of_word = true, .end_of_list = false, .number = 3, .child_index = 1489 }, | 3387 | .{ .char = 'f', .end_of_word = true, .end_of_list = false, .number = 3, .child_index = 1489 }, |
| 3385 | .{ .char = 'l', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, | 3388 | .{ .char = 'l', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, |
| 3386 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1970 }, | 3389 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1972 }, |
| 3387 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1971 }, | 3390 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1973 }, |
| 3388 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1972 }, | 3391 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1974 }, |
| 3389 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1973 }, | 3392 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1975 }, |
| 3390 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1974 }, | 3393 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1976 }, |
| 3391 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1975 }, | 3394 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1977 }, |
| 3392 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1976 }, | 3395 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1978 }, |
| 3393 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1977 }, | 3396 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1979 }, |
| 3394 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1978 }, | 3397 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1980 }, |
| 3398 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1981 }, | ||
| 3395 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 3399 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 3396 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1979 }, | 3400 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 1982 }, |
| 3397 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1980 }, | 3401 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1983 }, |
| 3398 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1981 }, | 3402 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1984 }, |
| 3399 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1579 }, | 3403 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1579 }, |
| 3400 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1580 }, | 3404 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1580 }, |
| 3401 | .{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 7, .child_index = 1587 }, | 3405 | .{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 7, .child_index = 1587 }, |
| 3402 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1982 }, | 3406 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1985 }, |
| 3403 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1583 }, | 3407 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1583 }, |
| 3404 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1588 }, | 3408 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1588 }, |
| 3405 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1983 }, | 3409 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1986 }, |
| 3406 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1985 }, | 3410 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1988 }, |
| 3407 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 791 }, | 3411 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 791 }, |
| 3408 | .{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 8, .child_index = 792 }, | 3412 | .{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 8, .child_index = 792 }, |
| 3409 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 794 }, | 3413 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 794 }, |
| 3410 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 795 }, | 3414 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 795 }, |
| 3411 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 797 }, | 3415 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 797 }, |
| 3412 | .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 798 }, | 3416 | .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 798 }, |
| 3413 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1986 }, | 3417 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 1989 }, |
| 3414 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1586 }, | 3418 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1586 }, |
| 3415 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 804 }, | 3419 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 804 }, |
| 3416 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1988 }, | 3420 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 1991 }, |
| 3417 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1995 }, | 3421 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1998 }, |
| 3418 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1996 }, | 3422 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1999 }, |
| 3419 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1997 }, | 3423 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2000 }, |
| 3420 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 3424 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 3421 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 1998 }, | 3425 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2001 }, |
| 3422 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1999 }, | 3426 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2002 }, |
| 3423 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2000 }, | 3427 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2003 }, |
| 3424 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2001 }, | 3428 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2004 }, |
| 3425 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2002 }, | 3429 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2005 }, |
| 3426 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2003 }, | 3430 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2006 }, |
| 3427 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2004 }, | 3431 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2007 }, |
| 3428 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 2005 }, | 3432 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 2008 }, |
| 3429 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 791 }, | 3433 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 791 }, |
| 3430 | .{ .char = 'b', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3434 | .{ .char = 'b', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3431 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2006 }, | 3435 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2009 }, |
| 3432 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2007 }, | 3436 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2010 }, |
| 3433 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2008 }, | 3437 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2011 }, |
| 3434 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2009 }, | 3438 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2012 }, |
| 3435 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2010 }, | 3439 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2013 }, |
| 3436 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2011 }, | 3440 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2014 }, |
| 3437 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2012 }, | 3441 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2015 }, |
| 3438 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2011 }, | 3442 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2014 }, |
| 3439 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2011 }, | 3443 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2014 }, |
| 3440 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2013 }, | 3444 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2016 }, |
| 3441 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2014 }, | 3445 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2017 }, |
| 3442 | .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2015 }, | 3446 | .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2018 }, |
| 3443 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2016 }, | 3447 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2019 }, |
| 3444 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2017 }, | 3448 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2020 }, |
| 3445 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1519 }, | 3449 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1519 }, |
| 3446 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2018 }, | 3450 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2021 }, |
| 3447 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2019 }, | 3451 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2022 }, |
| 3448 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2020 }, | 3452 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2023 }, |
| 3449 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2021 }, | 3453 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2024 }, |
| 3450 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2022 }, | 3454 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2025 }, |
| 3451 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 503 }, | 3455 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 503 }, |
| 3452 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2023 }, | 3456 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2026 }, |
| 3453 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2024 }, | 3457 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2027 }, |
| 3454 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2025 }, | 3458 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2028 }, |
| 3455 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2026 }, | 3459 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2029 }, |
| 3456 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 5, .child_index = 1295 }, | 3460 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 5, .child_index = 1295 }, |
| 3457 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2027 }, | 3461 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2030 }, |
| 3458 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2028 }, | 3462 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2031 }, |
| 3459 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 }, | 3463 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 }, |
| 3460 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2029 }, | 3464 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2032 }, |
| 3461 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 554 }, | 3465 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 554 }, |
| 3462 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2030 }, | 3466 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2033 }, |
| 3463 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2031 }, | 3467 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2034 }, |
| 3464 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2032 }, | 3468 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2035 }, |
| 3465 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2033 }, | 3469 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2036 }, |
| 3466 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2034 }, | 3470 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2037 }, |
| 3467 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2035 }, | 3471 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2038 }, |
| 3468 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2036 }, | 3472 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2039 }, |
| 3469 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2037 }, | 3473 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2040 }, |
| 3470 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2038 }, | 3474 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2041 }, |
| 3471 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2039 }, | 3475 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2042 }, |
| 3472 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 419 }, | 3476 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 419 }, |
| 3473 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2040 }, | 3477 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2043 }, |
| 3474 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2041 }, | 3478 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2044 }, |
| 3475 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2042 }, | 3479 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2045 }, |
| 3476 | .{ .char = 'q', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2043 }, | 3480 | .{ .char = 'q', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2046 }, |
| 3477 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2044 }, | 3481 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2047 }, |
| 3478 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2045 }, | 3482 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2048 }, |
| 3479 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2046 }, | 3483 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2049 }, |
| 3480 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2047 }, | 3484 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2050 }, |
| 3481 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2048 }, | 3485 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2051 }, |
| 3482 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2049 }, | 3486 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2052 }, |
| 3483 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2050 }, | 3487 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2053 }, |
| 3484 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2051 }, | 3488 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2054 }, |
| 3485 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2052 }, | 3489 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2055 }, |
| 3486 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2053 }, | 3490 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2056 }, |
| 3487 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2054 }, | 3491 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2057 }, |
| 3488 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1745 }, | 3492 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1746 }, |
| 3489 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2055 }, | 3493 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2058 }, |
| 3490 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2056 }, | 3494 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2059 }, |
| 3491 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2057 }, | 3495 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2060 }, |
| 3492 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2059 }, | 3496 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2062 }, |
| 3493 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2060 }, | 3497 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2063 }, |
| 3494 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2063 }, | 3498 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2066 }, |
| 3495 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2064 }, | 3499 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2067 }, |
| 3496 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1757 }, | 3500 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1758 }, |
| 3497 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 2065 }, | 3501 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 2068 }, |
| 3498 | .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 572 }, | 3502 | .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 572 }, |
| 3499 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, | 3503 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, |
| 3500 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2068 }, | 3504 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2071 }, |
| 3501 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2069 }, | 3505 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2072 }, |
| 3502 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1923 }, | 3506 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 1925 }, |
| 3503 | .{ .char = 'i', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 352 }, | 3507 | .{ .char = 'i', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 352 }, |
| 3504 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2070 }, | 3508 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2073 }, |
| 3505 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2071 }, | 3509 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2074 }, |
| 3506 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2072 }, | 3510 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2075 }, |
| 3507 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2073 }, | 3511 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2076 }, |
| 3508 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1982 }, | 3512 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1985 }, |
| 3513 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2077 }, | ||
| 3509 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1661 }, | 3514 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1661 }, |
| 3510 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2074 }, | 3515 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2078 }, |
| 3511 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2075 }, | 3516 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2079 }, |
| 3512 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 2076 }, | 3517 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 2080 }, |
| 3513 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2077 }, | 3518 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2081 }, |
| 3514 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2078 }, | 3519 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2082 }, |
| 3515 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 236 }, | 3520 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 236 }, |
| 3516 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 851 }, | 3521 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 851 }, |
| 3517 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 851 }, | 3522 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 851 }, |
| 3518 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 854 }, | 3523 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 854 }, |
| 3519 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 864 }, | 3524 | .{ .char = 't', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 864 }, |
| 3520 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 865 }, | 3525 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 865 }, |
| 3521 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 2079 }, | 3526 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 12, .child_index = 2083 }, |
| 3522 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1759 }, | 3527 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1760 }, |
| 3523 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2081 }, | 3528 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2085 }, |
| 3524 | .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2082 }, | 3529 | .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2086 }, |
| 3525 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2083 }, | 3530 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2087 }, |
| 3526 | .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2084 }, | 3531 | .{ .char = 'u', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2088 }, |
| 3527 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2085 }, | 3532 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2089 }, |
| 3528 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2086 }, | 3533 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2090 }, |
| 3529 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2087 }, | 3534 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2091 }, |
| 3530 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2088 }, | 3535 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2092 }, |
| 3531 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2089 }, | 3536 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2093 }, |
| 3532 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2090 }, | 3537 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2094 }, |
| 3533 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2091 }, | 3538 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2095 }, |
| 3534 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2092 }, | 3539 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2096 }, |
| 3535 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2093 }, | 3540 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2097 }, |
| 3536 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2094 }, | 3541 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2098 }, |
| 3537 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2095 }, | 3542 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2099 }, |
| 3538 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 2096 }, | 3543 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 10, .child_index = 2100 }, |
| 3539 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2097 }, | 3544 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2101 }, |
| 3540 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 476 }, | 3545 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 476 }, |
| 3541 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2098 }, | 3546 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2102 }, |
| 3542 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2099 }, | 3547 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2103 }, |
| 3543 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2100 }, | 3548 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2104 }, |
| 3544 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2101 }, | 3549 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2105 }, |
| 3545 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2011 }, | 3550 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2014 }, |
| 3546 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2102 }, | 3551 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2106 }, |
| 3547 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, | 3552 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, |
| 3548 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2103 }, | 3553 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2107 }, |
| 3549 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2104 }, | 3554 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2108 }, |
| 3550 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2105 }, | 3555 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2109 }, |
| 3551 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2106 }, | 3556 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2110 }, |
| 3552 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2107 }, | 3557 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2111 }, |
| 3553 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2108 }, | 3558 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2112 }, |
| 3554 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2109 }, | 3559 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2113 }, |
| 3555 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2110 }, | 3560 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2114 }, |
| 3556 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2111 }, | 3561 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2115 }, |
| 3557 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2112 }, | 3562 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2116 }, |
| 3558 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 }, | 3563 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 281 }, |
| 3559 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2113 }, | 3564 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2117 }, |
| 3560 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2114 }, | 3565 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2118 }, |
| 3561 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2115 }, | 3566 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2119 }, |
| 3562 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 568 }, | 3567 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 568 }, |
| 3563 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2116 }, | 3568 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2120 }, |
| 3564 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2117 }, | ||
| 3565 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2118 }, | ||
| 3566 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2119 }, | ||
| 3567 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2120 }, | ||
| 3568 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2121 }, | 3569 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2121 }, |
| 3570 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2122 }, | ||
| 3571 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2123 }, | ||
| 3572 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2124 }, | ||
| 3573 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2125 }, | ||
| 3569 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 }, | 3574 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 }, |
| 3570 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2122 }, | 3575 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2126 }, |
| 3571 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 }, | 3576 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 }, |
| 3572 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2123 }, | 3577 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2127 }, |
| 3573 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2124 }, | 3578 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2128 }, |
| 3574 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 }, | 3579 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 }, |
| 3575 | .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2125 }, | 3580 | .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2129 }, |
| 3576 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1822 }, | 3581 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1823 }, |
| 3577 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2126 }, | 3582 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2130 }, |
| 3578 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1423 }, | 3583 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1423 }, |
| 3579 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2041 }, | 3584 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2044 }, |
| 3580 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2127 }, | 3585 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2131 }, |
| 3581 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2128 }, | 3586 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2132 }, |
| 3582 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2129 }, | 3587 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2133 }, |
| 3583 | .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, | 3588 | .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 1479 }, |
| 3584 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1689 }, | 3589 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 1689 }, |
| 3585 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2130 }, | 3590 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2134 }, |
| 3586 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2131 }, | 3591 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2135 }, |
| 3587 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2132 }, | 3592 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2136 }, |
| 3588 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2133 }, | 3593 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2137 }, |
| 3589 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2135 }, | 3594 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2139 }, |
| 3590 | .{ .char = 'g', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, | 3595 | .{ .char = 'g', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, |
| 3591 | .{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 695 }, | 3596 | .{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 695 }, |
| 3592 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2136 }, | 3597 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2140 }, |
| 3593 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2137 }, | 3598 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2141 }, |
| 3594 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2138 }, | 3599 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2142 }, |
| 3595 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2139 }, | 3600 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2143 }, |
| 3596 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2141 }, | 3601 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2145 }, |
| 3597 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2142 }, | 3602 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2146 }, |
| 3598 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2143 }, | 3603 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2147 }, |
| 3599 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2144 }, | 3604 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2148 }, |
| 3600 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 }, | 3605 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 }, |
| 3601 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2145 }, | 3606 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2149 }, |
| 3602 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2146 }, | 3607 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2150 }, |
| 3603 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2147 }, | 3608 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2151 }, |
| 3604 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2148 }, | 3609 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2152 }, |
| 3605 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1974 }, | 3610 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1976 }, |
| 3606 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2149 }, | 3611 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2153 }, |
| 3607 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2150 }, | 3612 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2154 }, |
| 3608 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2151 }, | 3613 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2155 }, |
| 3609 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 2152 }, | 3614 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2156 }, |
| 3610 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2157 }, | 3615 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 7, .child_index = 2157 }, |
| 3611 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2108 }, | 3616 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2162 }, |
| 3612 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2161 }, | 3617 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2112 }, |
| 3613 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2161 }, | 3618 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2166 }, |
| 3614 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2162 }, | 3619 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2166 }, |
| 3620 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2167 }, | ||
| 3615 | .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, | 3621 | .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, |
| 3616 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2163 }, | 3622 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2168 }, |
| 3617 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1759 }, | 3623 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1760 }, |
| 3618 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2082 }, | 3624 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2086 }, |
| 3619 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, | 3625 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, |
| 3620 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2164 }, | 3626 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2169 }, |
| 3621 | .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, | 3627 | .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, |
| 3622 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2165 }, | 3628 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2170 }, |
| 3623 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2166 }, | 3629 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2171 }, |
| 3624 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2167 }, | 3630 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2172 }, |
| 3625 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2168 }, | 3631 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2173 }, |
| 3626 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 3632 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 3627 | .{ .char = 'E', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2169 }, | 3633 | .{ .char = 'E', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2174 }, |
| 3628 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2170 }, | 3634 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2175 }, |
| 3629 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 10, .child_index = 2171 }, | 3635 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 10, .child_index = 2176 }, |
| 3630 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 3636 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 3631 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2176 }, | 3637 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2181 }, |
| 3632 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2177 }, | 3638 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2182 }, |
| 3633 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2178 }, | 3639 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2183 }, |
| 3634 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2179 }, | 3640 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2184 }, |
| 3635 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2180 }, | 3641 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2185 }, |
| 3636 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2181 }, | 3642 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2186 }, |
| 3637 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2182 }, | 3643 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2187 }, |
| 3638 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2183 }, | ||
| 3639 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2184 }, | ||
| 3640 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2185 }, | ||
| 3641 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2157 }, | ||
| 3642 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2186 }, | ||
| 3643 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2187 }, | ||
| 3644 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 }, | ||
| 3645 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2188 }, | 3644 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2188 }, |
| 3646 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2189 }, | 3645 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2189 }, |
| 3647 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2190 }, | 3646 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2190 }, |
| 3648 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2191 }, | 3647 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2162 }, |
| 3649 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2192 }, | 3648 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2191 }, |
| 3650 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2193 }, | 3649 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2192 }, |
| 3651 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2194 }, | 3650 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 }, |
| 3652 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2195 }, | 3651 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2193 }, |
| 3653 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2196 }, | 3652 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2194 }, |
| 3654 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2197 }, | 3653 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2195 }, |
| 3655 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2198 }, | 3654 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2196 }, |
| 3656 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2199 }, | 3655 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2197 }, |
| 3657 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2200 }, | 3656 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2198 }, |
| 3658 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1943 }, | 3657 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2199 }, |
| 3659 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2201 }, | 3658 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2200 }, |
| 3660 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2202 }, | 3659 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2201 }, |
| 3661 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2203 }, | 3660 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2202 }, |
| 3662 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2204 }, | 3661 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2203 }, |
| 3663 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2205 }, | 3662 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2204 }, |
| 3664 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2206 }, | 3663 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2205 }, |
| 3665 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2207 }, | 3664 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1945 }, |
| 3666 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2208 }, | 3665 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2206 }, |
| 3667 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2209 }, | 3666 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2207 }, |
| 3668 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2210 }, | 3667 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2208 }, |
| 3669 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2211 }, | 3668 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2209 }, |
| 3670 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2212 }, | 3669 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2210 }, |
| 3671 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2213 }, | 3670 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2211 }, |
| 3672 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2214 }, | 3671 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2212 }, |
| 3673 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2215 }, | 3672 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2213 }, |
| 3674 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2216 }, | 3673 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2214 }, |
| 3675 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2141 }, | 3674 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2215 }, |
| 3676 | .{ .char = 'x', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2217 }, | 3675 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2216 }, |
| 3677 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2217 }, | 3676 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2217 }, |
| 3678 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2157 }, | 3677 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2218 }, |
| 3679 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2145 }, | 3678 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2219 }, |
| 3680 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2218 }, | 3679 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2220 }, |
| 3681 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2219 }, | 3680 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2221 }, |
| 3681 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2145 }, | ||
| 3682 | .{ .char = 'x', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2222 }, | ||
| 3683 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2222 }, | ||
| 3684 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2162 }, | ||
| 3685 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2149 }, | ||
| 3686 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2223 }, | ||
| 3687 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2224 }, | ||
| 3682 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 3688 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 3683 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2220 }, | 3689 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2225 }, |
| 3690 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2226 }, | ||
| 3684 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 3691 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 3685 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1757 }, | 3692 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1758 }, |
| 3686 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1759 }, | 3693 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 1760 }, |
| 3687 | .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 572 }, | 3694 | .{ .char = 'o', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 572 }, |
| 3688 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1762 }, | 3695 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1763 }, |
| 3689 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, | 3696 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, |
| 3690 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 }, | 3697 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 }, |
| 3691 | .{ .char = '3', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1787 }, | 3698 | .{ .char = '3', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1788 }, |
| 3692 | .{ .char = '6', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 633 }, | 3699 | .{ .char = '6', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 633 }, |
| 3693 | .{ .char = '8', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3700 | .{ .char = '8', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3694 | .{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, | 3701 | .{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, |
| 3695 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2161 }, | 3702 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2166 }, |
| 3696 | .{ .char = 'b', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, | 3703 | .{ .char = 'b', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, |
| 3697 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2221 }, | 3704 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2227 }, |
| 3698 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2222 }, | 3705 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2228 }, |
| 3699 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 314 }, | 3706 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 314 }, |
| 3700 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1421 }, | 3707 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 1421 }, |
| 3701 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2223 }, | 3708 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2229 }, |
| 3702 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2224 }, | 3709 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2230 }, |
| 3703 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2225 }, | 3710 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2231 }, |
| 3704 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 }, | 3711 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 }, |
| 3705 | .{ .char = '8', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, | 3712 | .{ .char = '8', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, |
| 3706 | .{ .char = 'A', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2226 }, | 3713 | .{ .char = 'A', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2232 }, |
| 3707 | .{ .char = 'P', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2035 }, | 3714 | .{ .char = 'P', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2038 }, |
| 3708 | .{ .char = 'S', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2227 }, | 3715 | .{ .char = 'S', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2233 }, |
| 3709 | .{ .char = 'M', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2228 }, | 3716 | .{ .char = 'M', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2234 }, |
| 3710 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2229 }, | 3717 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2235 }, |
| 3711 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2230 }, | 3718 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2236 }, |
| 3712 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 }, | 3719 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 }, |
| 3713 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2231 }, | 3720 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2237 }, |
| 3714 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2232 }, | 3721 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2238 }, |
| 3715 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2233 }, | 3722 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2239 }, |
| 3716 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2234 }, | 3723 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2240 }, |
| 3717 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2235 }, | 3724 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2241 }, |
| 3718 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2236 }, | 3725 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2242 }, |
| 3719 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2237 }, | 3726 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2243 }, |
| 3720 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2238 }, | 3727 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2244 }, |
| 3721 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2239 }, | 3728 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2245 }, |
| 3722 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, | 3729 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, |
| 3723 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2240 }, | 3730 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2246 }, |
| 3724 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 }, | 3731 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 }, |
| 3725 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2241 }, | 3732 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2247 }, |
| 3726 | .{ .char = 'j', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2242 }, | 3733 | .{ .char = 'j', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2248 }, |
| 3727 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2243 }, | 3734 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2249 }, |
| 3728 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2244 }, | 3735 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2250 }, |
| 3729 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2245 }, | 3736 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2251 }, |
| 3730 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2201 }, | 3737 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2206 }, |
| 3731 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2246 }, | 3738 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 5, .child_index = 2252 }, |
| 3732 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2247 }, | 3739 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2253 }, |
| 3733 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2248 }, | 3740 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2254 }, |
| 3734 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 566 }, | 3741 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 566 }, |
| 3735 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2249 }, | 3742 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2255 }, |
| 3736 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 }, | 3743 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1753 }, |
| 3737 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2250 }, | 3744 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2256 }, |
| 3738 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2251 }, | 3745 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2257 }, |
| 3739 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2252 }, | 3746 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2258 }, |
| 3740 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2253 }, | 3747 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2259 }, |
| 3741 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2254 }, | 3748 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2260 }, |
| 3742 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2231 }, | 3749 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2237 }, |
| 3743 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2255 }, | 3750 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2261 }, |
| 3744 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2256 }, | 3751 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2262 }, |
| 3745 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2257 }, | 3752 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2263 }, |
| 3746 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2258 }, | 3753 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2264 }, |
| 3747 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2259 }, | 3754 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2265 }, |
| 3748 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2260 }, | 3755 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2266 }, |
| 3749 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2261 }, | 3756 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2267 }, |
| 3750 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2262 }, | 3757 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2268 }, |
| 3751 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2263 }, | 3758 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2269 }, |
| 3752 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2264 }, | 3759 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2270 }, |
| 3753 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2265 }, | 3760 | .{ .char = 'k', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2271 }, |
| 3754 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2266 }, | 3761 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2272 }, |
| 3755 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2267 }, | 3762 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2273 }, |
| 3756 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2268 }, | 3763 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2274 }, |
| 3757 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2269 }, | 3764 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2275 }, |
| 3765 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2276 }, | ||
| 3758 | .{ .char = '1', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 632 }, | 3766 | .{ .char = '1', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 632 }, |
| 3759 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1430 }, | 3767 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 1430 }, |
| 3760 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2270 }, | 3768 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2277 }, |
| 3761 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2271 }, | 3769 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2278 }, |
| 3762 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 3770 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 3763 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2272 }, | 3771 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2279 }, |
| 3764 | .{ .char = 'w', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3772 | .{ .char = 'w', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3765 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2273 }, | 3773 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2280 }, |
| 3766 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2274 }, | 3774 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2281 }, |
| 3767 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2275 }, | 3775 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2282 }, |
| 3768 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2276 }, | 3776 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2283 }, |
| 3769 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2277 }, | 3777 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2284 }, |
| 3770 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2278 }, | 3778 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2285 }, |
| 3771 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2279 }, | 3779 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2286 }, |
| 3772 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 3780 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 3773 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2281 }, | 3781 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2288 }, |
| 3774 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2282 }, | 3782 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2289 }, |
| 3775 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1546 }, | 3783 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1546 }, |
| 3776 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2283 }, | 3784 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2290 }, |
| 3777 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2284 }, | 3785 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 40, .child_index = 2291 }, |
| 3778 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2296 }, | 3786 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2303 }, |
| 3779 | .{ .char = 'm', .end_of_word = true, .end_of_list = true, .number = 5, .child_index = 1295 }, | 3787 | .{ .char = 'm', .end_of_word = true, .end_of_list = true, .number = 5, .child_index = 1295 }, |
| 3780 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2297 }, | 3788 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2304 }, |
| 3781 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2298 }, | 3789 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2305 }, |
| 3782 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2299 }, | 3790 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2306 }, |
| 3783 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 3791 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 3784 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2300 }, | 3792 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2307 }, |
| 3785 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2301 }, | 3793 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2308 }, |
| 3786 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2303 }, | 3794 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2310 }, |
| 3787 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2304 }, | 3795 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2311 }, |
| 3788 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2305 }, | 3796 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2312 }, |
| 3789 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2306 }, | 3797 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2313 }, |
| 3790 | .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2307 }, | 3798 | .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2314 }, |
| 3791 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2308 }, | 3799 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2315 }, |
| 3792 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2309 }, | 3800 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2316 }, |
| 3793 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2310 }, | 3801 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2317 }, |
| 3794 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2197 }, | 3802 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2202 }, |
| 3795 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 561 }, | 3803 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 561 }, |
| 3796 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2312 }, | 3804 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2319 }, |
| 3797 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2313 }, | 3805 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2320 }, |
| 3798 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2314 }, | 3806 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2171 }, |
| 3799 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2315 }, | 3807 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2321 }, |
| 3800 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2316 }, | 3808 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2322 }, |
| 3801 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2317 }, | 3809 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2323 }, |
| 3802 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2319 }, | 3810 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 16, .child_index = 2324 }, |
| 3811 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2326 }, | ||
| 3803 | .{ .char = 'b', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1434 }, | 3812 | .{ .char = 'b', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 1434 }, |
| 3804 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2320 }, | 3813 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2327 }, |
| 3805 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2321 }, | 3814 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2328 }, |
| 3806 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2322 }, | 3815 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2329 }, |
| 3807 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2323 }, | 3816 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2330 }, |
| 3808 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2324 }, | 3817 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2331 }, |
| 3809 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2325 }, | 3818 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2332 }, |
| 3810 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2326 }, | 3819 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2333 }, |
| 3811 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2327 }, | 3820 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2334 }, |
| 3812 | .{ .char = 'f', .end_of_word = true, .end_of_list = false, .number = 2, .child_index = 2225 }, | 3821 | .{ .char = 'f', .end_of_word = true, .end_of_list = false, .number = 2, .child_index = 2231 }, |
| 3813 | .{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3822 | .{ .char = 'l', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3814 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 }, | 3823 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 486 }, |
| 3815 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2328 }, | 3824 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2335 }, |
| 3816 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2329 }, | 3825 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2336 }, |
| 3817 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2330 }, | 3826 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2337 }, |
| 3818 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2335 }, | 3827 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2342 }, |
| 3819 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 2336 }, | 3828 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 5, .child_index = 2343 }, |
| 3820 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2339 }, | 3829 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2346 }, |
| 3821 | .{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2340 }, | 3830 | .{ .char = 'f', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2347 }, |
| 3822 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2342 }, | 3831 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2349 }, |
| 3823 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2343 }, | 3832 | .{ .char = 'm', .end_of_word = false, .end_of_list = false, .number = 6, .child_index = 2350 }, |
| 3824 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2345 }, | 3833 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2352 }, |
| 3825 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2346 }, | 3834 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2353 }, |
| 3826 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2347 }, | 3835 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2354 }, |
| 3827 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 2349 }, | 3836 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 2356 }, |
| 3828 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2352 }, | 3837 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2359 }, |
| 3829 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2354 }, | 3838 | .{ .char = 'p', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2361 }, |
| 3830 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2355 }, | 3839 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2362 }, |
| 3831 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2356 }, | 3840 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2363 }, |
| 3832 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2357 }, | 3841 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2364 }, |
| 3833 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2358 }, | 3842 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2365 }, |
| 3834 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1583 }, | 3843 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 1583 }, |
| 3835 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1588 }, | 3844 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1588 }, |
| 3836 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2359 }, | 3845 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2366 }, |
| 3837 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 450 }, | 3846 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 450 }, |
| 3838 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2360 }, | 3847 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2367 }, |
| 3839 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2361 }, | 3848 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2368 }, |
| 3840 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2362 }, | 3849 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2369 }, |
| 3841 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2363 }, | 3850 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2370 }, |
| 3842 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2364 }, | 3851 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2371 }, |
| 3843 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2367 }, | 3852 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2374 }, |
| 3844 | .{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3853 | .{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3845 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2368 }, | 3854 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2375 }, |
| 3846 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2369 }, | 3855 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2376 }, |
| 3847 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2370 }, | 3856 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2377 }, |
| 3848 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2371 }, | 3857 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2378 }, |
| 3849 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2372 }, | 3858 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2379 }, |
| 3850 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 8, .child_index = 2373 }, | 3859 | .{ .char = 'r', .end_of_word = false, .end_of_list = false, .number = 8, .child_index = 2380 }, |
| 3851 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2374 }, | 3860 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2381 }, |
| 3852 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2375 }, | 3861 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2382 }, |
| 3853 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2376 }, | 3862 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2383 }, |
| 3854 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2377 }, | 3863 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2384 }, |
| 3855 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2378 }, | 3864 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2385 }, |
| 3856 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2379 }, | 3865 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2386 }, |
| 3857 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2380 }, | 3866 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2387 }, |
| 3858 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2381 }, | 3867 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2388 }, |
| 3859 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2382 }, | 3868 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2389 }, |
| 3860 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2383 }, | 3869 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2390 }, |
| 3861 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, | 3870 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, |
| 3862 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2384 }, | 3871 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2391 }, |
| 3863 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 335 }, | 3872 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 335 }, |
| 3864 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2385 }, | 3873 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2392 }, |
| 3865 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2386 }, | 3874 | .{ .char = 'd', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2393 }, |
| 3866 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2387 }, | 3875 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2394 }, |
| 3867 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2388 }, | 3876 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2395 }, |
| 3868 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2389 }, | 3877 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2396 }, |
| 3869 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2390 }, | 3878 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2397 }, |
| 3870 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 706 }, | 3879 | .{ .char = 'e', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 706 }, |
| 3871 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2391 }, | 3880 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2398 }, |
| 3872 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2393 }, | 3881 | .{ .char = 'x', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2400 }, |
| 3873 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2394 }, | 3882 | .{ .char = 'l', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2401 }, |
| 3874 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2395 }, | 3883 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2402 }, |
| 3875 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2397 }, | 3884 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2404 }, |
| 3876 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2398 }, | 3885 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 3, .child_index = 2405 }, |
| 3877 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2399 }, | 3886 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2406 }, |
| 3878 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2400 }, | 3887 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2407 }, |
| 3879 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2401 }, | 3888 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2408 }, |
| 3880 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 567 }, | 3889 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 567 }, |
| 3881 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2403 }, | 3890 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2410 }, |
| 3882 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2404 }, | 3891 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2411 }, |
| 3883 | .{ .char = 'q', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 276 }, | 3892 | .{ .char = 'q', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 276 }, |
| 3884 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2405 }, | 3893 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2412 }, |
| 3885 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2404 }, | 3894 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 2, .child_index = 2411 }, |
| 3886 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2406 }, | 3895 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2413 }, |
| 3887 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2407 }, | 3896 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2414 }, |
| 3888 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2408 }, | 3897 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2415 }, |
| 3889 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2409 }, | 3898 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2416 }, |
| 3890 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2410 }, | 3899 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2417 }, |
| 3891 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2411 }, | 3900 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2418 }, |
| 3892 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2412 }, | 3901 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2419 }, |
| 3893 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2413 }, | 3902 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2420 }, |
| 3894 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2414 }, | 3903 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2421 }, |
| 3895 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2415 }, | 3904 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2422 }, |
| 3896 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2416 }, | 3905 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2423 }, |
| 3897 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2417 }, | 3906 | .{ .char = 'c', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2424 }, |
| 3898 | .{ .char = 'g', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2418 }, | 3907 | .{ .char = 'g', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2425 }, |
| 3899 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2419 }, | 3908 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2426 }, |
| 3900 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2363 }, | 3909 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2370 }, |
| 3901 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2420 }, | 3910 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2427 }, |
| 3902 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2421 }, | 3911 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2428 }, |
| 3903 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2422 }, | 3912 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2429 }, |
| 3904 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, | 3913 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 974 }, |
| 3905 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2423 }, | 3914 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2430 }, |
| 3906 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2424 }, | 3915 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2431 }, |
| 3907 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2425 }, | 3916 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2432 }, |
| 3908 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2426 }, | 3917 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2433 }, |
| 3909 | .{ .char = 'C', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2427 }, | 3918 | .{ .char = 'C', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2434 }, |
| 3910 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2428 }, | 3919 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2435 }, |
| 3911 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2429 }, | 3920 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2436 }, |
| 3912 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2430 }, | 3921 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2437 }, |
| 3913 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2431 }, | 3922 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2438 }, |
| 3914 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2432 }, | 3923 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2439 }, |
| 3915 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2433 }, | 3924 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2440 }, |
| 3916 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2434 }, | 3925 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2441 }, |
| 3917 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2435 }, | 3926 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2442 }, |
| 3918 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 }, | 3927 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 335 }, |
| 3919 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2436 }, | 3928 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2443 }, |
| 3920 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, | 3929 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 447 }, |
| 3921 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2437 }, | 3930 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2444 }, |
| 3922 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2438 }, | 3931 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2445 }, |
| 3923 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2439 }, | 3932 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2446 }, |
| 3924 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2440 }, | 3933 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2447 }, |
| 3925 | .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2441 }, | 3934 | .{ .char = 's', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2448 }, |
| 3926 | .{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2442 }, | 3935 | .{ .char = 'p', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2449 }, |
| 3927 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, | 3936 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 649 }, |
| 3928 | .{ .char = 'a', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, | 3937 | .{ .char = 'a', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, |
| 3929 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 }, | 3938 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 448 }, |
| 3930 | .{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2442 }, | 3939 | .{ .char = 'g', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2449 }, |
| 3931 | .{ .char = 'x', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2444 }, | 3940 | .{ .char = 'x', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2451 }, |
| 3932 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2444 }, | 3941 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 3, .child_index = 2451 }, |
| 3933 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2446 }, | 3942 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2453 }, |
| 3934 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2447 }, | 3943 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2454 }, |
| 3935 | .{ .char = 'w', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3944 | .{ .char = 'w', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3936 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2448 }, | 3945 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2455 }, |
| 3937 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2441 }, | 3946 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2448 }, |
| 3938 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2436 }, | 3947 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2443 }, |
| 3939 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2449 }, | 3948 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2456 }, |
| 3940 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2450 }, | 3949 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2457 }, |
| 3941 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 }, | 3950 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 }, |
| 3942 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2451 }, | 3951 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2458 }, |
| 3943 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2452 }, | 3952 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2459 }, |
| 3944 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2453 }, | 3953 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2460 }, |
| 3945 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2454 }, | 3954 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2461 }, |
| 3946 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2455 }, | 3955 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2462 }, |
| 3947 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2456 }, | 3956 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2463 }, |
| 3948 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2457 }, | 3957 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2464 }, |
| 3949 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2458 }, | 3958 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2465 }, |
| 3950 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2459 }, | 3959 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2466 }, |
| 3951 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2460 }, | 3960 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2467 }, |
| 3952 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2461 }, | 3961 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2468 }, |
| 3953 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2462 }, | 3962 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2469 }, |
| 3954 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2463 }, | ||
| 3955 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2464 }, | ||
| 3956 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 768 }, | ||
| 3957 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2374 }, | ||
| 3958 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 8, .child_index = 2465 }, | ||
| 3959 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2467 }, | ||
| 3960 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2468 }, | ||
| 3961 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2469 }, | ||
| 3962 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2470 }, | 3963 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2470 }, |
| 3963 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2471 }, | 3964 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2471 }, |
| 3964 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2472 }, | 3965 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 768 }, |
| 3965 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2473 }, | 3966 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 8, .child_index = 2381 }, |
| 3966 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2474 }, | 3967 | .{ .char = 't', .end_of_word = true, .end_of_list = true, .number = 8, .child_index = 2472 }, |
| 3967 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2475 }, | 3968 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 6, .child_index = 2474 }, |
| 3968 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2476 }, | 3969 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2475 }, |
| 3969 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2477 }, | 3970 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2476 }, |
| 3970 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2478 }, | 3971 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2477 }, |
| 3971 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2479 }, | 3972 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2478 }, |
| 3972 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2480 }, | 3973 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2479 }, |
| 3973 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1751 }, | 3974 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2480 }, |
| 3975 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2481 }, | ||
| 3976 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2482 }, | ||
| 3977 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2483 }, | ||
| 3978 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2484 }, | ||
| 3979 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2485 }, | ||
| 3980 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2486 }, | ||
| 3981 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2487 }, | ||
| 3982 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 }, | ||
| 3974 | .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3983 | .{ .char = 'h', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3975 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2481 }, | 3984 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2488 }, |
| 3976 | .{ .char = '2', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 3985 | .{ .char = '2', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 3977 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2262 }, | 3986 | .{ .char = 'i', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2268 }, |
| 3978 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 561 }, | 3987 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 561 }, |
| 3979 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2482 }, | 3988 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2489 }, |
| 3980 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2483 }, | 3989 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2490 }, |
| 3981 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2484 }, | 3990 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2491 }, |
| 3982 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 555 }, | 3991 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 555 }, |
| 3983 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2485 }, | 3992 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2492 }, |
| 3984 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2486 }, | 3993 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2493 }, |
| 3985 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2487 }, | 3994 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2494 }, |
| 3986 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2488 }, | 3995 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2495 }, |
| 3987 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2489 }, | 3996 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2496 }, |
| 3988 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2490 }, | 3997 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2497 }, |
| 3989 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2491 }, | 3998 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2498 }, |
| 3990 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2492 }, | 3999 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2499 }, |
| 3991 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2493 }, | 4000 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2500 }, |
| 3992 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2494 }, | 4001 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2501 }, |
| 3993 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2495 }, | 4002 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2502 }, |
| 3994 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2496 }, | 4003 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2503 }, |
| 3995 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 450 }, | 4004 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 450 }, |
| 3996 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2025 }, | 4005 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2028 }, |
| 3997 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2497 }, | 4006 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2504 }, |
| 3998 | .{ .char = '6', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 2498 }, | 4007 | .{ .char = '6', .end_of_word = false, .end_of_list = false, .number = 4, .child_index = 2505 }, |
| 3999 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2499 }, | 4008 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2506 }, |
| 4000 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 2502 }, | 4009 | .{ .char = 'e', .end_of_word = true, .end_of_list = true, .number = 6, .child_index = 2509 }, |
| 4001 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2506 }, | 4010 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2513 }, |
| 4002 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2507 }, | 4011 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2514 }, |
| 4003 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2508 }, | 4012 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2515 }, |
| 4004 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2509 }, | 4013 | .{ .char = 'n', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2516 }, |
| 4005 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2510 }, | 4014 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2517 }, |
| 4006 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2511 }, | 4015 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2518 }, |
| 4007 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2512 }, | 4016 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2519 }, |
| 4008 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2513 }, | 4017 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2520 }, |
| 4009 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2514 }, | 4018 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2521 }, |
| 4010 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2515 }, | 4019 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2522 }, |
| 4011 | .{ .char = '2', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 4020 | .{ .char = '2', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 4012 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2516 }, | 4021 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2523 }, |
| 4013 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2517 }, | 4022 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2524 }, |
| 4014 | .{ .char = '0', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 4023 | .{ .char = '0', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 4015 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2518 }, | 4024 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2525 }, |
| 4016 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2519 }, | 4025 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2526 }, |
| 4017 | .{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2520 }, | 4026 | .{ .char = 'd', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2527 }, |
| 4018 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2521 }, | 4027 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2528 }, |
| 4019 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2522 }, | 4028 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2529 }, |
| 4020 | .{ .char = 'j', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2523 }, | 4029 | .{ .char = 'j', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2530 }, |
| 4021 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2524 }, | 4030 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2531 }, |
| 4022 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2525 }, | 4031 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2532 }, |
| 4023 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2526 }, | 4032 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2533 }, |
| 4024 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2527 }, | 4033 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2534 }, |
| 4025 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2528 }, | 4034 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2535 }, |
| 4026 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2529 }, | 4035 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2536 }, |
| 4027 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2530 }, | 4036 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2537 }, |
| 4028 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2531 }, | 4037 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2538 }, |
| 4029 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2532 }, | 4038 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2539 }, |
| 4030 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2533 }, | 4039 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2540 }, |
| 4031 | .{ .char = '4', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2534 }, | 4040 | .{ .char = '4', .end_of_word = true, .end_of_list = true, .number = 4, .child_index = 2541 }, |
| 4032 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2535 }, | 4041 | .{ .char = 'a', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2542 }, |
| 4033 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 486 }, | 4042 | .{ .char = 'n', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 486 }, |
| 4034 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2536 }, | 4043 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2543 }, |
| 4035 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 }, | 4044 | .{ .char = '1', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 632 }, |
| 4036 | .{ .char = '6', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 633 }, | 4045 | .{ .char = '6', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 633 }, |
| 4037 | .{ .char = '8', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, | 4046 | .{ .char = '8', .end_of_word = true, .end_of_list = false, .number = 1, .child_index = 0 }, |
| 4038 | .{ .char = 'P', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2537 }, | 4047 | .{ .char = 'P', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2544 }, |
| 4039 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2538 }, | 4048 | .{ .char = 's', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2545 }, |
| 4040 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2539 }, | 4049 | .{ .char = 'k', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2546 }, |
| 4041 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2041 }, | 4050 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2044 }, |
| 4042 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2540 }, | 4051 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2547 }, |
| 4043 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 }, | 4052 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 512 }, |
| 4044 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1974 }, | 4053 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1976 }, |
| 4045 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2541 }, | 4054 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2548 }, |
| 4046 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2542 }, | 4055 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2549 }, |
| 4047 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2543 }, | 4056 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2550 }, |
| 4048 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 301 }, | 4057 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 301 }, |
| 4049 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2544 }, | 4058 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2551 }, |
| 4050 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2545 }, | 4059 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2552 }, |
| 4051 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 461 }, | 4060 | .{ .char = 'y', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 461 }, |
| 4052 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 }, | 4061 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 }, |
| 4053 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2546 }, | 4062 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2553 }, |
| 4054 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2547 }, | 4063 | .{ .char = 'b', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2554 }, |
| 4055 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2548 }, | 4064 | .{ .char = 'z', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2555 }, |
| 4056 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2549 }, | 4065 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2556 }, |
| 4057 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2550 }, | 4066 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2557 }, |
| 4058 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1973 }, | 4067 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1975 }, |
| 4059 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2551 }, | 4068 | .{ .char = 'f', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2558 }, |
| 4060 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 181 }, | 4069 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 181 }, |
| 4061 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2552 }, | 4070 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2559 }, |
| 4062 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2553 }, | 4071 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2560 }, |
| 4063 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2554 }, | 4072 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2561 }, |
| 4064 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2555 }, | 4073 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2562 }, |
| 4065 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2556 }, | 4074 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2563 }, |
| 4066 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2557 }, | 4075 | .{ .char = 'g', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2564 }, |
| 4067 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2499 }, | 4076 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 3, .child_index = 2506 }, |
| 4068 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2558 }, | 4077 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2565 }, |
| 4069 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 }, | 4078 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 640 }, |
| 4070 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2559 }, | 4079 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2566 }, |
| 4071 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2560 }, | 4080 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2567 }, |
| 4072 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2561 }, | 4081 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 4, .child_index = 2568 }, |
| 4073 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2015 }, | 4082 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2018 }, |
| 4074 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2565 }, | 4083 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2572 }, |
| 4075 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2566 }, | 4084 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2573 }, |
| 4076 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 438 }, | 4085 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 438 }, |
| 4077 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2567 }, | 4086 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2574 }, |
| 4078 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2568 }, | 4087 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2575 }, |
| 4079 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 314 }, | 4088 | .{ .char = 'v', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 314 }, |
| 4080 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2569 }, | 4089 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2576 }, |
| 4081 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2570 }, | 4090 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2577 }, |
| 4082 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2252 }, | 4091 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2258 }, |
| 4083 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2571 }, | 4092 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2578 }, |
| 4084 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2572 }, | 4093 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2579 }, |
| 4085 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1751 }, | 4094 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1752 }, |
| 4086 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2573 }, | 4095 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2580 }, |
| 4087 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 }, | 4096 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 567 }, |
| 4088 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2574 }, | 4097 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2581 }, |
| 4089 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2575 }, | 4098 | .{ .char = 'h', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2582 }, |
| 4090 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2576 }, | 4099 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2583 }, |
| 4091 | .{ .char = 'q', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, | 4100 | .{ .char = 'q', .end_of_word = true, .end_of_list = true, .number = 1, .child_index = 0 }, |
| 4092 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2577 }, | 4101 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2584 }, |
| 4093 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2578 }, | 4102 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2585 }, |
| 4094 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2579 }, | 4103 | .{ .char = 'b', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2586 }, |
| 4095 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2580 }, | 4104 | .{ .char = 'p', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2587 }, |
| 4096 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 511 }, | 4105 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 511 }, |
| 4097 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 411 }, | 4106 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 411 }, |
| 4098 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2581 }, | 4107 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2588 }, |
| 4099 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2387 }, | 4108 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2394 }, |
| 4100 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2093 }, | 4109 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2097 }, |
| 4101 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2582 }, | 4110 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2589 }, |
| 4102 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2583 }, | 4111 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2590 }, |
| 4103 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2072 }, | 4112 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2075 }, |
| 4104 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2584 }, | 4113 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2591 }, |
| 4105 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1834 }, | 4114 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1835 }, |
| 4106 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2585 }, | 4115 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2592 }, |
| 4107 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2586 }, | 4116 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2593 }, |
| 4108 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2587 }, | 4117 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2594 }, |
| 4109 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2588 }, | 4118 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2595 }, |
| 4110 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2590 }, | 4119 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2597 }, |
| 4111 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2591 }, | 4120 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2598 }, |
| 4112 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2592 }, | 4121 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2599 }, |
| 4113 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 }, | 4122 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 572 }, |
| 4114 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2151 }, | 4123 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2156 }, |
| 4115 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1745 }, | 4124 | .{ .char = 'l', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1746 }, |
| 4116 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2593 }, | 4125 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2600 }, |
| 4117 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, | 4126 | .{ .char = 'u', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 559 }, |
| 4118 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2594 }, | 4127 | .{ .char = 'm', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2601 }, |
| 4119 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2595 }, | 4128 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2602 }, |
| 4120 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2596 }, | 4129 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2603 }, |
| 4121 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2597 }, | 4130 | .{ .char = 's', .end_of_word = false, .end_of_list = false, .number = 1, .child_index = 2604 }, |
| 4122 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 756 }, | 4131 | .{ .char = 'w', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 756 }, |
| 4123 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2598 }, | 4132 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2605 }, |
| 4124 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2599 }, | 4133 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2606 }, |
| 4125 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2600 }, | ||
| 4126 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 }, | ||
| 4127 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2601 }, | ||
| 4128 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2602 }, | ||
| 4129 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2603 }, | ||
| 4130 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2604 }, | ||
| 4131 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2605 }, | ||
| 4132 | .{ .char = 'S', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2606 }, | ||
| 4133 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2607 }, | 4134 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2607 }, |
| 4134 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2608 }, | 4135 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 437 }, |
| 4135 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2609 }, | 4136 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2608 }, |
| 4136 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2610 }, | 4137 | .{ .char = 'd', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2609 }, |
| 4138 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2610 }, | ||
| 4139 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2611 }, | ||
| 4140 | .{ .char = 'e', .end_of_word = false, .end_of_list = true, .number = 2, .child_index = 2612 }, | ||
| 4141 | .{ .char = 'S', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2613 }, | ||
| 4142 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2614 }, | ||
| 4143 | .{ .char = 'n', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2615 }, | ||
| 4144 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2616 }, | ||
| 4145 | .{ .char = 'i', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2617 }, | ||
| 4137 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1185 }, | 4146 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 1185 }, |
| 4138 | .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2611 }, | 4147 | .{ .char = 'r', .end_of_word = true, .end_of_list = true, .number = 2, .child_index = 2618 }, |
| 4139 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2612 }, | 4148 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2619 }, |
| 4140 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 639 }, | 4149 | .{ .char = 'o', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 639 }, |
| 4141 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2189 }, | 4150 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2194 }, |
| 4142 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 554 }, | 4151 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 554 }, |
| 4143 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2613 }, | 4152 | .{ .char = 'c', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2620 }, |
| 4144 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 449 }, | 4153 | .{ .char = '_', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 449 }, |
| 4145 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2045 }, | 4154 | .{ .char = 'r', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2048 }, |
| 4146 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2614 }, | 4155 | .{ .char = 'a', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2621 }, |
| 4147 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2041 }, | 4156 | .{ .char = 't', .end_of_word = false, .end_of_list = true, .number = 1, .child_index = 2044 }, |
| 4148 | }; | 4157 | }; |
| 4149 | pub const data = blk: { | 4158 | pub const data = blk: { |
| 4150 | @setEvalBranchQuota(12348); | 4159 | @setEvalBranchQuota(12366); |
| 4151 | break :blk [_]Properties{ | 4160 | break :blk [_]Properties{ |
| 4152 | .{ .param_str = "vv*vC*iC", .header = .blocks, .language = .all_languages, .attributes = .{ .lib_function_without_prefix = true } }, | 4161 | .{ .param_str = "vv*vC*iC", .header = .blocks, .language = .all_languages, .attributes = .{ .lib_function_without_prefix = true } }, |
| 4153 | .{ .param_str = "vvC*iC", .header = .blocks, .language = .all_languages, .attributes = .{ .lib_function_without_prefix = true } }, | 4162 | .{ .param_str = "vvC*iC", .header = .blocks, .language = .all_languages, .attributes = .{ .lib_function_without_prefix = true } }, |
| ... | @@ -4892,6 +4901,8 @@ pub const data = blk: { | ... | @@ -4892,6 +4901,8 @@ pub const data = blk: { |
| 4892 | .{ .param_str = "bULiCULiCULi*", .attributes = .{ .const_evaluable = true } }, | 4901 | .{ .param_str = "bULiCULiCULi*", .attributes = .{ .const_evaluable = true } }, |
| 4893 | .{ .param_str = "bULLiCULLiCULLi*", .attributes = .{ .const_evaluable = true } }, | 4902 | .{ .param_str = "bULLiCULLiCULLi*", .attributes = .{ .const_evaluable = true } }, |
| 4894 | .{ .param_str = "v.", .attributes = .{ .custom_typecheck = true } }, | 4903 | .{ .param_str = "v.", .attributes = .{ .custom_typecheck = true } }, |
| 4904 | .{ .param_str = "v", .attributes = .{ .custom_typecheck = true } }, | ||
| 4905 | .{ .param_str = "i", .attributes = .{ .custom_typecheck = true } }, | ||
| 4895 | .{ .param_str = "vAA", .attributes = .{ .lib_function_with_builtin_prefix = true } }, | 4906 | .{ .param_str = "vAA", .attributes = .{ .lib_function_with_builtin_prefix = true } }, |
| 4896 | .{ .param_str = "vA", .attributes = .{ .lib_function_with_builtin_prefix = true } }, | 4907 | .{ .param_str = "vA", .attributes = .{ .lib_function_with_builtin_prefix = true } }, |
| 4897 | .{ .param_str = "vA.", .attributes = .{ .custom_typecheck = true } }, | 4908 | .{ .param_str = "vA.", .attributes = .{ .custom_typecheck = true } }, |
lib/compiler/aro/aro/Builtins/eval.zig+15-7| ... | @@ -1,16 +1,19 @@ | ... | @@ -1,16 +1,19 @@ |
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const assert = std.debug.assert; | ||
| 3 | |||
| 2 | const backend = @import("../../backend.zig"); | 4 | const backend = @import("../../backend.zig"); |
| 3 | const Interner = backend.Interner; | 5 | const Interner = backend.Interner; |
| 6 | |||
| 4 | const Builtins = @import("../Builtins.zig"); | 7 | const Builtins = @import("../Builtins.zig"); |
| 5 | const Parser = @import("../Parser.zig"); | 8 | const Parser = @import("../Parser.zig"); |
| 6 | const Tree = @import("../Tree.zig"); | 9 | const Tree = @import("../Tree.zig"); |
| 7 | const TypeStore = @import("../TypeStore.zig"); | 10 | const TypeStore = @import("../TypeStore.zig"); |
| 8 | const Type = TypeStore.Type; | ||
| 9 | const QualType = TypeStore.QualType; | 11 | const QualType = TypeStore.QualType; |
| 12 | const Type = TypeStore.Type; | ||
| 10 | const Value = @import("../Value.zig"); | 13 | const Value = @import("../Value.zig"); |
| 11 | 14 | ||
| 12 | fn makeNan(comptime T: type, str: []const u8) T { | 15 | fn makeNan(comptime T: type, str: []const u8) T { |
| 13 | const UnsignedSameSize = std.meta.Int(.unsigned, @bitSizeOf(T)); | 16 | const UnsignedSameSize = @Int(.unsigned, @bitSizeOf(T)); |
| 14 | const parsed = std.fmt.parseUnsigned(UnsignedSameSize, str[0 .. str.len - 1], 0) catch 0; | 17 | const parsed = std.fmt.parseUnsigned(UnsignedSameSize, str[0 .. str.len - 1], 0) catch 0; |
| 15 | const bits: switch (T) { | 18 | const bits: switch (T) { |
| 16 | f32 => u23, | 19 | f32 => u23, |
| ... | @@ -24,7 +27,6 @@ fn makeNan(comptime T: type, str: []const u8) T { | ... | @@ -24,7 +27,6 @@ fn makeNan(comptime T: type, str: []const u8) T { |
| 24 | 27 | ||
| 25 | pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Index) !Value { | 28 | pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Index) !Value { |
| 26 | if (!expanded.attributes.const_evaluable) return .{}; | 29 | if (!expanded.attributes.const_evaluable) return .{}; |
| 27 | |||
| 28 | switch (expanded.tag) { | 30 | switch (expanded.tag) { |
| 29 | .common => |tag| switch (tag) { | 31 | .common => |tag| switch (tag) { |
| 30 | .__builtin_inff, | 32 | .__builtin_inff, |
| ... | @@ -47,12 +49,12 @@ pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Ind | ... | @@ -47,12 +49,12 @@ pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Ind |
| 47 | return Value.intern(p.comp, .{ .float = f }); | 49 | return Value.intern(p.comp, .{ .float = f }); |
| 48 | }, | 50 | }, |
| 49 | .__builtin_isinf => blk: { | 51 | .__builtin_isinf => blk: { |
| 50 | if (args.len == 0) break :blk; | 52 | assert(args.len == 1); |
| 51 | const val = p.tree.value_map.get(args[0]) orelse break :blk; | 53 | const val = p.tree.value_map.get(args[0]) orelse break :blk; |
| 52 | return Value.fromBool(val.isInf(p.comp)); | 54 | return Value.fromBool(val.isInf(p.comp)); |
| 53 | }, | 55 | }, |
| 54 | .__builtin_isinf_sign => blk: { | 56 | .__builtin_isinf_sign => blk: { |
| 55 | if (args.len == 0) break :blk; | 57 | assert(args.len == 1); |
| 56 | const val = p.tree.value_map.get(args[0]) orelse break :blk; | 58 | const val = p.tree.value_map.get(args[0]) orelse break :blk; |
| 57 | switch (val.isInfSign(p.comp)) { | 59 | switch (val.isInfSign(p.comp)) { |
| 58 | .unknown => {}, | 60 | .unknown => {}, |
| ... | @@ -62,12 +64,12 @@ pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Ind | ... | @@ -62,12 +64,12 @@ pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Ind |
| 62 | } | 64 | } |
| 63 | }, | 65 | }, |
| 64 | .__builtin_isnan => blk: { | 66 | .__builtin_isnan => blk: { |
| 65 | if (args.len == 0) break :blk; | 67 | assert(args.len == 1); |
| 66 | const val = p.tree.value_map.get(args[0]) orelse break :blk; | 68 | const val = p.tree.value_map.get(args[0]) orelse break :blk; |
| 67 | return Value.fromBool(val.isNan(p.comp)); | 69 | return Value.fromBool(val.isNan(p.comp)); |
| 68 | }, | 70 | }, |
| 69 | .__builtin_nan => blk: { | 71 | .__builtin_nan => blk: { |
| 70 | if (args.len == 0) break :blk; | 72 | assert(args.len == 1); |
| 71 | const val = p.getDecayedStringLiteral(args[0]) orelse break :blk; | 73 | const val = p.getDecayedStringLiteral(args[0]) orelse break :blk; |
| 72 | const bytes = p.comp.interner.get(val.ref()).bytes; | 74 | const bytes = p.comp.interner.get(val.ref()).bytes; |
| 73 | 75 | ||
| ... | @@ -80,6 +82,12 @@ pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Ind | ... | @@ -80,6 +82,12 @@ pub fn eval(expanded: Builtins.Expanded, p: *Parser, args: []const Tree.Node.Ind |
| 80 | }; | 82 | }; |
| 81 | return Value.intern(p.comp, .{ .float = f }); | 83 | return Value.intern(p.comp, .{ .float = f }); |
| 82 | }, | 84 | }, |
| 85 | .__builtin_constant_p => { | ||
| 86 | assert(args.len == 1); | ||
| 87 | const arg = args[0]; | ||
| 88 | const val = p.tree.value_map.get(arg) orelse return Value.fromBool(p.isAddressOfStringLiteral(arg)); | ||
| 89 | return Value.fromBool(!val.isPointer(p.comp)); | ||
| 90 | }, | ||
| 83 | else => {}, | 91 | else => {}, |
| 84 | }, | 92 | }, |
| 85 | else => {}, | 93 | else => {}, |
lib/compiler/aro/aro/CodeGen.zig+3-1| ... | @@ -2,7 +2,7 @@ const std = @import("std"); | ... | @@ -2,7 +2,7 @@ const std = @import("std"); |
| 2 | const Allocator = std.mem.Allocator; | 2 | const Allocator = std.mem.Allocator; |
| 3 | const assert = std.debug.assert; | 3 | const assert = std.debug.assert; |
| 4 | 4 | ||
| 5 | const backend = @import("backend"); | 5 | const backend = @import("../backend.zig"); |
| 6 | const Interner = backend.Interner; | 6 | const Interner = backend.Interner; |
| 7 | const Ir = backend.Ir; | 7 | const Ir = backend.Ir; |
| 8 | const Builder = Ir.Builder; | 8 | const Builder = Ir.Builder; |
| ... | @@ -867,6 +867,8 @@ fn genExpr(c: *CodeGen, node_index: Node.Index) Error!Ir.Ref { | ... | @@ -867,6 +867,8 @@ fn genExpr(c: *CodeGen, node_index: Node.Index) Error!Ir.Ref { |
| 867 | .imag_expr, | 867 | .imag_expr, |
| 868 | .real_expr, | 868 | .real_expr, |
| 869 | .sizeof_expr, | 869 | .sizeof_expr, |
| 870 | .builtin_va_arg_pack, | ||
| 871 | .builtin_va_arg_pack_len, | ||
| 870 | => return c.fail("TODO CodeGen.genExpr {s}\n", .{@tagName(node)}), | 872 | => return c.fail("TODO CodeGen.genExpr {s}\n", .{@tagName(node)}), |
| 871 | else => unreachable, // Not an expression. | 873 | else => unreachable, // Not an expression. |
| 872 | } | 874 | } |
lib/compiler/aro/aro/Compilation.zig+120-97| ... | @@ -71,34 +71,23 @@ pub const Environment = struct { | ... | @@ -71,34 +71,23 @@ pub const Environment = struct { |
| 71 | /// used for __DATE__, __TIME__, and __TIMESTAMP__ | 71 | /// used for __DATE__, __TIME__, and __TIMESTAMP__ |
| 72 | provided: u64, | 72 | provided: u64, |
| 73 | 73 | ||
| 74 | pub const default: @This() = .{ .provided = 0 }; | 74 | pub const default: SourceEpoch = .{ .provided = 0 }; |
| 75 | }; | 75 | }; |
| 76 | 76 | ||
| 77 | pub fn loadAll(allocator: std.mem.Allocator, environ_map: *const std.process.Environ.Map) !Environment { | 77 | /// Load all of the environment variables from an environ map. Does not copy values. |
| 78 | pub fn loadAll(environ_map: *const std.process.Environ.Map) Environment { | ||
| 78 | var env: Environment = .{}; | 79 | var env: Environment = .{}; |
| 79 | errdefer env.deinit(allocator); | ||
| 80 | 80 | ||
| 81 | inline for (@typeInfo(@TypeOf(env)).@"struct".fields) |field| { | 81 | inline for (@typeInfo(@TypeOf(env)).@"struct".fields) |field| { |
| 82 | std.debug.assert(@field(env, field.name) == null); | 82 | std.debug.assert(@field(env, field.name) == null); |
| 83 | 83 | ||
| 84 | var env_var_buf: [field.name.len]u8 = undefined; | 84 | var env_var_buf: [field.name.len]u8 = undefined; |
| 85 | const env_var_name = std.ascii.upperString(&env_var_buf, field.name); | 85 | const env_var_name = std.ascii.upperString(&env_var_buf, field.name); |
| 86 | const val: ?[]const u8 = if (environ_map.get(env_var_name)) |v| try allocator.dupe(u8, v) else null; | 86 | @field(env, field.name) = environ_map.get(env_var_name); |
| 87 | @field(env, field.name) = val; | ||
| 88 | } | 87 | } |
| 89 | return env; | 88 | return env; |
| 90 | } | 89 | } |
| 91 | 90 | ||
| 92 | /// Use this only if environment slices were allocated with `allocator` (such as via `loadAll`) | ||
| 93 | pub fn deinit(self: *Environment, allocator: std.mem.Allocator) void { | ||
| 94 | inline for (@typeInfo(@TypeOf(self.*)).@"struct".fields) |field| { | ||
| 95 | if (@field(self, field.name)) |slice| { | ||
| 96 | allocator.free(slice); | ||
| 97 | } | ||
| 98 | } | ||
| 99 | self.* = undefined; | ||
| 100 | } | ||
| 101 | |||
| 102 | pub fn sourceEpoch(self: *const Environment, io: Io) !SourceEpoch { | 91 | pub fn sourceEpoch(self: *const Environment, io: Io) !SourceEpoch { |
| 103 | const max_timestamp = 253402300799; // Dec 31 9999 23:59:59 | 92 | const max_timestamp = 253402300799; // Dec 31 9999 23:59:59 |
| 104 | 93 | ||
| ... | @@ -148,7 +137,7 @@ gpa: Allocator, | ... | @@ -148,7 +137,7 @@ gpa: Allocator, |
| 148 | /// Allocations in this arena live all the way until `Compilation.deinit`. | 137 | /// Allocations in this arena live all the way until `Compilation.deinit`. |
| 149 | arena: Allocator, | 138 | arena: Allocator, |
| 150 | io: Io, | 139 | io: Io, |
| 151 | cwd: Io.Dir, | 140 | cwd: std.Io.Dir, |
| 152 | diagnostics: *Diagnostics, | 141 | diagnostics: *Diagnostics, |
| 153 | 142 | ||
| 154 | sources: std.StringArrayHashMapUnmanaged(Source) = .empty, | 143 | sources: std.StringArrayHashMapUnmanaged(Source) = .empty, |
| ... | @@ -175,37 +164,48 @@ pragma_handlers: std.StringArrayHashMapUnmanaged(*Pragma) = .empty, | ... | @@ -175,37 +164,48 @@ pragma_handlers: std.StringArrayHashMapUnmanaged(*Pragma) = .empty, |
| 175 | /// Used by MS extensions which allow searching for includes relative to the directory of the main source file. | 164 | /// Used by MS extensions which allow searching for includes relative to the directory of the main source file. |
| 176 | ms_cwd_source_id: ?Source.Id = null, | 165 | ms_cwd_source_id: ?Source.Id = null, |
| 177 | 166 | ||
| 178 | pub fn init(gpa: Allocator, arena: Allocator, io: Io, diagnostics: *Diagnostics, cwd: Io.Dir) Compilation { | 167 | pub const InitOptions = struct { |
| 179 | return .{ | ||
| 180 | .gpa = gpa, | ||
| 181 | .arena = arena, | ||
| 182 | .io = io, | ||
| 183 | .diagnostics = diagnostics, | ||
| 184 | .cwd = cwd, | ||
| 185 | }; | ||
| 186 | } | ||
| 187 | |||
| 188 | /// Initialize Compilation with default environment, | ||
| 189 | /// pragma handlers and emulation mode set to target. | ||
| 190 | pub fn initDefault( | ||
| 191 | gpa: Allocator, | 168 | gpa: Allocator, |
| 192 | arena: Allocator, | 169 | arena: Allocator, |
| 193 | io: Io, | 170 | io: Io, |
| 194 | diagnostics: *Diagnostics, | 171 | diagnostics: *Diagnostics, |
| 195 | cwd: Io.Dir, | 172 | |
| 196 | environ_map: *const std.process.Environ.Map, | 173 | /// Used to initiate `Compilation.Environment`, values are not copied. |
| 197 | ) !Compilation { | 174 | environ_map: ?*const std.process.Environ.Map, |
| 175 | /// Defaults to `std.Io.Dir.cwd()` | ||
| 176 | cwd: ?std.Io.Dir = null, | ||
| 177 | |||
| 178 | add_default_pragma_handlers: bool = true, | ||
| 179 | |||
| 180 | pub const testing: InitOptions = .{ | ||
| 181 | .gpa = std.testing.allocator, | ||
| 182 | .arena = undefined, | ||
| 183 | .io = std.testing.io, | ||
| 184 | .diagnostics = undefined, | ||
| 185 | .environ_map = null, | ||
| 186 | .add_default_pragma_handlers = false, | ||
| 187 | }; | ||
| 188 | }; | ||
| 189 | |||
| 190 | /// Initialize Compilation with default environment, | ||
| 191 | /// pragma handlers and emulation mode set to target. | ||
| 192 | pub fn init(options: InitOptions) !Compilation { | ||
| 198 | var comp: Compilation = .{ | 193 | var comp: Compilation = .{ |
| 199 | .gpa = gpa, | 194 | .gpa = options.gpa, |
| 200 | .arena = arena, | 195 | .arena = options.arena, |
| 201 | .io = io, | 196 | .io = options.io, |
| 202 | .diagnostics = diagnostics, | 197 | .diagnostics = options.diagnostics, |
| 203 | .environment = try Environment.loadAll(gpa, environ_map), | 198 | .cwd = options.cwd orelse .cwd(), |
| 204 | .cwd = cwd, | ||
| 205 | }; | 199 | }; |
| 206 | errdefer comp.deinit(); | 200 | errdefer comp.deinit(); |
| 207 | try comp.addDefaultPragmaHandlers(); | 201 | |
| 208 | comp.langopts.setEmulatedCompiler(comp.target.systemCompiler()); | 202 | if (options.environ_map) |map| { |
| 203 | comp.environment = .loadAll(map); | ||
| 204 | } | ||
| 205 | |||
| 206 | if (options.add_default_pragma_handlers) { | ||
| 207 | try comp.addDefaultPragmaHandlers(); | ||
| 208 | } | ||
| 209 | return comp; | 209 | return comp; |
| 210 | } | 210 | } |
| 211 | 211 | ||
| ... | @@ -228,7 +228,6 @@ pub fn deinit(comp: *Compilation) void { | ... | @@ -228,7 +228,6 @@ pub fn deinit(comp: *Compilation) void { |
| 228 | comp.builtins.deinit(gpa); | 228 | comp.builtins.deinit(gpa); |
| 229 | comp.string_interner.deinit(gpa); | 229 | comp.string_interner.deinit(gpa); |
| 230 | comp.interner.deinit(gpa); | 230 | comp.interner.deinit(gpa); |
| 231 | comp.environment.deinit(gpa); | ||
| 232 | comp.type_store.deinit(gpa); | 231 | comp.type_store.deinit(gpa); |
| 233 | comp.* = undefined; | 232 | comp.* = undefined; |
| 234 | } | 233 | } |
| ... | @@ -275,17 +274,18 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -275,17 +274,18 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 275 | } | 274 | } |
| 276 | 275 | ||
| 277 | try w.writeAll( | 276 | try w.writeAll( |
| 277 | \\#define __ARO_EMULATE_NO__ 0 | ||
| 278 | \\#define __ARO_EMULATE_CLANG__ 1 | 278 | \\#define __ARO_EMULATE_CLANG__ 1 |
| 279 | \\#define __ARO_EMULATE_GCC__ 2 | 279 | \\#define __ARO_EMULATE_GCC__ 2 |
| 280 | \\#define __ARO_EMULATE_MSVC__ 3 | 280 | \\#define __ARO_EMULATE_MSVC__ 3 |
| 281 | \\ | 281 | \\ |
| 282 | ); | 282 | ); |
| 283 | const emulated = switch (comp.langopts.emulate) { | 283 | try w.print("#define __ARO_EMULATE__ {s}\n", .{switch (comp.langopts.emulate) { |
| 284 | .no => "__ARO_EMULATE_NO__", | ||
| 284 | .clang => "__ARO_EMULATE_CLANG__", | 285 | .clang => "__ARO_EMULATE_CLANG__", |
| 285 | .gcc => "__ARO_EMULATE_GCC__", | 286 | .gcc => "__ARO_EMULATE_GCC__", |
| 286 | .msvc => "__ARO_EMULATE_MSVC__", | 287 | .msvc => "__ARO_EMULATE_MSVC__", |
| 287 | }; | 288 | }}); |
| 288 | try w.print("#define __ARO_EMULATE__ {s}\n", .{emulated}); | ||
| 289 | 289 | ||
| 290 | if (comp.langopts.emulate == .msvc) { | 290 | if (comp.langopts.emulate == .msvc) { |
| 291 | try w.writeAll("#define _MSC_VER 1933\n"); | 291 | try w.writeAll("#define _MSC_VER 1933\n"); |
| ... | @@ -375,6 +375,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -375,6 +375,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 375 | .watchos, | 375 | .watchos, |
| 376 | => { | 376 | => { |
| 377 | try define(w, "__APPLE__"); | 377 | try define(w, "__APPLE__"); |
| 378 | try w.writeAll("#define __APPLE_CC__ 6000\n"); | ||
| 378 | 379 | ||
| 379 | const version = target.os.version_range.semver.min; | 380 | const version = target.os.version_range.semver.min; |
| 380 | var version_buf: [8]u8 = undefined; | 381 | var version_buf: [8]u8 = undefined; |
| ... | @@ -647,6 +648,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -647,6 +648,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 647 | try define(w, "__ppc__"); | 648 | try define(w, "__ppc__"); |
| 648 | try define(w, "__PPC__"); | 649 | try define(w, "__PPC__"); |
| 649 | try define(w, "_ARCH_PPC"); | 650 | try define(w, "_ARCH_PPC"); |
| 651 | try w.print("#define _CALL_ELF {d}\n", .{target.ppcElfVersion()}); | ||
| 650 | }, | 652 | }, |
| 651 | .powerpc64, | 653 | .powerpc64, |
| 652 | .powerpc64le, | 654 | .powerpc64le, |
| ... | @@ -661,7 +663,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -661,7 +663,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 661 | try define(w, "__PPC64__"); | 663 | try define(w, "__PPC64__"); |
| 662 | try define(w, "_ARCH_PPC"); | 664 | try define(w, "_ARCH_PPC"); |
| 663 | try define(w, "_ARCH_PPC64"); | 665 | try define(w, "_ARCH_PPC64"); |
| 664 | try w.writeAll("#define _CALL_ELF 2\n"); | 666 | try w.print("#define _CALL_ELF {d}\n", .{target.ppcElfVersion()}); |
| 665 | }, | 667 | }, |
| 666 | .sparc64 => { | 668 | .sparc64 => { |
| 667 | try defineStd(w, "sparc", is_gnu); | 669 | try defineStd(w, "sparc", is_gnu); |
| ... | @@ -686,8 +688,19 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -686,8 +688,19 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 686 | try define(w, "__thumb__"); | 688 | try define(w, "__thumb__"); |
| 687 | } | 689 | } |
| 688 | }, | 690 | }, |
| 689 | .aarch64, .aarch64_be => { | 691 | .aarch64, .aarch64_be => |arch| { |
| 690 | try define(w, "__aarch64__"); | 692 | try define(w, "__aarch64__"); |
| 693 | switch (arch) { | ||
| 694 | .aarch64 => { | ||
| 695 | try define(w, "__AARCH64EL__"); | ||
| 696 | }, | ||
| 697 | .aarch64_be => { | ||
| 698 | try define(w, "__AARCH64EB__"); | ||
| 699 | try define(w, "__AARCH_BIG_ENDIAN"); | ||
| 700 | try define(w, "__ARM_BIG_ENDIAN"); | ||
| 701 | }, | ||
| 702 | else => unreachable, | ||
| 703 | } | ||
| 691 | if (target.os.tag.isDarwin()) { | 704 | if (target.os.tag.isDarwin()) { |
| 692 | try define(w, "__AARCH64_SIMD__"); | 705 | try define(w, "__AARCH64_SIMD__"); |
| 693 | if (ptr_width == 32) { | 706 | if (ptr_width == 32) { |
| ... | @@ -839,6 +852,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -839,6 +852,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 839 | } | 852 | } |
| 840 | }, | 853 | }, |
| 841 | .riscv32, .riscv32be, .riscv64, .riscv64be => { | 854 | .riscv32, .riscv32be, .riscv64, .riscv64be => { |
| 855 | try define(w, "__riscv"); | ||
| 842 | try w.print("#define __riscv_xlen {d}\n", .{ptr_width}); | 856 | try w.print("#define __riscv_xlen {d}\n", .{ptr_width}); |
| 843 | }, | 857 | }, |
| 844 | else => {}, | 858 | else => {}, |
| ... | @@ -910,6 +924,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -910,6 +924,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 910 | \\#define __ATOMIC_CHAR16_T_LOCK_FREE 1 | 924 | \\#define __ATOMIC_CHAR16_T_LOCK_FREE 1 |
| 911 | \\#define __ATOMIC_CHAR32_T_LOCK_FREE 1 | 925 | \\#define __ATOMIC_CHAR32_T_LOCK_FREE 1 |
| 912 | \\#define __ATOMIC_WCHAR_T_LOCK_FREE 1 | 926 | \\#define __ATOMIC_WCHAR_T_LOCK_FREE 1 |
| 927 | \\#define __ATOMIC_WINT_T_LOCK_FREE 1 | ||
| 913 | \\#define __ATOMIC_SHORT_LOCK_FREE 1 | 928 | \\#define __ATOMIC_SHORT_LOCK_FREE 1 |
| 914 | \\#define __ATOMIC_INT_LOCK_FREE 1 | 929 | \\#define __ATOMIC_INT_LOCK_FREE 1 |
| 915 | \\#define __ATOMIC_LONG_LOCK_FREE 1 | 930 | \\#define __ATOMIC_LONG_LOCK_FREE 1 |
| ... | @@ -922,7 +937,15 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -922,7 +937,15 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 922 | } | 937 | } |
| 923 | 938 | ||
| 924 | // types | 939 | // types |
| 925 | if (comp.getCharSignedness() == .unsigned) try w.writeAll("#define __CHAR_UNSIGNED__ 1\n"); | 940 | if (comp.getCharSignedness() == .unsigned) { |
| 941 | try w.writeAll("#define __CHAR_UNSIGNED__ 1\n"); | ||
| 942 | } | ||
| 943 | if (comp.type_store.wchar.signedness(comp) == .unsigned) { | ||
| 944 | try w.writeAll("#define __WCHAR_UNSIGNED__ 1\n"); | ||
| 945 | } | ||
| 946 | if (comp.type_store.wint.signedness(comp) == .unsigned) { | ||
| 947 | try w.writeAll("#define __WINT_UNSIGNED__ 1\n"); | ||
| 948 | } | ||
| 926 | try w.writeAll("#define __CHAR_BIT__ 8\n"); | 949 | try w.writeAll("#define __CHAR_BIT__ 8\n"); |
| 927 | 950 | ||
| 928 | // int maxs | 951 | // int maxs |
| ... | @@ -933,7 +956,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -933,7 +956,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 933 | try comp.generateIntMaxAndWidth(w, "LONG", .long); | 956 | try comp.generateIntMaxAndWidth(w, "LONG", .long); |
| 934 | try comp.generateIntMaxAndWidth(w, "LONG_LONG", .long_long); | 957 | try comp.generateIntMaxAndWidth(w, "LONG_LONG", .long_long); |
| 935 | try comp.generateIntMaxAndWidth(w, "WCHAR", comp.type_store.wchar); | 958 | try comp.generateIntMaxAndWidth(w, "WCHAR", comp.type_store.wchar); |
| 936 | // try comp.generateIntMax(w, "WINT", comp.type_store.wchar); | 959 | try comp.generateIntMaxAndWidth(w, "WINT", comp.type_store.wint); |
| 937 | try comp.generateIntMaxAndWidth(w, "INTMAX", comp.type_store.intmax); | 960 | try comp.generateIntMaxAndWidth(w, "INTMAX", comp.type_store.intmax); |
| 938 | try comp.generateIntMaxAndWidth(w, "SIZE", comp.type_store.size); | 961 | try comp.generateIntMaxAndWidth(w, "SIZE", comp.type_store.size); |
| 939 | try comp.generateIntMaxAndWidth(w, "UINTMAX", try comp.type_store.intmax.makeIntUnsigned(comp)); | 962 | try comp.generateIntMaxAndWidth(w, "UINTMAX", try comp.type_store.intmax.makeIntUnsigned(comp)); |
| ... | @@ -957,7 +980,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -957,7 +980,7 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 957 | try comp.generateSizeofType(w, "__SIZEOF_PTRDIFF_T__", comp.type_store.ptrdiff); | 980 | try comp.generateSizeofType(w, "__SIZEOF_PTRDIFF_T__", comp.type_store.ptrdiff); |
| 958 | try comp.generateSizeofType(w, "__SIZEOF_SIZE_T__", comp.type_store.size); | 981 | try comp.generateSizeofType(w, "__SIZEOF_SIZE_T__", comp.type_store.size); |
| 959 | try comp.generateSizeofType(w, "__SIZEOF_WCHAR_T__", comp.type_store.wchar); | 982 | try comp.generateSizeofType(w, "__SIZEOF_WCHAR_T__", comp.type_store.wchar); |
| 960 | // try comp.generateSizeofType(w, "__SIZEOF_WINT_T__", .void_pointer); | 983 | try comp.generateSizeofType(w, "__SIZEOF_WINT_T__", comp.type_store.wint); |
| 961 | 984 | ||
| 962 | if (target.hasInt128()) { | 985 | if (target.hasInt128()) { |
| 963 | try comp.generateSizeofType(w, "__SIZEOF_INT128__", .int128); | 986 | try comp.generateSizeofType(w, "__SIZEOF_INT128__", .int128); |
| ... | @@ -968,14 +991,15 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { | ... | @@ -968,14 +991,15 @@ fn generateSystemDefines(comp: *Compilation, w: *Io.Writer) !void { |
| 968 | try comp.generateTypeMacro(w, "__UINTPTR_TYPE__", try comp.type_store.intptr.makeIntUnsigned(comp)); | 991 | try comp.generateTypeMacro(w, "__UINTPTR_TYPE__", try comp.type_store.intptr.makeIntUnsigned(comp)); |
| 969 | 992 | ||
| 970 | try comp.generateTypeMacro(w, "__INTMAX_TYPE__", comp.type_store.intmax); | 993 | try comp.generateTypeMacro(w, "__INTMAX_TYPE__", comp.type_store.intmax); |
| 971 | try comp.generateSuffixMacro("__INTMAX", w, comp.type_store.intptr); | 994 | try comp.generateIntLiteralMacros("__INTMAX", w, comp.type_store.intptr); |
| 972 | 995 | ||
| 973 | try comp.generateTypeMacro(w, "__UINTMAX_TYPE__", try comp.type_store.intmax.makeIntUnsigned(comp)); | 996 | try comp.generateTypeMacro(w, "__UINTMAX_TYPE__", try comp.type_store.intmax.makeIntUnsigned(comp)); |
| 974 | try comp.generateSuffixMacro("__UINTMAX", w, try comp.type_store.intptr.makeIntUnsigned(comp)); | 997 | try comp.generateIntLiteralMacros("__UINTMAX", w, try comp.type_store.intptr.makeIntUnsigned(comp)); |
| 975 | 998 | ||
| 976 | try comp.generateTypeMacro(w, "__PTRDIFF_TYPE__", comp.type_store.ptrdiff); | 999 | try comp.generateTypeMacro(w, "__PTRDIFF_TYPE__", comp.type_store.ptrdiff); |
| 977 | try comp.generateTypeMacro(w, "__SIZE_TYPE__", comp.type_store.size); | 1000 | try comp.generateTypeMacro(w, "__SIZE_TYPE__", comp.type_store.size); |
| 978 | try comp.generateTypeMacro(w, "__WCHAR_TYPE__", comp.type_store.wchar); | 1001 | try comp.generateTypeMacro(w, "__WCHAR_TYPE__", comp.type_store.wchar); |
| 1002 | try comp.generateTypeMacro(w, "__WINT_TYPE__", comp.type_store.wint); | ||
| 979 | try comp.generateTypeMacro(w, "__CHAR16_TYPE__", comp.type_store.uint_least16_t); | 1003 | try comp.generateTypeMacro(w, "__CHAR16_TYPE__", comp.type_store.uint_least16_t); |
| 980 | try comp.generateTypeMacro(w, "__CHAR32_TYPE__", comp.type_store.uint_least32_t); | 1004 | try comp.generateTypeMacro(w, "__CHAR32_TYPE__", comp.type_store.uint_least32_t); |
| 981 | 1005 | ||
| ... | @@ -1167,8 +1191,10 @@ fn generateTypeMacro(comp: *const Compilation, w: *Io.Writer, name: []const u8, | ... | @@ -1167,8 +1191,10 @@ fn generateTypeMacro(comp: *const Compilation, w: *Io.Writer, name: []const u8, |
| 1167 | } | 1191 | } |
| 1168 | 1192 | ||
| 1169 | pub fn float80Type(comp: *const Compilation) ?QualType { | 1193 | pub fn float80Type(comp: *const Compilation) ?QualType { |
| 1170 | if (comp.langopts.emulate != .gcc) return null; | 1194 | return switch (comp.langopts.emulate) { |
| 1171 | return comp.target.float80Type(); | 1195 | .no, .gcc => comp.target.float80Type(), |
| 1196 | .msvc, .clang => null, | ||
| 1197 | }; | ||
| 1172 | } | 1198 | } |
| 1173 | 1199 | ||
| 1174 | /// Smallest integer type with at least N bits | 1200 | /// Smallest integer type with at least N bits |
| ... | @@ -1292,8 +1318,14 @@ fn generateFmt(comp: *const Compilation, prefix: []const u8, w: *Io.Writer, qt: | ... | @@ -1292,8 +1318,14 @@ fn generateFmt(comp: *const Compilation, prefix: []const u8, w: *Io.Writer, qt: |
| 1292 | } | 1318 | } |
| 1293 | } | 1319 | } |
| 1294 | 1320 | ||
| 1295 | fn generateSuffixMacro(comp: *const Compilation, prefix: []const u8, w: *Io.Writer, qt: QualType) !void { | 1321 | fn generateIntLiteralMacros(comp: *const Compilation, prefix: []const u8, w: *Io.Writer, qt: QualType) !void { |
| 1296 | return w.print("#define {s}_C_SUFFIX__ {s}\n", .{ prefix, qt.intValueSuffix(comp) }); | 1322 | const suffix = qt.intValueSuffix(comp); |
| 1323 | try w.print("#define {s}_C_SUFFIX__ {s}\n", .{ prefix, suffix }); | ||
| 1324 | if (suffix.len == 0) { | ||
| 1325 | try w.print("#define {s}_C(c) c\n", .{prefix}); | ||
| 1326 | } else { | ||
| 1327 | try w.print("#define {s}_C(c) c##{s}\n", .{ prefix, suffix }); | ||
| 1328 | } | ||
| 1297 | } | 1329 | } |
| 1298 | 1330 | ||
| 1299 | /// Generate the following for a type: | 1331 | /// Generate the following for a type: |
| ... | @@ -1322,7 +1354,7 @@ fn generateExactWidthType(comp: *Compilation, w: *Io.Writer, original_qt: QualTy | ... | @@ -1322,7 +1354,7 @@ fn generateExactWidthType(comp: *Compilation, w: *Io.Writer, original_qt: QualTy |
| 1322 | const prefix = full[0 .. full.len - suffix.len]; // remove "_TYPE__" | 1354 | const prefix = full[0 .. full.len - suffix.len]; // remove "_TYPE__" |
| 1323 | 1355 | ||
| 1324 | try comp.generateFmt(prefix, w, qt); | 1356 | try comp.generateFmt(prefix, w, qt); |
| 1325 | try comp.generateSuffixMacro(prefix, w, qt); | 1357 | try comp.generateIntLiteralMacros(prefix, w, qt); |
| 1326 | } | 1358 | } |
| 1327 | 1359 | ||
| 1328 | pub fn hasFloat128(comp: *const Compilation) bool { | 1360 | pub fn hasFloat128(comp: *const Compilation) bool { |
| ... | @@ -1414,7 +1446,7 @@ pub fn maxArrayBytes(comp: *const Compilation) u64 { | ... | @@ -1414,7 +1446,7 @@ pub fn maxArrayBytes(comp: *const Compilation) u64 { |
| 1414 | pub fn fixedEnumTagType(comp: *const Compilation) ?QualType { | 1446 | pub fn fixedEnumTagType(comp: *const Compilation) ?QualType { |
| 1415 | switch (comp.langopts.emulate) { | 1447 | switch (comp.langopts.emulate) { |
| 1416 | .msvc => return .int, | 1448 | .msvc => return .int, |
| 1417 | .clang => if (comp.target.os.tag == .windows and comp.target.abi == .msvc) return .int, | 1449 | .no, .clang => if (comp.target.os.tag == .windows and comp.target.abi == .msvc) return .int, |
| 1418 | .gcc => {}, | 1450 | .gcc => {}, |
| 1419 | } | 1451 | } |
| 1420 | return null; | 1452 | return null; |
| ... | @@ -1424,6 +1456,10 @@ pub fn getCharSignedness(comp: *const Compilation) std.builtin.Signedness { | ... | @@ -1424,6 +1456,10 @@ pub fn getCharSignedness(comp: *const Compilation) std.builtin.Signedness { |
| 1424 | return comp.langopts.char_signedness_override orelse comp.target.cCharSignedness(); | 1456 | return comp.langopts.char_signedness_override orelse comp.target.cCharSignedness(); |
| 1425 | } | 1457 | } |
| 1426 | 1458 | ||
| 1459 | pub fn hasClangStyleBoundsSafety(comp: *const Compilation) bool { | ||
| 1460 | return comp.langopts.bounds_safety == .clang; | ||
| 1461 | } | ||
| 1462 | |||
| 1427 | pub fn getSource(comp: *const Compilation, id: Source.Id) Source { | 1463 | pub fn getSource(comp: *const Compilation, id: Source.Id) Source { |
| 1428 | if (id.alias) { | 1464 | if (id.alias) { |
| 1429 | return comp.source_aliases.items[@intFromEnum(id.index)]; | 1465 | return comp.source_aliases.items[@intFromEnum(id.index)]; |
| ... | @@ -1643,14 +1679,12 @@ fn addSourceFromPathExtra(comp: *Compilation, path: []const u8, kind: Source.Kin | ... | @@ -1643,14 +1679,12 @@ fn addSourceFromPathExtra(comp: *Compilation, path: []const u8, kind: Source.Kin |
| 1643 | return error.FileNotFound; | 1679 | return error.FileNotFound; |
| 1644 | } | 1680 | } |
| 1645 | 1681 | ||
| 1646 | const io = comp.io; | 1682 | const file = try comp.cwd.openFile(comp.io, path, .{}); |
| 1647 | 1683 | defer file.close(comp.io); | |
| 1648 | const file = try comp.cwd.openFile(io, path, .{}); | ||
| 1649 | defer file.close(io); | ||
| 1650 | return comp.addSourceFromFile(file, path, kind); | 1684 | return comp.addSourceFromFile(file, path, kind); |
| 1651 | } | 1685 | } |
| 1652 | 1686 | ||
| 1653 | pub fn addSourceFromFile(comp: *Compilation, file: Io.File, path: []const u8, kind: Source.Kind) !Source { | 1687 | pub fn addSourceFromFile(comp: *Compilation, file: std.Io.File, path: []const u8, kind: Source.Kind) !Source { |
| 1654 | const contents = try comp.getFileContents(file, .unlimited); | 1688 | const contents = try comp.getFileContents(file, .unlimited); |
| 1655 | errdefer comp.gpa.free(contents); | 1689 | errdefer comp.gpa.free(contents); |
| 1656 | return comp.addSourceFromOwnedBuffer(path, contents, kind); | 1690 | return comp.addSourceFromOwnedBuffer(path, contents, kind); |
| ... | @@ -1718,8 +1752,7 @@ pub fn initSearchPath(comp: *Compilation, includes: []const Include, verbose: bo | ... | @@ -1718,8 +1752,7 @@ pub fn initSearchPath(comp: *Compilation, includes: []const Include, verbose: bo |
| 1718 | } | 1752 | } |
| 1719 | } | 1753 | } |
| 1720 | fn addToSearchPath(comp: *Compilation, include: Include, verbose: bool) !void { | 1754 | fn addToSearchPath(comp: *Compilation, include: Include, verbose: bool) !void { |
| 1721 | const io = comp.io; | 1755 | comp.cwd.access(comp.io, include.path, .{}) catch { |
| 1722 | comp.cwd.access(io, include.path, .{}) catch { | ||
| 1723 | if (verbose) { | 1756 | if (verbose) { |
| 1724 | std.debug.print("ignoring nonexistent directory \"{s}\"\n", .{include.path}); | 1757 | std.debug.print("ignoring nonexistent directory \"{s}\"\n", .{include.path}); |
| 1725 | return; | 1758 | return; |
| ... | @@ -1979,14 +2012,12 @@ fn getPathContents(comp: *Compilation, path: []const u8, limit: Io.Limit) ![]u8 | ... | @@ -1979,14 +2012,12 @@ fn getPathContents(comp: *Compilation, path: []const u8, limit: Io.Limit) ![]u8 |
| 1979 | return error.FileNotFound; | 2012 | return error.FileNotFound; |
| 1980 | } | 2013 | } |
| 1981 | 2014 | ||
| 1982 | const io = comp.io; | 2015 | const file = try comp.cwd.openFile(comp.io, path, .{}); |
| 1983 | 2016 | defer file.close(comp.io); | |
| 1984 | const file = try comp.cwd.openFile(io, path, .{}); | ||
| 1985 | defer file.close(io); | ||
| 1986 | return comp.getFileContents(file, limit); | 2017 | return comp.getFileContents(file, limit); |
| 1987 | } | 2018 | } |
| 1988 | 2019 | ||
| 1989 | fn getFileContents(comp: *Compilation, file: Io.File, limit: Io.Limit) ![]u8 { | 2020 | fn getFileContents(comp: *Compilation, file: std.Io.File, limit: Io.Limit) ![]u8 { |
| 1990 | var file_buf: [4096]u8 = undefined; | 2021 | var file_buf: [4096]u8 = undefined; |
| 1991 | var file_reader = file.reader(comp.io, &file_buf); | 2022 | var file_reader = file.reader(comp.io, &file_buf); |
| 1992 | 2023 | ||
| ... | @@ -2168,9 +2199,8 @@ pub fn locSlice(comp: *const Compilation, loc: Source.Location) []const u8 { | ... | @@ -2168,9 +2199,8 @@ pub fn locSlice(comp: *const Compilation, loc: Source.Location) []const u8 { |
| 2168 | } | 2199 | } |
| 2169 | 2200 | ||
| 2170 | pub fn getSourceMTimeUncached(comp: *const Compilation, source_id: Source.Id) ?u64 { | 2201 | pub fn getSourceMTimeUncached(comp: *const Compilation, source_id: Source.Id) ?u64 { |
| 2171 | const io = comp.io; | ||
| 2172 | const source = comp.getSource(source_id); | 2202 | const source = comp.getSource(source_id); |
| 2173 | if (comp.cwd.statFile(io, source.path, .{})) |stat| { | 2203 | if (comp.cwd.statFile(comp.io, source.path, .{})) |stat| { |
| 2174 | return std.math.cast(u64, stat.mtime.toSeconds()); | 2204 | return std.math.cast(u64, stat.mtime.toSeconds()); |
| 2175 | } else |_| { | 2205 | } else |_| { |
| 2176 | return null; | 2206 | return null; |
| ... | @@ -2257,10 +2287,9 @@ pub const Diagnostic = struct { | ... | @@ -2257,10 +2287,9 @@ pub const Diagnostic = struct { |
| 2257 | test "addSourceFromBuffer" { | 2287 | test "addSourceFromBuffer" { |
| 2258 | const Test = struct { | 2288 | const Test = struct { |
| 2259 | fn addSourceFromBuffer(str: []const u8, expected: []const u8, warning_count: u32, splices: []const u32) !void { | 2289 | fn addSourceFromBuffer(str: []const u8, expected: []const u8, warning_count: u32, splices: []const u32) !void { |
| 2260 | var arena: std.heap.ArenaAllocator = .init(std.testing.allocator); | ||
| 2261 | defer arena.deinit(); | ||
| 2262 | var diagnostics: Diagnostics = .{ .output = .ignore }; | 2290 | var diagnostics: Diagnostics = .{ .output = .ignore }; |
| 2263 | var comp = Compilation.init(std.testing.allocator, arena.allocator(), std.testing.io, &diagnostics, Io.Dir.cwd()); | 2291 | var comp = try Compilation.init(.testing); |
| 2292 | comp.diagnostics = &diagnostics; | ||
| 2264 | defer comp.deinit(); | 2293 | defer comp.deinit(); |
| 2265 | 2294 | ||
| 2266 | const source = try comp.addSourceFromBuffer("path", str); | 2295 | const source = try comp.addSourceFromBuffer("path", str); |
| ... | @@ -2271,10 +2300,8 @@ test "addSourceFromBuffer" { | ... | @@ -2271,10 +2300,8 @@ test "addSourceFromBuffer" { |
| 2271 | } | 2300 | } |
| 2272 | 2301 | ||
| 2273 | fn withAllocationFailures(allocator: std.mem.Allocator) !void { | 2302 | fn withAllocationFailures(allocator: std.mem.Allocator) !void { |
| 2274 | var arena: std.heap.ArenaAllocator = .init(allocator); | 2303 | var comp = try Compilation.init(.testing); |
| 2275 | defer arena.deinit(); | 2304 | comp.gpa = allocator; |
| 2276 | var diagnostics: Diagnostics = .{ .output = .ignore }; | ||
| 2277 | var comp = Compilation.init(allocator, arena.allocator(), std.testing.io, &diagnostics, Io.Dir.cwd()); | ||
| 2278 | defer comp.deinit(); | 2305 | defer comp.deinit(); |
| 2279 | 2306 | ||
| 2280 | _ = try comp.addSourceFromBuffer("path", "spliced\\\nbuffer\n"); | 2307 | _ = try comp.addSourceFromBuffer("path", "spliced\\\nbuffer\n"); |
| ... | @@ -2320,7 +2347,8 @@ test "addSourceFromBuffer - exhaustive check for carriage return elimination" { | ... | @@ -2320,7 +2347,8 @@ test "addSourceFromBuffer - exhaustive check for carriage return elimination" { |
| 2320 | var buf: [alphabet.len]u8 = @splat(alphabet[0]); | 2347 | var buf: [alphabet.len]u8 = @splat(alphabet[0]); |
| 2321 | 2348 | ||
| 2322 | var diagnostics: Diagnostics = .{ .output = .ignore }; | 2349 | var diagnostics: Diagnostics = .{ .output = .ignore }; |
| 2323 | var comp = Compilation.init(std.testing.allocator, arena.allocator(), std.testing.io, &diagnostics, Io.Dir.cwd()); | 2350 | var comp = try Compilation.init(.testing); |
| 2351 | comp.diagnostics = &diagnostics; | ||
| 2324 | defer comp.deinit(); | 2352 | defer comp.deinit(); |
| 2325 | 2353 | ||
| 2326 | var source_count: u32 = 0; | 2354 | var source_count: u32 = 0; |
| ... | @@ -2346,9 +2374,8 @@ test "addSourceFromBuffer - exhaustive check for carriage return elimination" { | ... | @@ -2346,9 +2374,8 @@ test "addSourceFromBuffer - exhaustive check for carriage return elimination" { |
| 2346 | test "ignore BOM at beginning of file" { | 2374 | test "ignore BOM at beginning of file" { |
| 2347 | const BOM = "\xEF\xBB\xBF"; | 2375 | const BOM = "\xEF\xBB\xBF"; |
| 2348 | const Test = struct { | 2376 | const Test = struct { |
| 2349 | fn run(arena: Allocator, buf: []const u8) !void { | 2377 | fn run(buf: []const u8) !void { |
| 2350 | var diagnostics: Diagnostics = .{ .output = .ignore }; | 2378 | var comp = try Compilation.init(.testing); |
| 2351 | var comp = Compilation.init(std.testing.allocator, arena, std.testing.io, &diagnostics, Io.Dir.cwd()); | ||
| 2352 | defer comp.deinit(); | 2379 | defer comp.deinit(); |
| 2353 | 2380 | ||
| 2354 | const source = try comp.addSourceFromBuffer("file.c", buf); | 2381 | const source = try comp.addSourceFromBuffer("file.c", buf); |
| ... | @@ -2357,19 +2384,15 @@ test "ignore BOM at beginning of file" { | ... | @@ -2357,19 +2384,15 @@ test "ignore BOM at beginning of file" { |
| 2357 | } | 2384 | } |
| 2358 | }; | 2385 | }; |
| 2359 | 2386 | ||
| 2360 | var arena_state: std.heap.ArenaAllocator = .init(std.testing.allocator); | 2387 | try Test.run(BOM); |
| 2361 | defer arena_state.deinit(); | 2388 | try Test.run(BOM ++ "x"); |
| 2362 | const arena = arena_state.allocator(); | 2389 | try Test.run("x" ++ BOM); |
| 2363 | 2390 | try Test.run(BOM ++ " "); | |
| 2364 | try Test.run(arena, BOM); | 2391 | try Test.run(BOM ++ "\n"); |
| 2365 | try Test.run(arena, BOM ++ "x"); | 2392 | try Test.run(BOM ++ "\\"); |
| 2366 | try Test.run(arena, "x" ++ BOM); | 2393 | |
| 2367 | try Test.run(arena, BOM ++ " "); | 2394 | try Test.run(BOM[0..1] ++ "x"); |
| 2368 | try Test.run(arena, BOM ++ "\n"); | 2395 | try Test.run(BOM[0..2] ++ "x"); |
| 2369 | try Test.run(arena, BOM ++ "\\"); | 2396 | try Test.run(BOM[1..] ++ "x"); |
| 2370 | 2397 | try Test.run(BOM[2..] ++ "x"); | |
| 2371 | try Test.run(arena, BOM[0..1] ++ "x"); | ||
| 2372 | try Test.run(arena, BOM[0..2] ++ "x"); | ||
| 2373 | try Test.run(arena, BOM[1..] ++ "x"); | ||
| 2374 | try Test.run(arena, BOM[2..] ++ "x"); | ||
| 2375 | } | 2398 | } |
lib/compiler/aro/aro/Diagnostics.zig+21-17| ... | @@ -24,21 +24,21 @@ pub const Message = struct { | ... | @@ -24,21 +24,21 @@ pub const Message = struct { |
| 24 | @"fatal error", | 24 | @"fatal error", |
| 25 | }; | 25 | }; |
| 26 | 26 | ||
| 27 | pub fn write(msg: Message, t: std.Io.Terminal, details: bool) std.Io.Terminal.SetColorError!void { | 27 | pub fn write(msg: Message, term: std.Io.Terminal, details: bool) std.Io.Terminal.SetColorError!void { |
| 28 | const w = t.writer; | 28 | const w = term.writer; |
| 29 | try t.setColor(.bold); | 29 | try term.setColor(.bold); |
| 30 | if (msg.location) |loc| { | 30 | if (msg.location) |loc| { |
| 31 | try w.print("{s}:{d}:{d}: ", .{ loc.path, loc.line_no, loc.col }); | 31 | try w.print("{s}:{d}:{d}: ", .{ loc.path, loc.line_no, loc.col }); |
| 32 | } | 32 | } |
| 33 | switch (msg.effective_kind) { | 33 | switch (msg.effective_kind) { |
| 34 | .@"fatal error", .@"error" => try t.setColor(.bright_red), | 34 | .@"fatal error", .@"error" => try term.setColor(.bright_red), |
| 35 | .note => try t.setColor(.bright_cyan), | 35 | .note => try term.setColor(.bright_cyan), |
| 36 | .warning => try t.setColor(.bright_magenta), | 36 | .warning => try term.setColor(.bright_magenta), |
| 37 | .off => unreachable, | 37 | .off => unreachable, |
| 38 | } | 38 | } |
| 39 | try w.print("{s}: ", .{@tagName(msg.effective_kind)}); | 39 | try w.print("{s}: ", .{@tagName(msg.effective_kind)}); |
| 40 | 40 | ||
| 41 | try t.setColor(.white); | 41 | try term.setColor(.white); |
| 42 | try w.writeAll(msg.text); | 42 | try w.writeAll(msg.text); |
| 43 | if (msg.opt) |some| { | 43 | if (msg.opt) |some| { |
| 44 | if (msg.effective_kind == .@"error" and msg.kind != .@"error") { | 44 | if (msg.effective_kind == .@"error" and msg.kind != .@"error") { |
| ... | @@ -56,17 +56,17 @@ pub const Message = struct { | ... | @@ -56,17 +56,17 @@ pub const Message = struct { |
| 56 | 56 | ||
| 57 | if (!details or msg.location == null) { | 57 | if (!details or msg.location == null) { |
| 58 | try w.writeAll("\n"); | 58 | try w.writeAll("\n"); |
| 59 | try t.setColor(.reset); | 59 | try term.setColor(.reset); |
| 60 | } else { | 60 | } else { |
| 61 | const loc = msg.location.?; | 61 | const loc = msg.location.?; |
| 62 | const trailer = if (loc.end_with_splice) "\\ " else ""; | 62 | const trailer = if (loc.end_with_splice) "\\ " else ""; |
| 63 | try t.setColor(.reset); | 63 | try term.setColor(.reset); |
| 64 | try w.print("\n{s}{s}\n", .{ loc.line, trailer }); | 64 | try w.print("\n{s}{s}\n", .{ loc.line, trailer }); |
| 65 | try w.splatByteAll(' ', loc.width); | 65 | try w.splatByteAll(' ', loc.width); |
| 66 | try t.setColor(.bold); | 66 | try term.setColor(.bold); |
| 67 | try t.setColor(.bright_green); | 67 | try term.setColor(.bright_green); |
| 68 | try w.writeAll("^\n"); | 68 | try w.writeAll("^\n"); |
| 69 | try t.setColor(.reset); | 69 | try term.setColor(.reset); |
| 70 | } | 70 | } |
| 71 | try w.flush(); | 71 | try w.flush(); |
| 72 | } | 72 | } |
| ... | @@ -199,6 +199,10 @@ pub const Option = enum { | ... | @@ -199,6 +199,10 @@ pub const Option = enum { |
| 199 | @"pragma-once-outside-header", | 199 | @"pragma-once-outside-header", |
| 200 | @"underlying-atomic-qualifier-ignored", | 200 | @"underlying-atomic-qualifier-ignored", |
| 201 | @"underlying-cv-qualifier-ignored", | 201 | @"underlying-cv-qualifier-ignored", |
| 202 | @"bounds-attributes-redundant", | ||
| 203 | @"file-name-extension", | ||
| 204 | @"base-file-extension", | ||
| 205 | @"include-level-extension", | ||
| 202 | 206 | ||
| 203 | /// GNU extensions | 207 | /// GNU extensions |
| 204 | pub const gnu = [_]Option{ | 208 | pub const gnu = [_]Option{ |
| ... | @@ -541,11 +545,11 @@ fn addMessage(d: *Diagnostics, msg: Message) Compilation.Error!void { | ... | @@ -541,11 +545,11 @@ fn addMessage(d: *Diagnostics, msg: Message) Compilation.Error!void { |
| 541 | 545 | ||
| 542 | switch (d.output) { | 546 | switch (d.output) { |
| 543 | .ignore => {}, | 547 | .ignore => {}, |
| 544 | .to_writer => |t| { | 548 | .to_writer => |terminal| { |
| 545 | var new_mode = t.mode; | 549 | var mode = terminal.mode; |
| 546 | if (d.color == false) new_mode = .no_color; | 550 | if (d.color == false) mode = .no_color; |
| 547 | if (d.color == true and new_mode == .no_color) new_mode = .escape_codes; | 551 | if (d.color == true and mode == .no_color) mode = .escape_codes; |
| 548 | msg.write(.{ .writer = t.writer, .mode = new_mode }, d.details) catch { | 552 | msg.write(.{ .mode = mode, .writer = terminal.writer }, d.details) catch { |
| 549 | return error.FatalError; | 553 | return error.FatalError; |
| 550 | }; | 554 | }; |
| 551 | }, | 555 | }, |
lib/compiler/aro/aro/Driver.zig+124-50| ... | @@ -1,5 +1,4 @@ | ... | @@ -1,5 +1,4 @@ |
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const Io = std.Io; | ||
| 3 | const mem = std.mem; | 2 | const mem = std.mem; |
| 4 | const Allocator = mem.Allocator; | 3 | const Allocator = mem.Allocator; |
| 5 | const process = std.process; | 4 | const process = std.process; |
| ... | @@ -9,6 +8,7 @@ const Assembly = backend.Assembly; | ... | @@ -9,6 +8,7 @@ const Assembly = backend.Assembly; |
| 9 | const Ir = backend.Ir; | 8 | const Ir = backend.Ir; |
| 10 | const Object = backend.Object; | 9 | const Object = backend.Object; |
| 11 | 10 | ||
| 11 | const Attribute = @import("Attribute.zig"); | ||
| 12 | const Compilation = @import("Compilation.zig"); | 12 | const Compilation = @import("Compilation.zig"); |
| 13 | const Diagnostics = @import("Diagnostics.zig"); | 13 | const Diagnostics = @import("Diagnostics.zig"); |
| 14 | const DepFile = @import("DepFile.zig"); | 14 | const DepFile = @import("DepFile.zig"); |
| ... | @@ -52,6 +52,7 @@ implicit_includes: std.ArrayList(Source) = .empty, | ... | @@ -52,6 +52,7 @@ implicit_includes: std.ArrayList(Source) = .empty, |
| 52 | /// List of includes that will be used to construct the compilation's search path | 52 | /// List of includes that will be used to construct the compilation's search path |
| 53 | includes: std.ArrayList(Compilation.Include) = .empty, | 53 | includes: std.ArrayList(Compilation.Include) = .empty, |
| 54 | link_objects: std.ArrayList([]const u8) = .empty, | 54 | link_objects: std.ArrayList([]const u8) = .empty, |
| 55 | macro_prefix_map: std.ArrayList(struct { []const u8, []const u8 }) = .empty, | ||
| 55 | output_name: ?[]const u8 = null, | 56 | output_name: ?[]const u8 = null, |
| 56 | sysroot: ?[]const u8 = null, | 57 | sysroot: ?[]const u8 = null, |
| 57 | resource_dir: ?[]const u8 = null, | 58 | resource_dir: ?[]const u8 = null, |
| ... | @@ -134,9 +135,8 @@ strip: bool = false, | ... | @@ -134,9 +135,8 @@ strip: bool = false, |
| 134 | unwindlib: ?[]const u8 = null, | 135 | unwindlib: ?[]const u8 = null, |
| 135 | 136 | ||
| 136 | pub fn deinit(d: *Driver) void { | 137 | pub fn deinit(d: *Driver) void { |
| 137 | const io = d.comp.io; | ||
| 138 | for (d.link_objects.items[d.link_objects.items.len - d.temp_file_count ..]) |obj| { | 138 | for (d.link_objects.items[d.link_objects.items.len - d.temp_file_count ..]) |obj| { |
| 139 | Io.Dir.deleteFileAbsolute(io, obj) catch {}; | 139 | std.Io.Dir.deleteFileAbsolute(d.comp.io, obj) catch {}; |
| 140 | d.comp.gpa.free(obj); | 140 | d.comp.gpa.free(obj); |
| 141 | } | 141 | } |
| 142 | d.inputs.deinit(d.comp.gpa); | 142 | d.inputs.deinit(d.comp.gpa); |
| ... | @@ -144,6 +144,7 @@ pub fn deinit(d: *Driver) void { | ... | @@ -144,6 +144,7 @@ pub fn deinit(d: *Driver) void { |
| 144 | d.implicit_includes.deinit(d.comp.gpa); | 144 | d.implicit_includes.deinit(d.comp.gpa); |
| 145 | d.includes.deinit(d.comp.gpa); | 145 | d.includes.deinit(d.comp.gpa); |
| 146 | d.link_objects.deinit(d.comp.gpa); | 146 | d.link_objects.deinit(d.comp.gpa); |
| 147 | d.macro_prefix_map.deinit(d.comp.gpa); | ||
| 147 | d.* = undefined; | 148 | d.* = undefined; |
| 148 | } | 149 | } |
| 149 | 150 | ||
| ... | @@ -177,6 +178,10 @@ pub const usage = | ... | @@ -177,6 +178,10 @@ pub const usage = |
| 177 | \\ -darwin-target-variant-triple | 178 | \\ -darwin-target-variant-triple |
| 178 | \\ Specify the darwin target variant triple | 179 | \\ Specify the darwin target variant triple |
| 179 | \\ -fapple-kext Use Apple's kernel extensions ABI | 180 | \\ -fapple-kext Use Apple's kernel extensions ABI |
| 181 | \\ -fexperimental-bounds-safety | ||
| 182 | \\ Enable experimental clang-style bounds safety attributes (INCOMPLETE) | ||
| 183 | \\ -fno-experimental-bounds-safety | ||
| 184 | \\ Disable experimental clang-style bounds safety attributes | ||
| 180 | \\ -fchar8_t Enable char8_t (enabled by default in C23 and later) | 185 | \\ -fchar8_t Enable char8_t (enabled by default in C23 and later) |
| 181 | \\ -fno-char8_t Disable char8_t (disabled by default for pre-C23) | 186 | \\ -fno-char8_t Disable char8_t (disabled by default for pre-C23) |
| 182 | \\ -fcolor-diagnostics Enable colors in diagnostics | 187 | \\ -fcolor-diagnostics Enable colors in diagnostics |
| ... | @@ -218,6 +223,8 @@ pub const usage = | ... | @@ -218,6 +223,8 @@ pub const usage = |
| 218 | \\ -fuse-line-directives Use `#line <num>` linemarkers in preprocessed output | 223 | \\ -fuse-line-directives Use `#line <num>` linemarkers in preprocessed output |
| 219 | \\ -fno-use-line-directives | 224 | \\ -fno-use-line-directives |
| 220 | \\ Use `# <num>` linemarkers in preprocessed output | 225 | \\ Use `# <num>` linemarkers in preprocessed output |
| 226 | \\ -fvisibility=[default|hidden|internal|protected] | ||
| 227 | \\ Set the default ELF image symbol visibility to the specified option—all symbols are marked with this unless overridden within the code | ||
| 221 | \\ -iquote <dir> Add directory to QUOTE include search path | 228 | \\ -iquote <dir> Add directory to QUOTE include search path |
| 222 | \\ -I <dir> Add directory to include search path | 229 | \\ -I <dir> Add directory to include search path |
| 223 | \\ -idirafter <dir> Add directory to AFTER include search path | 230 | \\ -idirafter <dir> Add directory to AFTER include search path |
| ... | @@ -375,6 +382,17 @@ pub fn parseArgs( | ... | @@ -375,6 +382,17 @@ pub fn parseArgs( |
| 375 | d.use_line_directives = false; | 382 | d.use_line_directives = false; |
| 376 | } else if (mem.eql(u8, arg, "-fapple-kext")) { | 383 | } else if (mem.eql(u8, arg, "-fapple-kext")) { |
| 377 | d.apple_kext = true; | 384 | d.apple_kext = true; |
| 385 | } else if (option(arg, "-fvisibility=")) |visibility| { | ||
| 386 | d.comp.langopts.default_symbol_visibility = Attribute.visibilityFromString(visibility) orelse | ||
| 387 | return d.fatal("unsupported value '{s}'' in '{s}'", .{ visibility, arg }); | ||
| 388 | } else if (option(arg, "-frandom-seed=")) |_| { | ||
| 389 | // Ignore | ||
| 390 | } else if (option(arg, "-fmacro-prefix-map=")) |kv| { | ||
| 391 | const pair = mem.cutScalar(u8, kv, '=') orelse { | ||
| 392 | try d.err("invalid argument '{s}' to '-fmacro-prefix-map=", .{kv}); | ||
| 393 | continue; | ||
| 394 | }; | ||
| 395 | try d.macro_prefix_map.append(gpa, pair); | ||
| 378 | } else if (option(arg, "-mcmodel=")) |cmodel| { | 396 | } else if (option(arg, "-mcmodel=")) |cmodel| { |
| 379 | d.comp.cmodel = std.meta.stringToEnum(std.builtin.CodeModel, cmodel) orelse | 397 | d.comp.cmodel = std.meta.stringToEnum(std.builtin.CodeModel, cmodel) orelse |
| 380 | return d.fatal("unsupported machine code model: '{s}'", .{arg}); | 398 | return d.fatal("unsupported machine code model: '{s}'", .{arg}); |
| ... | @@ -415,6 +433,10 @@ pub fn parseArgs( | ... | @@ -415,6 +433,10 @@ pub fn parseArgs( |
| 415 | d.dependencies.file = path; | 433 | d.dependencies.file = path; |
| 416 | } else if (mem.eql(u8, arg, "-MV")) { | 434 | } else if (mem.eql(u8, arg, "-MV")) { |
| 417 | d.dependencies.format = .nmake; | 435 | d.dependencies.format = .nmake; |
| 436 | } else if (mem.eql(u8, arg, "-fexperimental-bounds-safety")) { | ||
| 437 | d.comp.langopts.bounds_safety = .clang; | ||
| 438 | } else if (mem.eql(u8, arg, "-fno-experimental-bounds-safety")) { | ||
| 439 | d.comp.langopts.bounds_safety = .none; | ||
| 418 | } else if (mem.eql(u8, arg, "-fchar8_t")) { | 440 | } else if (mem.eql(u8, arg, "-fchar8_t")) { |
| 419 | d.comp.langopts.has_char8_t_override = true; | 441 | d.comp.langopts.has_char8_t_override = true; |
| 420 | } else if (mem.eql(u8, arg, "-fno-char8_t")) { | 442 | } else if (mem.eql(u8, arg, "-fno-char8_t")) { |
| ... | @@ -635,6 +657,42 @@ pub fn parseArgs( | ... | @@ -635,6 +657,42 @@ pub fn parseArgs( |
| 635 | d.output_name = file; | 657 | d.output_name = file; |
| 636 | } else if (option(arg, "--sysroot=")) |sysroot| { | 658 | } else if (option(arg, "--sysroot=")) |sysroot| { |
| 637 | d.sysroot = sysroot; | 659 | d.sysroot = sysroot; |
| 660 | } else if (mem.eql(u8, arg, "--sysroot")) { | ||
| 661 | i += 1; | ||
| 662 | if (i >= args.len) { | ||
| 663 | try d.err("expected argument after --sysroot", .{}); | ||
| 664 | continue; | ||
| 665 | } | ||
| 666 | d.sysroot = args[i]; | ||
| 667 | } else if (mem.startsWith(u8, arg, "-isysroot")) { | ||
| 668 | var path = arg["-isysroot".len..]; | ||
| 669 | if (path.len == 0) { | ||
| 670 | i += 1; | ||
| 671 | if (i >= args.len) { | ||
| 672 | try d.err("expected argument after -isysroot", .{}); | ||
| 673 | continue; | ||
| 674 | } | ||
| 675 | path = args[i]; | ||
| 676 | } | ||
| 677 | d.sysroot = path; | ||
| 678 | } else if (mem.eql(u8, arg, "-rpath")) { | ||
| 679 | i += 1; | ||
| 680 | if (i >= args.len) { | ||
| 681 | try d.err("expected argument after -rpath", .{}); | ||
| 682 | continue; | ||
| 683 | } | ||
| 684 | // ignore for now | ||
| 685 | } else if (mem.startsWith(u8, arg, "-L")) { | ||
| 686 | var path = arg["-L".len..]; | ||
| 687 | if (path.len == 0) { | ||
| 688 | i += 1; | ||
| 689 | if (i >= args.len) { | ||
| 690 | try d.err("expected argument after -L", .{}); | ||
| 691 | continue; | ||
| 692 | } | ||
| 693 | path = args[i]; | ||
| 694 | } | ||
| 695 | // ignore for now | ||
| 638 | } else if (mem.eql(u8, arg, "-Wp,-v")) { | 696 | } else if (mem.eql(u8, arg, "-Wp,-v")) { |
| 639 | // TODO this is not how this argument should work | 697 | // TODO this is not how this argument should work |
| 640 | d.verbose_search_path = true; | 698 | d.verbose_search_path = true; |
| ... | @@ -706,6 +764,10 @@ pub fn parseArgs( | ... | @@ -706,6 +764,10 @@ pub fn parseArgs( |
| 706 | d.comp.langopts.preserve_comments = true; | 764 | d.comp.langopts.preserve_comments = true; |
| 707 | d.comp.langopts.preserve_comments_in_macros = true; | 765 | d.comp.langopts.preserve_comments_in_macros = true; |
| 708 | comment_arg = arg; | 766 | comment_arg = arg; |
| 767 | } else if (option(arg, "-fuse-ld=")) |linker_name| { | ||
| 768 | d.use_linker = linker_name; | ||
| 769 | } else if (mem.eql(u8, arg, "-fuse-ld=")) { | ||
| 770 | d.use_linker = null; | ||
| 709 | } else if (option(arg, "--ld-path=")) |linker_path| { | 771 | } else if (option(arg, "--ld-path=")) |linker_path| { |
| 710 | d.linker_path = linker_path; | 772 | d.linker_path = linker_path; |
| 711 | } else if (mem.eql(u8, arg, "-r")) { | 773 | } else if (mem.eql(u8, arg, "-r")) { |
| ... | @@ -810,6 +872,7 @@ pub fn parseArgs( | ... | @@ -810,6 +872,7 @@ pub fn parseArgs( |
| 810 | .clang => try d.diagnostics.set("clang", .off), | 872 | .clang => try d.diagnostics.set("clang", .off), |
| 811 | .gcc => try d.diagnostics.set("gnu", .off), | 873 | .gcc => try d.diagnostics.set("gnu", .off), |
| 812 | .msvc => try d.diagnostics.set("microsoft", .off), | 874 | .msvc => try d.diagnostics.set("microsoft", .off), |
| 875 | .no => {}, | ||
| 813 | } | 876 | } |
| 814 | } | 877 | } |
| 815 | if (d.comp.langopts.preserve_comments and !d.only_preprocess) { | 878 | if (d.comp.langopts.preserve_comments and !d.only_preprocess) { |
| ... | @@ -1063,20 +1126,22 @@ pub fn printDiagnosticsStats(d: *Driver) void { | ... | @@ -1063,20 +1126,22 @@ pub fn printDiagnosticsStats(d: *Driver) void { |
| 1063 | } | 1126 | } |
| 1064 | } | 1127 | } |
| 1065 | 1128 | ||
| 1066 | pub fn detectConfig(d: *Driver, file: Io.File) std.Io.tty.Config { | 1129 | pub fn detectMode(d: *Driver, file: std.Io.File) std.Io.Cancelable!std.Io.Terminal.Mode { |
| 1067 | if (d.diagnostics.color == false) return .no_color; | 1130 | if (d.diagnostics.color == false) return .no_color; |
| 1068 | const force_color = d.diagnostics.color == true; | 1131 | const force_color = d.diagnostics.color == true; |
| 1069 | 1132 | ||
| 1070 | if (file.supportsAnsiEscapeCodes()) return .escape_codes; | 1133 | const io = d.comp.io; |
| 1071 | if (@import("builtin").os.tag == .windows and file.isTty()) { | 1134 | if (try file.supportsAnsiEscapeCodes(io)) return .escape_codes; |
| 1072 | var info: std.os.windows.CONSOLE_SCREEN_BUFFER_INFO = undefined; | 1135 | if (@import("builtin").os.tag == .windows and try file.isTty(io)) { |
| 1073 | if (std.os.windows.kernel32.GetConsoleScreenBufferInfo(file.handle, &info) == std.os.windows.FALSE) { | 1136 | var get_console_info = std.os.windows.CONSOLE.USER_IO.GET_SCREEN_BUFFER_INFO; |
| 1074 | return if (force_color) .escape_codes else .no_color; | 1137 | switch (try get_console_info.operate(io, file)) { |
| 1138 | .SUCCESS => return .{ .windows_api = .{ | ||
| 1139 | .io = io, | ||
| 1140 | .file = file, | ||
| 1141 | .reset_attributes = get_console_info.Data.wAttributes, | ||
| 1142 | } }, | ||
| 1143 | else => {}, | ||
| 1075 | } | 1144 | } |
| 1076 | return .{ .windows_api = .{ | ||
| 1077 | .handle = file.handle, | ||
| 1078 | .reset_attributes = info.wAttributes, | ||
| 1079 | } }; | ||
| 1080 | } | 1145 | } |
| 1081 | 1146 | ||
| 1082 | return if (force_color) .escape_codes else .no_color; | 1147 | return if (force_color) .escape_codes else .no_color; |
| ... | @@ -1105,13 +1170,13 @@ pub fn errorDescription(e: anyerror) []const u8 { | ... | @@ -1105,13 +1170,13 @@ pub fn errorDescription(e: anyerror) []const u8 { |
| 1105 | 1170 | ||
| 1106 | /// The entry point of the Aro compiler. | 1171 | /// The entry point of the Aro compiler. |
| 1107 | /// **MAY call `exit` if `fast_exit` is set.** | 1172 | /// **MAY call `exit` if `fast_exit` is set.** |
| 1108 | pub fn main(d: *Driver, tc: *Toolchain, args: []const []const u8, comptime fast_exit: bool, asm_gen_fn: ?AsmCodeGenFn) Compilation.Error!void { | 1173 | 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 { |
| 1109 | const user_macros = macros: { | 1174 | const user_macros = macros: { |
| 1110 | var macro_buf: std.ArrayList(u8) = .empty; | 1175 | var macro_buf: std.ArrayList(u8) = .empty; |
| 1111 | defer macro_buf.deinit(d.comp.gpa); | 1176 | defer macro_buf.deinit(d.comp.gpa); |
| 1112 | 1177 | ||
| 1113 | var stdout_buf: [256]u8 = undefined; | 1178 | var stdout_buf: [256]u8 = undefined; |
| 1114 | var stdout = Io.File.stdout().writer(&stdout_buf); | 1179 | var stdout = std.Io.File.stdout().writer(d.comp.io, &stdout_buf); |
| 1115 | if (parseArgs(d, &stdout.interface, &macro_buf, args) catch |er| switch (er) { | 1180 | if (parseArgs(d, &stdout.interface, &macro_buf, args) catch |er| switch (er) { |
| 1116 | error.WriteFailed => return d.fatal("failed to write to stdout: {s}", .{errorDescription(er)}), | 1181 | error.WriteFailed => return d.fatal("failed to write to stdout: {s}", .{errorDescription(er)}), |
| 1117 | error.OutOfMemory => return error.OutOfMemory, | 1182 | error.OutOfMemory => return error.OutOfMemory, |
| ... | @@ -1217,14 +1282,13 @@ pub fn getDepFileName(d: *Driver, source: Source, buf: *[std.fs.max_name_bytes]u | ... | @@ -1217,14 +1282,13 @@ pub fn getDepFileName(d: *Driver, source: Source, buf: *[std.fs.max_name_bytes]u |
| 1217 | } | 1282 | } |
| 1218 | 1283 | ||
| 1219 | fn getRandomFilename(d: *Driver, buf: *[std.fs.max_name_bytes]u8, extension: []const u8) ![]const u8 { | 1284 | fn getRandomFilename(d: *Driver, buf: *[std.fs.max_name_bytes]u8, extension: []const u8) ![]const u8 { |
| 1220 | const io = d.comp.io; | ||
| 1221 | const random_bytes_count = 12; | 1285 | const random_bytes_count = 12; |
| 1222 | const sub_path_len = comptime std.base64.url_safe.Encoder.calcSize(random_bytes_count); | 1286 | const sub_path_len = comptime std.fs.base64_encoder.calcSize(random_bytes_count); |
| 1223 | 1287 | ||
| 1224 | var random_bytes: [random_bytes_count]u8 = undefined; | 1288 | var random_bytes: [random_bytes_count]u8 = undefined; |
| 1225 | io.random(&random_bytes); | 1289 | d.comp.io.random(&random_bytes); |
| 1226 | var random_name: [sub_path_len]u8 = undefined; | 1290 | var random_name: [sub_path_len]u8 = undefined; |
| 1227 | _ = std.base64.url_safe.Encoder.encode(&random_name, &random_bytes); | 1291 | _ = std.fs.base64_encoder.encode(&random_name, &random_bytes); |
| 1228 | 1292 | ||
| 1229 | const fmt_template = "/tmp/{s}{s}"; | 1293 | const fmt_template = "/tmp/{s}{s}"; |
| 1230 | const fmt_args = .{ | 1294 | const fmt_args = .{ |
| ... | @@ -1251,12 +1315,11 @@ fn getOutFileName(d: *Driver, source: Source, buf: *[std.fs.max_name_bytes]u8) ! | ... | @@ -1251,12 +1315,11 @@ fn getOutFileName(d: *Driver, source: Source, buf: *[std.fs.max_name_bytes]u8) ! |
| 1251 | } | 1315 | } |
| 1252 | 1316 | ||
| 1253 | fn invokeAssembler(d: *Driver, tc: *Toolchain, input_path: []const u8, output_path: []const u8) !void { | 1317 | fn invokeAssembler(d: *Driver, tc: *Toolchain, input_path: []const u8, output_path: []const u8) !void { |
| 1254 | const io = d.comp.io; | ||
| 1255 | var assembler_path_buf: [std.fs.max_path_bytes]u8 = undefined; | 1318 | var assembler_path_buf: [std.fs.max_path_bytes]u8 = undefined; |
| 1256 | const assembler_path = try tc.getAssemblerPath(&assembler_path_buf); | 1319 | const assembler_path = try tc.getAssemblerPath(&assembler_path_buf); |
| 1257 | const argv = [_][]const u8{ assembler_path, input_path, "-o", output_path }; | 1320 | const argv = [_][]const u8{ assembler_path, input_path, "-o", output_path }; |
| 1258 | 1321 | ||
| 1259 | var child = std.process.spawn(io, .{ | 1322 | var child = std.process.spawn(d.comp.io, .{ |
| 1260 | .argv = &argv, | 1323 | .argv = &argv, |
| 1261 | // TODO handle better | 1324 | // TODO handle better |
| 1262 | .stdin = .inherit, | 1325 | .stdin = .inherit, |
| ... | @@ -1265,8 +1328,8 @@ fn invokeAssembler(d: *Driver, tc: *Toolchain, input_path: []const u8, output_pa | ... | @@ -1265,8 +1328,8 @@ fn invokeAssembler(d: *Driver, tc: *Toolchain, input_path: []const u8, output_pa |
| 1265 | }) catch |er| { | 1328 | }) catch |er| { |
| 1266 | return d.fatal("unable to spawn linker: {s}", .{errorDescription(er)}); | 1329 | return d.fatal("unable to spawn linker: {s}", .{errorDescription(er)}); |
| 1267 | }; | 1330 | }; |
| 1268 | const term = child.wait(io) catch |er| { | 1331 | const term = child.wait(d.comp.io) catch |er| { |
| 1269 | return d.fatal("unable to wait linker: {s}", .{errorDescription(er)}); | 1332 | return d.fatal("error waiting for linker: {s}", .{errorDescription(er)}); |
| 1270 | }; | 1333 | }; |
| 1271 | switch (term) { | 1334 | switch (term) { |
| 1272 | .exited => |code| if (code != 0) { | 1335 | .exited => |code| if (code != 0) { |
| ... | @@ -1289,13 +1352,16 @@ fn processSource( | ... | @@ -1289,13 +1352,16 @@ fn processSource( |
| 1289 | comptime fast_exit: bool, | 1352 | comptime fast_exit: bool, |
| 1290 | asm_gen_fn: ?AsmCodeGenFn, | 1353 | asm_gen_fn: ?AsmCodeGenFn, |
| 1291 | ) !void { | 1354 | ) !void { |
| 1292 | const gpa = d.comp.gpa; | 1355 | const comp = d.comp; |
| 1293 | d.comp.generated_buf.items.len = 0; | 1356 | const io = comp.io; |
| 1357 | const gpa = comp.gpa; | ||
| 1358 | comp.generated_buf.items.len = 0; | ||
| 1294 | const prev_total = d.diagnostics.errors; | 1359 | const prev_total = d.diagnostics.errors; |
| 1295 | 1360 | ||
| 1296 | const io = d.comp.io; | 1361 | var pp = try Preprocessor.init(comp, .{ |
| 1297 | 1362 | .base_file = source.id, | |
| 1298 | var pp = try Preprocessor.initDefault(d.comp); | 1363 | .path_replacements = d.macro_prefix_map.items, |
| 1364 | }); | ||
| 1299 | defer pp.deinit(); | 1365 | defer pp.deinit(); |
| 1300 | 1366 | ||
| 1301 | var name_buf: [std.fs.max_name_bytes]u8 = undefined; | 1367 | var name_buf: [std.fs.max_name_bytes]u8 = undefined; |
| ... | @@ -1304,8 +1370,8 @@ fn processSource( | ... | @@ -1304,8 +1370,8 @@ fn processSource( |
| 1304 | 1370 | ||
| 1305 | if (opt_dep_file) |*dep_file| pp.dep_file = dep_file; | 1371 | if (opt_dep_file) |*dep_file| pp.dep_file = dep_file; |
| 1306 | 1372 | ||
| 1307 | if (d.comp.langopts.ms_extensions) { | 1373 | if (comp.langopts.ms_extensions) { |
| 1308 | d.comp.ms_cwd_source_id = source.id; | 1374 | comp.ms_cwd_source_id = source.id; |
| 1309 | } | 1375 | } |
| 1310 | const dump_mode = d.debug_dump_letters.getPreprocessorDumpMode(); | 1376 | const dump_mode = d.debug_dump_letters.getPreprocessorDumpMode(); |
| 1311 | if (d.verbose_pp) pp.verbose = true; | 1377 | if (d.verbose_pp) pp.verbose = true; |
| ... | @@ -1333,10 +1399,10 @@ fn processSource( | ... | @@ -1333,10 +1399,10 @@ fn processSource( |
| 1333 | const dep_file_name = try d.getDepFileName(source, writer_buf[0..std.fs.max_name_bytes]); | 1399 | const dep_file_name = try d.getDepFileName(source, writer_buf[0..std.fs.max_name_bytes]); |
| 1334 | 1400 | ||
| 1335 | const file = if (dep_file_name) |path| | 1401 | const file = if (dep_file_name) |path| |
| 1336 | d.comp.cwd.createFile(io, path, .{}) catch |er| | 1402 | comp.cwd.createFile(io, path, .{}) catch |er| |
| 1337 | return d.fatal("unable to create dependency file '{s}': {s}", .{ path, errorDescription(er) }) | 1403 | return d.fatal("unable to create dependency file '{s}': {s}", .{ path, errorDescription(er) }) |
| 1338 | else | 1404 | else |
| 1339 | Io.File.stdout(); | 1405 | std.Io.File.stdout(); |
| 1340 | defer if (dep_file_name != null) file.close(io); | 1406 | defer if (dep_file_name != null) file.close(io); |
| 1341 | 1407 | ||
| 1342 | var file_writer = file.writer(io, &writer_buf); | 1408 | var file_writer = file.writer(io, &writer_buf); |
| ... | @@ -1358,10 +1424,10 @@ fn processSource( | ... | @@ -1358,10 +1424,10 @@ fn processSource( |
| 1358 | } | 1424 | } |
| 1359 | 1425 | ||
| 1360 | const file = if (d.output_name) |some| | 1426 | const file = if (d.output_name) |some| |
| 1361 | d.comp.cwd.createFile(io, some, .{}) catch |er| | 1427 | comp.cwd.createFile(io, some, .{}) catch |er| |
| 1362 | return d.fatal("unable to create output file '{s}': {s}", .{ some, errorDescription(er) }) | 1428 | return d.fatal("unable to create output file '{s}': {s}", .{ some, errorDescription(er) }) |
| 1363 | else | 1429 | else |
| 1364 | Io.File.stdout(); | 1430 | std.Io.File.stdout(); |
| 1365 | defer if (d.output_name != null) file.close(io); | 1431 | defer if (d.output_name != null) file.close(io); |
| 1366 | 1432 | ||
| 1367 | var file_writer = file.writer(io, &writer_buf); | 1433 | var file_writer = file.writer(io, &writer_buf); |
| ... | @@ -1376,8 +1442,11 @@ fn processSource( | ... | @@ -1376,8 +1442,11 @@ fn processSource( |
| 1376 | defer tree.deinit(); | 1442 | defer tree.deinit(); |
| 1377 | 1443 | ||
| 1378 | if (d.verbose_ast) { | 1444 | if (d.verbose_ast) { |
| 1379 | var stdout = Io.File.stdout().writer(&writer_buf); | 1445 | var stdout = std.Io.File.stdout().writer(io, &writer_buf); |
| 1380 | tree.dump(d.detectConfig(stdout.file), &stdout.interface) catch {}; | 1446 | tree.dump(.{ |
| 1447 | .mode = try d.detectMode(stdout.file), | ||
| 1448 | .writer = &stdout.interface, | ||
| 1449 | }) catch {}; | ||
| 1381 | } | 1450 | } |
| 1382 | 1451 | ||
| 1383 | d.printDiagnosticsStats(); | 1452 | d.printDiagnosticsStats(); |
| ... | @@ -1392,10 +1461,10 @@ fn processSource( | ... | @@ -1392,10 +1461,10 @@ fn processSource( |
| 1392 | return; | 1461 | return; |
| 1393 | } | 1462 | } |
| 1394 | 1463 | ||
| 1395 | if (d.comp.target.ofmt != .elf or d.comp.target.cpu.arch != .x86_64) { | 1464 | if (comp.target.ofmt != .elf or comp.target.cpu.arch != .x86_64) { |
| 1396 | return d.fatal( | 1465 | return d.fatal( |
| 1397 | "unsupported target {s}-{s}-{s}, currently only x86-64 elf is supported", | 1466 | "unsupported target {s}-{s}-{s}, currently only x86-64 elf is supported", |
| 1398 | .{ @tagName(d.comp.target.cpu.arch), @tagName(d.comp.target.os.tag), @tagName(d.comp.target.abi) }, | 1467 | .{ @tagName(comp.target.cpu.arch), @tagName(comp.target.os.tag), @tagName(comp.target.abi) }, |
| 1399 | ); | 1468 | ); |
| 1400 | } | 1469 | } |
| 1401 | 1470 | ||
| ... | @@ -1407,15 +1476,15 @@ fn processSource( | ... | @@ -1407,15 +1476,15 @@ fn processSource( |
| 1407 | .{}, | 1476 | .{}, |
| 1408 | ); | 1477 | ); |
| 1409 | 1478 | ||
| 1410 | const assembly = try asm_fn(d.comp.target.toZigTarget(), &tree); | 1479 | const assembly = try asm_fn(comp.target.toZigTarget(), &tree); |
| 1411 | defer assembly.deinit(gpa); | 1480 | defer assembly.deinit(gpa); |
| 1412 | 1481 | ||
| 1413 | if (d.only_preprocess_and_compile) { | 1482 | if (d.only_preprocess_and_compile) { |
| 1414 | const out_file = d.comp.cwd.createFile(io, out_file_name, .{}) catch |er| | 1483 | const out_file = comp.cwd.createFile(io, out_file_name, .{}) catch |er| |
| 1415 | return d.fatal("unable to create output file '{s}': {s}", .{ out_file_name, errorDescription(er) }); | 1484 | return d.fatal("unable to create output file '{s}': {s}", .{ out_file_name, errorDescription(er) }); |
| 1416 | defer out_file.close(io); | 1485 | defer out_file.close(io); |
| 1417 | 1486 | ||
| 1418 | assembly.writeToFile(out_file) catch |er| | 1487 | assembly.writeToFile(io, out_file) catch |er| |
| 1419 | return d.fatal("unable to write to output file '{s}': {s}", .{ out_file_name, errorDescription(er) }); | 1488 | return d.fatal("unable to write to output file '{s}': {s}", .{ out_file_name, errorDescription(er) }); |
| 1420 | if (fast_exit) std.process.exit(0); // Not linking, no need for cleanup. | 1489 | if (fast_exit) std.process.exit(0); // Not linking, no need for cleanup. |
| 1421 | return; | 1490 | return; |
| ... | @@ -1425,10 +1494,10 @@ fn processSource( | ... | @@ -1425,10 +1494,10 @@ fn processSource( |
| 1425 | // then assemble to out_file_name | 1494 | // then assemble to out_file_name |
| 1426 | var assembly_name_buf: [std.fs.max_name_bytes]u8 = undefined; | 1495 | var assembly_name_buf: [std.fs.max_name_bytes]u8 = undefined; |
| 1427 | const assembly_out_file_name = try d.getRandomFilename(&assembly_name_buf, ".s"); | 1496 | const assembly_out_file_name = try d.getRandomFilename(&assembly_name_buf, ".s"); |
| 1428 | const out_file = d.comp.cwd.createFile(io, assembly_out_file_name, .{}) catch |er| | 1497 | const out_file = comp.cwd.createFile(io, assembly_out_file_name, .{}) catch |er| |
| 1429 | return d.fatal("unable to create output file '{s}': {s}", .{ assembly_out_file_name, errorDescription(er) }); | 1498 | return d.fatal("unable to create output file '{s}': {s}", .{ assembly_out_file_name, errorDescription(er) }); |
| 1430 | defer out_file.close(io); | 1499 | defer out_file.close(io); |
| 1431 | assembly.writeToFile(out_file) catch |er| | 1500 | assembly.writeToFile(io, out_file) catch |er| |
| 1432 | return d.fatal("unable to write to output file '{s}': {s}", .{ assembly_out_file_name, errorDescription(er) }); | 1501 | return d.fatal("unable to write to output file '{s}': {s}", .{ assembly_out_file_name, errorDescription(er) }); |
| 1433 | try d.invokeAssembler(tc, assembly_out_file_name, out_file_name); | 1502 | try d.invokeAssembler(tc, assembly_out_file_name, out_file_name); |
| 1434 | if (d.only_compile) { | 1503 | if (d.only_compile) { |
| ... | @@ -1440,8 +1509,11 @@ fn processSource( | ... | @@ -1440,8 +1509,11 @@ fn processSource( |
| 1440 | defer ir.deinit(gpa); | 1509 | defer ir.deinit(gpa); |
| 1441 | 1510 | ||
| 1442 | if (d.verbose_ir) { | 1511 | if (d.verbose_ir) { |
| 1443 | var stdout = Io.File.stdout().writer(&writer_buf); | 1512 | var stdout = std.Io.File.stdout().writer(io, &writer_buf); |
| 1444 | ir.dump(gpa, d.detectConfig(stdout.file), &stdout.interface) catch {}; | 1513 | ir.dump(gpa, .{ |
| 1514 | .mode = try d.detectMode(stdout.file), | ||
| 1515 | .writer = &stdout.interface, | ||
| 1516 | }) catch {}; | ||
| 1445 | } | 1517 | } |
| 1446 | 1518 | ||
| 1447 | var render_errors: Ir.Renderer.ErrorList = .{}; | 1519 | var render_errors: Ir.Renderer.ErrorList = .{}; |
| ... | @@ -1494,8 +1566,9 @@ fn dumpLinkerArgs(w: *std.Io.Writer, items: []const []const u8) !void { | ... | @@ -1494,8 +1566,9 @@ fn dumpLinkerArgs(w: *std.Io.Writer, items: []const []const u8) !void { |
| 1494 | /// The entry point of the Aro compiler. | 1566 | /// The entry point of the Aro compiler. |
| 1495 | /// **MAY call `exit` if `fast_exit` is set.** | 1567 | /// **MAY call `exit` if `fast_exit` is set.** |
| 1496 | pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compilation.Error!void { | 1568 | pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compilation.Error!void { |
| 1497 | const gpa = d.comp.gpa; | 1569 | const comp = d.comp; |
| 1498 | const io = d.comp.io; | 1570 | const io = comp.io; |
| 1571 | const gpa = comp.gpa; | ||
| 1499 | var argv: std.ArrayList([]const u8) = .empty; | 1572 | var argv: std.ArrayList([]const u8) = .empty; |
| 1500 | defer argv.deinit(gpa); | 1573 | defer argv.deinit(gpa); |
| 1501 | 1574 | ||
| ... | @@ -1507,7 +1580,7 @@ pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compil | ... | @@ -1507,7 +1580,7 @@ pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compil |
| 1507 | 1580 | ||
| 1508 | if (d.verbose_linker_args) { | 1581 | if (d.verbose_linker_args) { |
| 1509 | var stdout_buf: [4096]u8 = undefined; | 1582 | var stdout_buf: [4096]u8 = undefined; |
| 1510 | var stdout = Io.File.stdout().writer(&stdout_buf); | 1583 | var stdout = std.Io.File.stdout().writer(io, &stdout_buf); |
| 1511 | dumpLinkerArgs(&stdout.interface, argv.items) catch { | 1584 | dumpLinkerArgs(&stdout.interface, argv.items) catch { |
| 1512 | return d.fatal("unable to dump linker args: {s}", .{errorDescription(stdout.err.?)}); | 1585 | return d.fatal("unable to dump linker args: {s}", .{errorDescription(stdout.err.?)}); |
| 1513 | }; | 1586 | }; |
| ... | @@ -1521,8 +1594,9 @@ pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compil | ... | @@ -1521,8 +1594,9 @@ pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compil |
| 1521 | }) catch |er| { | 1594 | }) catch |er| { |
| 1522 | return d.fatal("unable to spawn linker: {s}", .{errorDescription(er)}); | 1595 | return d.fatal("unable to spawn linker: {s}", .{errorDescription(er)}); |
| 1523 | }; | 1596 | }; |
| 1597 | |||
| 1524 | const term = child.wait(io) catch |er| { | 1598 | const term = child.wait(io) catch |er| { |
| 1525 | return d.fatal("unable to wait linker: {s}", .{errorDescription(er)}); | 1599 | return d.fatal("error waiting for linker: {s}", .{errorDescription(er)}); |
| 1526 | }; | 1600 | }; |
| 1527 | switch (term) { | 1601 | switch (term) { |
| 1528 | .exited => |code| if (code != 0) { | 1602 | .exited => |code| if (code != 0) { |
| ... | @@ -1541,7 +1615,7 @@ pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compil | ... | @@ -1541,7 +1615,7 @@ pub fn invokeLinker(d: *Driver, tc: *Toolchain, comptime fast_exit: bool) Compil |
| 1541 | 1615 | ||
| 1542 | fn exitWithCleanup(d: *Driver, code: u8) noreturn { | 1616 | fn exitWithCleanup(d: *Driver, code: u8) noreturn { |
| 1543 | for (d.link_objects.items[d.link_objects.items.len - d.temp_file_count ..]) |obj| { | 1617 | for (d.link_objects.items[d.link_objects.items.len - d.temp_file_count ..]) |obj| { |
| 1544 | std.fs.deleteFileAbsolute(obj) catch {}; | 1618 | std.Io.Dir.deleteFileAbsolute(d.comp.io, obj) catch {}; |
| 1545 | } | 1619 | } |
| 1546 | std.process.exit(code); | 1620 | std.process.exit(code); |
| 1547 | } | 1621 | } |
lib/compiler/aro/aro/Driver/Filesystem.zig deleted-241| ... | @@ -1,241 +0,0 @@ | ||
| 1 | const builtin = @import("builtin"); | ||
| 2 | const is_windows = builtin.os.tag == .windows; | ||
| 3 | |||
| 4 | const std = @import("std"); | ||
| 5 | const Io = std.Io; | ||
| 6 | const mem = std.std.mem; | ||
| 7 | |||
| 8 | fn readFileFake(entries: []const Filesystem.Entry, path: []const u8, buf: []u8) ?[]const u8 { | ||
| 9 | @branchHint(.cold); | ||
| 10 | for (entries) |entry| { | ||
| 11 | if (mem.eql(u8, entry.path, path)) { | ||
| 12 | const len = @min(entry.contents.len, buf.len); | ||
| 13 | @memcpy(buf[0..len], entry.contents[0..len]); | ||
| 14 | return buf[0..len]; | ||
| 15 | } | ||
| 16 | } | ||
| 17 | return null; | ||
| 18 | } | ||
| 19 | |||
| 20 | fn findProgramByNameFake(entries: []const Filesystem.Entry, name: []const u8, path: ?[]const u8, buf: []u8) ?[]const u8 { | ||
| 21 | @branchHint(.cold); | ||
| 22 | if (mem.indexOfScalar(u8, name, '/') != null) { | ||
| 23 | @memcpy(buf[0..name.len], name); | ||
| 24 | return buf[0..name.len]; | ||
| 25 | } | ||
| 26 | const path_env = path orelse return null; | ||
| 27 | var fib = std.heap.FixedBufferAllocator.init(buf); | ||
| 28 | |||
| 29 | var it = mem.tokenizeScalar(u8, path_env, std.fs.path.delimiter); | ||
| 30 | while (it.next()) |path_dir| { | ||
| 31 | defer fib.reset(); | ||
| 32 | const full_path = std.fs.path.join(fib.allocator(), &.{ path_dir, name }) catch continue; | ||
| 33 | if (canExecuteFake(entries, full_path)) return full_path; | ||
| 34 | } | ||
| 35 | |||
| 36 | return null; | ||
| 37 | } | ||
| 38 | |||
| 39 | fn canExecuteFake(entries: []const Filesystem.Entry, path: []const u8) bool { | ||
| 40 | @branchHint(.cold); | ||
| 41 | for (entries) |entry| { | ||
| 42 | if (mem.eql(u8, entry.path, path)) { | ||
| 43 | return entry.executable; | ||
| 44 | } | ||
| 45 | } | ||
| 46 | return false; | ||
| 47 | } | ||
| 48 | |||
| 49 | fn existsFake(entries: []const Filesystem.Entry, path: []const u8) bool { | ||
| 50 | @branchHint(.cold); | ||
| 51 | var buf: [std.fs.max_path_bytes]u8 = undefined; | ||
| 52 | var fib = std.heap.FixedBufferAllocator.init(&buf); | ||
| 53 | const resolved = std.fs.path.resolvePosix(fib.allocator(), &.{path}) catch return false; | ||
| 54 | for (entries) |entry| { | ||
| 55 | if (mem.eql(u8, entry.path, resolved)) return true; | ||
| 56 | } | ||
| 57 | return false; | ||
| 58 | } | ||
| 59 | |||
| 60 | fn canExecutePosix(io: Io, path: []const u8) bool { | ||
| 61 | Io.Dir.accessAbsolute(io, path, .{ .execute = true }) catch return false; | ||
| 62 | // Todo: ensure path is not a directory | ||
| 63 | return true; | ||
| 64 | } | ||
| 65 | |||
| 66 | /// TODO | ||
| 67 | fn canExecuteWindows(path: []const u8) bool { | ||
| 68 | _ = path; | ||
| 69 | return true; | ||
| 70 | } | ||
| 71 | |||
| 72 | /// TODO | ||
| 73 | fn findProgramByNameWindows(allocator: std.mem.Allocator, name: []const u8, path: ?[]const u8, buf: []u8) ?[]const u8 { | ||
| 74 | _ = path; | ||
| 75 | _ = buf; | ||
| 76 | _ = name; | ||
| 77 | _ = allocator; | ||
| 78 | return null; | ||
| 79 | } | ||
| 80 | |||
| 81 | /// TODO: does WASI need special handling? | ||
| 82 | fn findProgramByNamePosix(name: []const u8, path: ?[]const u8, buf: []u8) ?[]const u8 { | ||
| 83 | if (mem.indexOfScalar(u8, name, '/') != null) { | ||
| 84 | @memcpy(buf[0..name.len], name); | ||
| 85 | return buf[0..name.len]; | ||
| 86 | } | ||
| 87 | const path_env = path orelse return null; | ||
| 88 | var fib = std.heap.FixedBufferAllocator.init(buf); | ||
| 89 | |||
| 90 | var it = mem.tokenizeScalar(u8, path_env, std.fs.path.delimiter); | ||
| 91 | while (it.next()) |path_dir| { | ||
| 92 | defer fib.reset(); | ||
| 93 | const full_path = std.fs.path.join(fib.allocator(), &.{ path_dir, name }) catch continue; | ||
| 94 | if (canExecutePosix(full_path)) return full_path; | ||
| 95 | } | ||
| 96 | |||
| 97 | return null; | ||
| 98 | } | ||
| 99 | |||
| 100 | pub const Filesystem = union(enum) { | ||
| 101 | real: std.Io.Dir, | ||
| 102 | fake: []const Entry, | ||
| 103 | |||
| 104 | const Entry = struct { | ||
| 105 | path: []const u8, | ||
| 106 | contents: []const u8 = "", | ||
| 107 | executable: bool = false, | ||
| 108 | }; | ||
| 109 | |||
| 110 | const FakeDir = struct { | ||
| 111 | entries: []const Entry, | ||
| 112 | path: []const u8, | ||
| 113 | |||
| 114 | fn iterate(self: FakeDir) FakeDir.Iterator { | ||
| 115 | return .{ | ||
| 116 | .entries = self.entries, | ||
| 117 | .base = self.path, | ||
| 118 | }; | ||
| 119 | } | ||
| 120 | |||
| 121 | const Iterator = struct { | ||
| 122 | entries: []const Entry, | ||
| 123 | base: []const u8, | ||
| 124 | i: usize = 0, | ||
| 125 | |||
| 126 | fn next(self: *@This()) !?std.Io.Dir.Entry { | ||
| 127 | while (self.i < self.entries.len) { | ||
| 128 | const entry = self.entries[self.i]; | ||
| 129 | self.i += 1; | ||
| 130 | if (entry.path.len == self.base.len) continue; | ||
| 131 | if (std.mem.startsWith(u8, entry.path, self.base)) { | ||
| 132 | const remaining = entry.path[self.base.len + 1 ..]; | ||
| 133 | if (std.mem.indexOfScalar(u8, remaining, std.fs.path.sep) != null) continue; | ||
| 134 | const extension = std.fs.path.extension(remaining); | ||
| 135 | const kind: std.Io.Dir.Entry.Kind = if (extension.len == 0) .directory else .file; | ||
| 136 | return .{ .name = remaining, .kind = kind }; | ||
| 137 | } | ||
| 138 | } | ||
| 139 | return null; | ||
| 140 | } | ||
| 141 | }; | ||
| 142 | }; | ||
| 143 | |||
| 144 | const Dir = union(enum) { | ||
| 145 | dir: std.Io.Dir, | ||
| 146 | fake: FakeDir, | ||
| 147 | |||
| 148 | pub fn iterate(self: Dir) Iterator { | ||
| 149 | return switch (self) { | ||
| 150 | .dir => |dir| .{ .iterator = dir.iterate() }, | ||
| 151 | .fake => |fake| .{ .fake = fake.iterate() }, | ||
| 152 | }; | ||
| 153 | } | ||
| 154 | |||
| 155 | pub fn close(self: *Dir, io: Io) void { | ||
| 156 | switch (self.*) { | ||
| 157 | .dir => |*d| d.close(io), | ||
| 158 | .fake => {}, | ||
| 159 | } | ||
| 160 | } | ||
| 161 | }; | ||
| 162 | |||
| 163 | const Iterator = union(enum) { | ||
| 164 | iterator: std.Io.Dir.Iterator, | ||
| 165 | fake: FakeDir.Iterator, | ||
| 166 | |||
| 167 | pub fn next(self: *Iterator) std.Io.Dir.Iterator.Error!?std.Io.Dir.Entry { | ||
| 168 | return switch (self.*) { | ||
| 169 | .iterator => |*it| it.next(), | ||
| 170 | .fake => |*it| it.next(), | ||
| 171 | }; | ||
| 172 | } | ||
| 173 | }; | ||
| 174 | |||
| 175 | pub fn exists(fs: Filesystem, io: Io, path: []const u8) bool { | ||
| 176 | switch (fs) { | ||
| 177 | .real => |cwd| { | ||
| 178 | cwd.access(io, path, .{}) catch return false; | ||
| 179 | return true; | ||
| 180 | }, | ||
| 181 | .fake => |paths| return existsFake(paths, path), | ||
| 182 | } | ||
| 183 | } | ||
| 184 | |||
| 185 | pub fn joinedExists(fs: Filesystem, parts: []const []const u8) bool { | ||
| 186 | var buf: [std.fs.max_path_bytes]u8 = undefined; | ||
| 187 | var fib = std.heap.FixedBufferAllocator.init(&buf); | ||
| 188 | const joined = std.fs.path.join(fib.allocator(), parts) catch return false; | ||
| 189 | return fs.exists(joined); | ||
| 190 | } | ||
| 191 | |||
| 192 | pub fn canExecute(fs: Filesystem, path: []const u8) bool { | ||
| 193 | return switch (fs) { | ||
| 194 | .real => if (is_windows) canExecuteWindows(path) else canExecutePosix(path), | ||
| 195 | .fake => |entries| canExecuteFake(entries, path), | ||
| 196 | }; | ||
| 197 | } | ||
| 198 | |||
| 199 | /// Search for an executable named `name` using platform-specific logic | ||
| 200 | /// If it's found, write the full path to `buf` and return a slice of it | ||
| 201 | /// Otherwise retun null | ||
| 202 | pub fn findProgramByName(fs: Filesystem, allocator: std.mem.Allocator, name: []const u8, path: ?[]const u8, buf: []u8) ?[]const u8 { | ||
| 203 | std.debug.assert(name.len > 0); | ||
| 204 | return switch (fs) { | ||
| 205 | .real => if (is_windows) findProgramByNameWindows(allocator, name, path, buf) else findProgramByNamePosix(name, path, buf), | ||
| 206 | .fake => |entries| findProgramByNameFake(entries, name, path, buf), | ||
| 207 | }; | ||
| 208 | } | ||
| 209 | |||
| 210 | /// Read the file at `path` into `buf`. | ||
| 211 | /// Returns null if any errors are encountered | ||
| 212 | /// Otherwise returns a slice of `buf`. If the file is larger than `buf` partial contents are returned | ||
| 213 | pub fn readFile(fs: Filesystem, io: Io, path: []const u8, buf: []u8) ?[]const u8 { | ||
| 214 | return switch (fs) { | ||
| 215 | .real => |cwd| { | ||
| 216 | const file = cwd.openFile(io, path, .{}) catch return null; | ||
| 217 | defer file.close(io); | ||
| 218 | |||
| 219 | const bytes_read = file.readAll(buf) catch return null; | ||
| 220 | return buf[0..bytes_read]; | ||
| 221 | }, | ||
| 222 | .fake => |entries| readFileFake(entries, path, buf), | ||
| 223 | }; | ||
| 224 | } | ||
| 225 | |||
| 226 | pub fn openDir(fs: Filesystem, io: Io, dir_name: []const u8) std.Io.Dir.OpenError!Dir { | ||
| 227 | return switch (fs) { | ||
| 228 | .real => |cwd| .{ .dir = try cwd.openDir(io, dir_name, .{ .access_sub_paths = false, .iterate = true }) }, | ||
| 229 | .fake => |entries| .{ .fake = .{ .entries = entries, .path = dir_name } }, | ||
| 230 | }; | ||
| 231 | } | ||
| 232 | }; | ||
| 233 | |||
| 234 | test "Fake filesystem" { | ||
| 235 | const fs: Filesystem = .{ .fake = &.{ | ||
| 236 | .{ .path = "/usr/bin" }, | ||
| 237 | } }; | ||
| 238 | try std.testing.expect(fs.exists("/usr/bin")); | ||
| 239 | try std.testing.expect(fs.exists("/usr/bin/foo/..")); | ||
| 240 | try std.testing.expect(!fs.exists("/usr/bin/bar")); | ||
| 241 | } | ||
lib/compiler/aro/aro/Driver/GCCDetector.zig created+635| ... | @@ -0,0 +1,635 @@ | ||
| 1 | const std = @import("std"); | ||
| 2 | |||
| 3 | const system_defaults = @import("system_defaults"); | ||
| 4 | |||
| 5 | const GCCVersion = @import("GCCVersion.zig"); | ||
| 6 | const Multilib = @import("Multilib.zig"); | ||
| 7 | const Target = @import("../Target.zig"); | ||
| 8 | const Toolchain = @import("../Toolchain.zig"); | ||
| 9 | |||
| 10 | const GCCDetector = @This(); | ||
| 11 | |||
| 12 | is_valid: bool = false, | ||
| 13 | install_path: []const u8 = "", | ||
| 14 | parent_lib_path: []const u8 = "", | ||
| 15 | version: GCCVersion = .{}, | ||
| 16 | gcc_triple: []const u8 = "", | ||
| 17 | selected: Multilib = .{}, | ||
| 18 | biarch_sibling: ?Multilib = null, | ||
| 19 | |||
| 20 | pub fn deinit(self: *GCCDetector) void { | ||
| 21 | if (!self.is_valid) return; | ||
| 22 | } | ||
| 23 | |||
| 24 | pub fn appendToolPath(self: *const GCCDetector, tc: *Toolchain) !void { | ||
| 25 | if (!self.is_valid) return; | ||
| 26 | return tc.addPathFromComponents(&.{ | ||
| 27 | self.parent_lib_path, | ||
| 28 | "..", | ||
| 29 | self.gcc_triple, | ||
| 30 | "bin", | ||
| 31 | }, .program); | ||
| 32 | } | ||
| 33 | |||
| 34 | fn addDefaultGCCPrefixes(prefixes: *std.ArrayList([]const u8), tc: *const Toolchain) !void { | ||
| 35 | const sysroot = tc.getSysroot(); | ||
| 36 | const target = tc.getTarget(); | ||
| 37 | if (sysroot.len == 0 and target.os.tag == .linux and tc.exists("/opt/rh")) { | ||
| 38 | prefixes.appendAssumeCapacity("/opt/rh/gcc-toolset-12/root/usr"); | ||
| 39 | prefixes.appendAssumeCapacity("/opt/rh/gcc-toolset-11/root/usr"); | ||
| 40 | prefixes.appendAssumeCapacity("/opt/rh/gcc-toolset-10/root/usr"); | ||
| 41 | prefixes.appendAssumeCapacity("/opt/rh/devtoolset-12/root/usr"); | ||
| 42 | prefixes.appendAssumeCapacity("/opt/rh/devtoolset-11/root/usr"); | ||
| 43 | prefixes.appendAssumeCapacity("/opt/rh/devtoolset-10/root/usr"); | ||
| 44 | prefixes.appendAssumeCapacity("/opt/rh/devtoolset-9/root/usr"); | ||
| 45 | prefixes.appendAssumeCapacity("/opt/rh/devtoolset-8/root/usr"); | ||
| 46 | prefixes.appendAssumeCapacity("/opt/rh/devtoolset-7/root/usr"); | ||
| 47 | prefixes.appendAssumeCapacity("/opt/rh/devtoolset-6/root/usr"); | ||
| 48 | prefixes.appendAssumeCapacity("/opt/rh/devtoolset-4/root/usr"); | ||
| 49 | prefixes.appendAssumeCapacity("/opt/rh/devtoolset-3/root/usr"); | ||
| 50 | prefixes.appendAssumeCapacity("/opt/rh/devtoolset-2/root/usr"); | ||
| 51 | } | ||
| 52 | if (sysroot.len == 0) { | ||
| 53 | prefixes.appendAssumeCapacity("/usr"); | ||
| 54 | } else { | ||
| 55 | var usr_path = try tc.driver.comp.arena.alloc(u8, 4 + sysroot.len); | ||
| 56 | @memcpy(usr_path[0..4], "/usr"); | ||
| 57 | @memcpy(usr_path[4..], sysroot); | ||
| 58 | prefixes.appendAssumeCapacity(usr_path); | ||
| 59 | } | ||
| 60 | } | ||
| 61 | |||
| 62 | fn collectLibDirsAndTriples( | ||
| 63 | tc: *Toolchain, | ||
| 64 | lib_dirs: *std.ArrayList([]const u8), | ||
| 65 | triple_aliases: *std.ArrayList([]const u8), | ||
| 66 | biarch_libdirs: *std.ArrayList([]const u8), | ||
| 67 | biarch_triple_aliases: *std.ArrayList([]const u8), | ||
| 68 | ) !void { | ||
| 69 | const AArch64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" }; | ||
| 70 | const AArch64Triples: [4][]const u8 = .{ "aarch64-none-linux-gnu", "aarch64-linux-gnu", "aarch64-redhat-linux", "aarch64-suse-linux" }; | ||
| 71 | const AArch64beLibDirs: [1][]const u8 = .{"/lib"}; | ||
| 72 | const AArch64beTriples: [2][]const u8 = .{ "aarch64_be-none-linux-gnu", "aarch64_be-linux-gnu" }; | ||
| 73 | |||
| 74 | const ARMLibDirs: [1][]const u8 = .{"/lib"}; | ||
| 75 | const ARMTriples: [1][]const u8 = .{"arm-linux-gnueabi"}; | ||
| 76 | const ARMHFTriples: [4][]const u8 = .{ "arm-linux-gnueabihf", "armv7hl-redhat-linux-gnueabi", "armv6hl-suse-linux-gnueabi", "armv7hl-suse-linux-gnueabi" }; | ||
| 77 | |||
| 78 | const ARMebLibDirs: [1][]const u8 = .{"/lib"}; | ||
| 79 | const ARMebTriples: [1][]const u8 = .{"armeb-linux-gnueabi"}; | ||
| 80 | const ARMebHFTriples: [2][]const u8 = .{ "armeb-linux-gnueabihf", "armebv7hl-redhat-linux-gnueabi" }; | ||
| 81 | |||
| 82 | const AVRLibDirs: [1][]const u8 = .{"/lib"}; | ||
| 83 | const AVRTriples: [1][]const u8 = .{"avr"}; | ||
| 84 | |||
| 85 | const CSKYLibDirs: [1][]const u8 = .{"/lib"}; | ||
| 86 | const CSKYTriples: [3][]const u8 = .{ "csky-linux-gnuabiv2", "csky-linux-uclibcabiv2", "csky-elf-noneabiv2" }; | ||
| 87 | |||
| 88 | const X86_64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" }; | ||
| 89 | const X86_64Triples: [11][]const u8 = .{ | ||
| 90 | "x86_64-linux-gnu", "x86_64-unknown-linux-gnu", | ||
| 91 | "x86_64-pc-linux-gnu", "x86_64-redhat-linux6E", | ||
| 92 | "x86_64-redhat-linux", "x86_64-suse-linux", | ||
| 93 | "x86_64-manbo-linux-gnu", "x86_64-linux-gnu", | ||
| 94 | "x86_64-slackware-linux", "x86_64-unknown-linux", | ||
| 95 | "x86_64-amazon-linux", | ||
| 96 | }; | ||
| 97 | const X32Triples: [2][]const u8 = .{ "x86_64-linux-gnux32", "x86_64-pc-linux-gnux32" }; | ||
| 98 | const X32LibDirs: [2][]const u8 = .{ "/libx32", "/lib" }; | ||
| 99 | const X86LibDirs: [2][]const u8 = .{ "/lib32", "/lib" }; | ||
| 100 | const X86Triples: [9][]const u8 = .{ | ||
| 101 | "i586-linux-gnu", "i686-linux-gnu", "i686-pc-linux-gnu", | ||
| 102 | "i386-redhat-linux6E", "i686-redhat-linux", "i386-redhat-linux", | ||
| 103 | "i586-suse-linux", "i686-montavista-linux", "i686-gnu", | ||
| 104 | }; | ||
| 105 | |||
| 106 | const LoongArch64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" }; | ||
| 107 | const LoongArch64Triples: [2][]const u8 = .{ "loongarch64-linux-gnu", "loongarch64-unknown-linux-gnu" }; | ||
| 108 | |||
| 109 | const M68kLibDirs: [1][]const u8 = .{"/lib"}; | ||
| 110 | const M68kTriples: [3][]const u8 = .{ "m68k-linux-gnu", "m68k-unknown-linux-gnu", "m68k-suse-linux" }; | ||
| 111 | |||
| 112 | const MIPSLibDirs: [2][]const u8 = .{ "/libo32", "/lib" }; | ||
| 113 | const MIPSTriples: [5][]const u8 = .{ | ||
| 114 | "mips-linux-gnu", "mips-mti-linux", | ||
| 115 | "mips-mti-linux-gnu", "mips-img-linux-gnu", | ||
| 116 | "mipsisa32r6-linux-gnu", | ||
| 117 | }; | ||
| 118 | const MIPSELLibDirs: [2][]const u8 = .{ "/libo32", "/lib" }; | ||
| 119 | const MIPSELTriples: [3][]const u8 = .{ "mipsel-linux-gnu", "mips-img-linux-gnu", "mipsisa32r6el-linux-gnu" }; | ||
| 120 | |||
| 121 | const MIPS64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" }; | ||
| 122 | const MIPS64Triples: [6][]const u8 = .{ | ||
| 123 | "mips64-linux-gnu", "mips-mti-linux-gnu", | ||
| 124 | "mips-img-linux-gnu", "mips64-linux-gnuabi64", | ||
| 125 | "mipsisa64r6-linux-gnu", "mipsisa64r6-linux-gnuabi64", | ||
| 126 | }; | ||
| 127 | const MIPS64ELLibDirs: [2][]const u8 = .{ "/lib64", "/lib" }; | ||
| 128 | const MIPS64ELTriples: [6][]const u8 = .{ | ||
| 129 | "mips64el-linux-gnu", "mips-mti-linux-gnu", | ||
| 130 | "mips-img-linux-gnu", "mips64el-linux-gnuabi64", | ||
| 131 | "mipsisa64r6el-linux-gnu", "mipsisa64r6el-linux-gnuabi64", | ||
| 132 | }; | ||
| 133 | |||
| 134 | const MIPSN32LibDirs: [1][]const u8 = .{"/lib32"}; | ||
| 135 | const MIPSN32Triples: [2][]const u8 = .{ "mips64-linux-gnuabin32", "mipsisa64r6-linux-gnuabin32" }; | ||
| 136 | const MIPSN32ELLibDirs: [1][]const u8 = .{"/lib32"}; | ||
| 137 | const MIPSN32ELTriples: [2][]const u8 = .{ "mips64el-linux-gnuabin32", "mipsisa64r6el-linux-gnuabin32" }; | ||
| 138 | |||
| 139 | const MSP430LibDirs: [1][]const u8 = .{"/lib"}; | ||
| 140 | const MSP430Triples: [1][]const u8 = .{"msp430-elf"}; | ||
| 141 | |||
| 142 | const PPCLibDirs: [2][]const u8 = .{ "/lib32", "/lib" }; | ||
| 143 | const PPCTriples: [5][]const u8 = .{ | ||
| 144 | "powerpc-linux-gnu", "powerpc-unknown-linux-gnu", "powerpc-linux-gnuspe", | ||
| 145 | // On 32-bit PowerPC systems running SUSE Linux, gcc is configured as a | ||
| 146 | // 64-bit compiler which defaults to "-m32", hence "powerpc64-suse-linux". | ||
| 147 | "powerpc64-suse-linux", "powerpc-montavista-linuxspe", | ||
| 148 | }; | ||
| 149 | const PPCLELibDirs: [2][]const u8 = .{ "/lib32", "/lib" }; | ||
| 150 | const PPCLETriples: [3][]const u8 = .{ "powerpcle-linux-gnu", "powerpcle-unknown-linux-gnu", "powerpcle-linux-musl" }; | ||
| 151 | |||
| 152 | const PPC64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" }; | ||
| 153 | const PPC64Triples: [4][]const u8 = .{ | ||
| 154 | "powerpc64-linux-gnu", "powerpc64-unknown-linux-gnu", | ||
| 155 | "powerpc64-suse-linux", "ppc64-redhat-linux", | ||
| 156 | }; | ||
| 157 | const PPC64LELibDirs: [2][]const u8 = .{ "/lib64", "/lib" }; | ||
| 158 | const PPC64LETriples: [5][]const u8 = .{ | ||
| 159 | "powerpc64le-linux-gnu", "powerpc64le-unknown-linux-gnu", | ||
| 160 | "powerpc64le-none-linux-gnu", "powerpc64le-suse-linux", | ||
| 161 | "ppc64le-redhat-linux", | ||
| 162 | }; | ||
| 163 | |||
| 164 | const RISCV32LibDirs: [2][]const u8 = .{ "/lib32", "/lib" }; | ||
| 165 | const RISCV32Triples: [3][]const u8 = .{ "riscv32-unknown-linux-gnu", "riscv32-linux-gnu", "riscv32-unknown-elf" }; | ||
| 166 | const RISCV64LibDirs: [2][]const u8 = .{ "/lib64", "/lib" }; | ||
| 167 | const RISCV64Triples: [3][]const u8 = .{ | ||
| 168 | "riscv64-unknown-linux-gnu", | ||
| 169 | "riscv64-linux-gnu", | ||
| 170 | "riscv64-unknown-elf", | ||
| 171 | }; | ||
| 172 | |||
| 173 | const SPARCv8LibDirs: [2][]const u8 = .{ "/lib32", "/lib" }; | ||
| 174 | const SPARCv8Triples: [2][]const u8 = .{ "sparc-linux-gnu", "sparcv8-linux-gnu" }; | ||
| 175 | const SPARCv9LibDirs: [2][]const u8 = .{ "/lib64", "/lib" }; | ||
| 176 | const SPARCv9Triples: [2][]const u8 = .{ "sparc64-linux-gnu", "sparcv9-linux-gnu" }; | ||
| 177 | |||
| 178 | const SystemZLibDirs: [2][]const u8 = .{ "/lib64", "/lib" }; | ||
| 179 | const SystemZTriples: [5][]const u8 = .{ | ||
| 180 | "s390x-linux-gnu", "s390x-unknown-linux-gnu", "s390x-ibm-linux-gnu", | ||
| 181 | "s390x-suse-linux", "s390x-redhat-linux", | ||
| 182 | }; | ||
| 183 | const target = tc.getTarget(); | ||
| 184 | if (target.os.tag == .illumos) { | ||
| 185 | // TODO | ||
| 186 | return; | ||
| 187 | } | ||
| 188 | if (target.abi.isAndroid()) { | ||
| 189 | const AArch64AndroidTriples: [1][]const u8 = .{"aarch64-linux-android"}; | ||
| 190 | const ARMAndroidTriples: [1][]const u8 = .{"arm-linux-androideabi"}; | ||
| 191 | const MIPSELAndroidTriples: [1][]const u8 = .{"mipsel-linux-android"}; | ||
| 192 | const MIPS64ELAndroidTriples: [1][]const u8 = .{"mips64el-linux-android"}; | ||
| 193 | const X86AndroidTriples: [1][]const u8 = .{"i686-linux-android"}; | ||
| 194 | const X86_64AndroidTriples: [1][]const u8 = .{"x86_64-linux-android"}; | ||
| 195 | |||
| 196 | switch (target.cpu.arch) { | ||
| 197 | .aarch64 => { | ||
| 198 | lib_dirs.appendSliceAssumeCapacity(&AArch64LibDirs); | ||
| 199 | triple_aliases.appendSliceAssumeCapacity(&AArch64AndroidTriples); | ||
| 200 | }, | ||
| 201 | .arm, | ||
| 202 | .thumb, | ||
| 203 | => { | ||
| 204 | lib_dirs.appendSliceAssumeCapacity(&ARMLibDirs); | ||
| 205 | triple_aliases.appendSliceAssumeCapacity(&ARMAndroidTriples); | ||
| 206 | }, | ||
| 207 | .mipsel => { | ||
| 208 | lib_dirs.appendSliceAssumeCapacity(&MIPSELLibDirs); | ||
| 209 | triple_aliases.appendSliceAssumeCapacity(&MIPSELAndroidTriples); | ||
| 210 | biarch_libdirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs); | ||
| 211 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPS64ELAndroidTriples); | ||
| 212 | }, | ||
| 213 | .mips64el => { | ||
| 214 | lib_dirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs); | ||
| 215 | triple_aliases.appendSliceAssumeCapacity(&MIPS64ELAndroidTriples); | ||
| 216 | biarch_libdirs.appendSliceAssumeCapacity(&MIPSELLibDirs); | ||
| 217 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSELAndroidTriples); | ||
| 218 | }, | ||
| 219 | .x86_64 => { | ||
| 220 | lib_dirs.appendSliceAssumeCapacity(&X86_64LibDirs); | ||
| 221 | triple_aliases.appendSliceAssumeCapacity(&X86_64AndroidTriples); | ||
| 222 | biarch_libdirs.appendSliceAssumeCapacity(&X86LibDirs); | ||
| 223 | biarch_triple_aliases.appendSliceAssumeCapacity(&X86AndroidTriples); | ||
| 224 | }, | ||
| 225 | .x86 => { | ||
| 226 | lib_dirs.appendSliceAssumeCapacity(&X86LibDirs); | ||
| 227 | triple_aliases.appendSliceAssumeCapacity(&X86AndroidTriples); | ||
| 228 | biarch_libdirs.appendSliceAssumeCapacity(&X86_64LibDirs); | ||
| 229 | biarch_triple_aliases.appendSliceAssumeCapacity(&X86_64AndroidTriples); | ||
| 230 | }, | ||
| 231 | else => {}, | ||
| 232 | } | ||
| 233 | return; | ||
| 234 | } | ||
| 235 | switch (target.cpu.arch) { | ||
| 236 | .aarch64 => { | ||
| 237 | lib_dirs.appendSliceAssumeCapacity(&AArch64LibDirs); | ||
| 238 | triple_aliases.appendSliceAssumeCapacity(&AArch64Triples); | ||
| 239 | biarch_libdirs.appendSliceAssumeCapacity(&AArch64LibDirs); | ||
| 240 | biarch_triple_aliases.appendSliceAssumeCapacity(&AArch64Triples); | ||
| 241 | }, | ||
| 242 | .aarch64_be => { | ||
| 243 | lib_dirs.appendSliceAssumeCapacity(&AArch64beLibDirs); | ||
| 244 | triple_aliases.appendSliceAssumeCapacity(&AArch64beTriples); | ||
| 245 | biarch_libdirs.appendSliceAssumeCapacity(&AArch64beLibDirs); | ||
| 246 | biarch_triple_aliases.appendSliceAssumeCapacity(&AArch64beTriples); | ||
| 247 | }, | ||
| 248 | .arm, .thumb => { | ||
| 249 | lib_dirs.appendSliceAssumeCapacity(&ARMLibDirs); | ||
| 250 | if (target.abi == .gnueabihf) { | ||
| 251 | triple_aliases.appendSliceAssumeCapacity(&ARMHFTriples); | ||
| 252 | } else { | ||
| 253 | triple_aliases.appendSliceAssumeCapacity(&ARMTriples); | ||
| 254 | } | ||
| 255 | }, | ||
| 256 | .armeb, .thumbeb => { | ||
| 257 | lib_dirs.appendSliceAssumeCapacity(&ARMebLibDirs); | ||
| 258 | if (target.abi == .gnueabihf) { | ||
| 259 | triple_aliases.appendSliceAssumeCapacity(&ARMebHFTriples); | ||
| 260 | } else { | ||
| 261 | triple_aliases.appendSliceAssumeCapacity(&ARMebTriples); | ||
| 262 | } | ||
| 263 | }, | ||
| 264 | .avr => { | ||
| 265 | lib_dirs.appendSliceAssumeCapacity(&AVRLibDirs); | ||
| 266 | triple_aliases.appendSliceAssumeCapacity(&AVRTriples); | ||
| 267 | }, | ||
| 268 | .csky => { | ||
| 269 | lib_dirs.appendSliceAssumeCapacity(&CSKYLibDirs); | ||
| 270 | triple_aliases.appendSliceAssumeCapacity(&CSKYTriples); | ||
| 271 | }, | ||
| 272 | .x86_64 => { | ||
| 273 | if (target.abi == .gnux32 or target.abi == .muslx32) { | ||
| 274 | lib_dirs.appendSliceAssumeCapacity(&X32LibDirs); | ||
| 275 | triple_aliases.appendSliceAssumeCapacity(&X32Triples); | ||
| 276 | biarch_libdirs.appendSliceAssumeCapacity(&X86_64LibDirs); | ||
| 277 | biarch_triple_aliases.appendSliceAssumeCapacity(&X86_64Triples); | ||
| 278 | } else { | ||
| 279 | lib_dirs.appendSliceAssumeCapacity(&X86_64LibDirs); | ||
| 280 | triple_aliases.appendSliceAssumeCapacity(&X86_64Triples); | ||
| 281 | biarch_libdirs.appendSliceAssumeCapacity(&X32LibDirs); | ||
| 282 | biarch_triple_aliases.appendSliceAssumeCapacity(&X32Triples); | ||
| 283 | } | ||
| 284 | biarch_libdirs.appendSliceAssumeCapacity(&X86LibDirs); | ||
| 285 | biarch_triple_aliases.appendSliceAssumeCapacity(&X86Triples); | ||
| 286 | }, | ||
| 287 | .x86 => { | ||
| 288 | lib_dirs.appendSliceAssumeCapacity(&X86LibDirs); | ||
| 289 | }, | ||
| 290 | .loongarch64 => { | ||
| 291 | lib_dirs.appendSliceAssumeCapacity(&LoongArch64LibDirs); | ||
| 292 | triple_aliases.appendSliceAssumeCapacity(&LoongArch64Triples); | ||
| 293 | }, | ||
| 294 | .m68k => { | ||
| 295 | lib_dirs.appendSliceAssumeCapacity(&M68kLibDirs); | ||
| 296 | triple_aliases.appendSliceAssumeCapacity(&M68kTriples); | ||
| 297 | }, | ||
| 298 | .mips => { | ||
| 299 | lib_dirs.appendSliceAssumeCapacity(&MIPSLibDirs); | ||
| 300 | triple_aliases.appendSliceAssumeCapacity(&MIPSTriples); | ||
| 301 | biarch_libdirs.appendSliceAssumeCapacity(&MIPS64LibDirs); | ||
| 302 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPS64Triples); | ||
| 303 | biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32LibDirs); | ||
| 304 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32Triples); | ||
| 305 | }, | ||
| 306 | .mipsel => { | ||
| 307 | lib_dirs.appendSliceAssumeCapacity(&MIPSELLibDirs); | ||
| 308 | triple_aliases.appendSliceAssumeCapacity(&MIPSELTriples); | ||
| 309 | triple_aliases.appendSliceAssumeCapacity(&MIPSTriples); | ||
| 310 | biarch_libdirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs); | ||
| 311 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPS64ELTriples); | ||
| 312 | biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32ELLibDirs); | ||
| 313 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32ELTriples); | ||
| 314 | }, | ||
| 315 | .mips64 => { | ||
| 316 | lib_dirs.appendSliceAssumeCapacity(&MIPS64LibDirs); | ||
| 317 | triple_aliases.appendSliceAssumeCapacity(&MIPS64Triples); | ||
| 318 | biarch_libdirs.appendSliceAssumeCapacity(&MIPSLibDirs); | ||
| 319 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSTriples); | ||
| 320 | biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32LibDirs); | ||
| 321 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32Triples); | ||
| 322 | }, | ||
| 323 | .mips64el => { | ||
| 324 | lib_dirs.appendSliceAssumeCapacity(&MIPS64ELLibDirs); | ||
| 325 | triple_aliases.appendSliceAssumeCapacity(&MIPS64ELTriples); | ||
| 326 | biarch_libdirs.appendSliceAssumeCapacity(&MIPSELLibDirs); | ||
| 327 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSELTriples); | ||
| 328 | biarch_libdirs.appendSliceAssumeCapacity(&MIPSN32ELLibDirs); | ||
| 329 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSN32ELTriples); | ||
| 330 | biarch_triple_aliases.appendSliceAssumeCapacity(&MIPSTriples); | ||
| 331 | }, | ||
| 332 | .msp430 => { | ||
| 333 | lib_dirs.appendSliceAssumeCapacity(&MSP430LibDirs); | ||
| 334 | triple_aliases.appendSliceAssumeCapacity(&MSP430Triples); | ||
| 335 | }, | ||
| 336 | .powerpc => { | ||
| 337 | lib_dirs.appendSliceAssumeCapacity(&PPCLibDirs); | ||
| 338 | triple_aliases.appendSliceAssumeCapacity(&PPCTriples); | ||
| 339 | biarch_libdirs.appendSliceAssumeCapacity(&PPC64LibDirs); | ||
| 340 | biarch_triple_aliases.appendSliceAssumeCapacity(&PPC64Triples); | ||
| 341 | }, | ||
| 342 | .powerpcle => { | ||
| 343 | lib_dirs.appendSliceAssumeCapacity(&PPCLELibDirs); | ||
| 344 | triple_aliases.appendSliceAssumeCapacity(&PPCLETriples); | ||
| 345 | biarch_libdirs.appendSliceAssumeCapacity(&PPC64LELibDirs); | ||
| 346 | biarch_triple_aliases.appendSliceAssumeCapacity(&PPC64LETriples); | ||
| 347 | }, | ||
| 348 | .powerpc64 => { | ||
| 349 | lib_dirs.appendSliceAssumeCapacity(&PPC64LibDirs); | ||
| 350 | triple_aliases.appendSliceAssumeCapacity(&PPC64Triples); | ||
| 351 | biarch_libdirs.appendSliceAssumeCapacity(&PPCLibDirs); | ||
| 352 | biarch_triple_aliases.appendSliceAssumeCapacity(&PPCTriples); | ||
| 353 | }, | ||
| 354 | .powerpc64le => { | ||
| 355 | lib_dirs.appendSliceAssumeCapacity(&PPC64LELibDirs); | ||
| 356 | triple_aliases.appendSliceAssumeCapacity(&PPC64LETriples); | ||
| 357 | biarch_libdirs.appendSliceAssumeCapacity(&PPCLELibDirs); | ||
| 358 | biarch_triple_aliases.appendSliceAssumeCapacity(&PPCLETriples); | ||
| 359 | }, | ||
| 360 | .riscv32 => { | ||
| 361 | lib_dirs.appendSliceAssumeCapacity(&RISCV32LibDirs); | ||
| 362 | triple_aliases.appendSliceAssumeCapacity(&RISCV32Triples); | ||
| 363 | biarch_libdirs.appendSliceAssumeCapacity(&RISCV64LibDirs); | ||
| 364 | biarch_triple_aliases.appendSliceAssumeCapacity(&RISCV64Triples); | ||
| 365 | }, | ||
| 366 | .riscv64 => { | ||
| 367 | lib_dirs.appendSliceAssumeCapacity(&RISCV64LibDirs); | ||
| 368 | triple_aliases.appendSliceAssumeCapacity(&RISCV64Triples); | ||
| 369 | biarch_libdirs.appendSliceAssumeCapacity(&RISCV32LibDirs); | ||
| 370 | biarch_triple_aliases.appendSliceAssumeCapacity(&RISCV32Triples); | ||
| 371 | }, | ||
| 372 | .sparc => { | ||
| 373 | lib_dirs.appendSliceAssumeCapacity(&SPARCv8LibDirs); | ||
| 374 | triple_aliases.appendSliceAssumeCapacity(&SPARCv8Triples); | ||
| 375 | biarch_libdirs.appendSliceAssumeCapacity(&SPARCv9LibDirs); | ||
| 376 | biarch_triple_aliases.appendSliceAssumeCapacity(&SPARCv9Triples); | ||
| 377 | }, | ||
| 378 | .sparc64 => { | ||
| 379 | lib_dirs.appendSliceAssumeCapacity(&SPARCv9LibDirs); | ||
| 380 | triple_aliases.appendSliceAssumeCapacity(&SPARCv9Triples); | ||
| 381 | biarch_libdirs.appendSliceAssumeCapacity(&SPARCv8LibDirs); | ||
| 382 | biarch_triple_aliases.appendSliceAssumeCapacity(&SPARCv8Triples); | ||
| 383 | }, | ||
| 384 | .s390x => { | ||
| 385 | lib_dirs.appendSliceAssumeCapacity(&SystemZLibDirs); | ||
| 386 | triple_aliases.appendSliceAssumeCapacity(&SystemZTriples); | ||
| 387 | }, | ||
| 388 | else => {}, | ||
| 389 | } | ||
| 390 | } | ||
| 391 | |||
| 392 | pub fn discover(self: *GCCDetector, tc: *Toolchain) !void { | ||
| 393 | var path_buf: [std.fs.max_path_bytes]u8 = undefined; | ||
| 394 | var fib = std.heap.FixedBufferAllocator.init(&path_buf); | ||
| 395 | |||
| 396 | const target = tc.getTarget(); | ||
| 397 | const biarch_variant_target = if (target.ptrBitWidth() == 32) | ||
| 398 | target.get64BitArchVariant() | ||
| 399 | else | ||
| 400 | target.get32BitArchVariant(); | ||
| 401 | |||
| 402 | var candidate_lib_dirs_buffer: [16][]const u8 = undefined; | ||
| 403 | var candidate_lib_dirs = std.ArrayList([]const u8).initBuffer(&candidate_lib_dirs_buffer); | ||
| 404 | |||
| 405 | var candidate_triple_aliases_buffer: [16][]const u8 = undefined; | ||
| 406 | var candidate_triple_aliases = std.ArrayList([]const u8).initBuffer(&candidate_triple_aliases_buffer); | ||
| 407 | |||
| 408 | var candidate_biarch_lib_dirs_buffer: [16][]const u8 = undefined; | ||
| 409 | var candidate_biarch_lib_dirs = std.ArrayList([]const u8).initBuffer(&candidate_biarch_lib_dirs_buffer); | ||
| 410 | |||
| 411 | var candidate_biarch_triple_aliases_buffer: [20][]const u8 = undefined; | ||
| 412 | var candidate_biarch_triple_aliases = std.ArrayList([]const u8).initBuffer(&candidate_biarch_triple_aliases_buffer); | ||
| 413 | |||
| 414 | try collectLibDirsAndTriples( | ||
| 415 | tc, | ||
| 416 | &candidate_lib_dirs, | ||
| 417 | &candidate_triple_aliases, | ||
| 418 | &candidate_biarch_lib_dirs, | ||
| 419 | &candidate_biarch_triple_aliases, | ||
| 420 | ); | ||
| 421 | |||
| 422 | var target_buf: [64]u8 = undefined; | ||
| 423 | const triple_str = target.toLLVMTriple(&target_buf); | ||
| 424 | candidate_triple_aliases.appendAssumeCapacity(triple_str); | ||
| 425 | |||
| 426 | // Also include the multiarch variant if it's different. | ||
| 427 | var biarch_buf: [64]u8 = undefined; | ||
| 428 | if (biarch_variant_target) |*biarch_target| { | ||
| 429 | const biarch_triple_str = biarch_target.toLLVMTriple(&biarch_buf); | ||
| 430 | if (!std.mem.eql(u8, biarch_triple_str, triple_str)) { | ||
| 431 | candidate_triple_aliases.appendAssumeCapacity(biarch_triple_str); | ||
| 432 | } | ||
| 433 | } | ||
| 434 | |||
| 435 | var prefixes_buf: [16][]const u8 = undefined; | ||
| 436 | var prefixes = std.ArrayList([]const u8).initBuffer(&prefixes_buf); | ||
| 437 | const gcc_toolchain_dir = gccToolchainDir(tc); | ||
| 438 | if (gcc_toolchain_dir.len != 0) { | ||
| 439 | const adjusted = if (gcc_toolchain_dir[gcc_toolchain_dir.len - 1] == '/') | ||
| 440 | gcc_toolchain_dir[0 .. gcc_toolchain_dir.len - 1] | ||
| 441 | else | ||
| 442 | gcc_toolchain_dir; | ||
| 443 | prefixes.appendAssumeCapacity(adjusted); | ||
| 444 | } else { | ||
| 445 | const sysroot = tc.getSysroot(); | ||
| 446 | if (sysroot.len > 0) { | ||
| 447 | prefixes.appendAssumeCapacity(sysroot); | ||
| 448 | try addDefaultGCCPrefixes(&prefixes, tc); | ||
| 449 | } | ||
| 450 | |||
| 451 | if (sysroot.len == 0) { | ||
| 452 | try addDefaultGCCPrefixes(&prefixes, tc); | ||
| 453 | } | ||
| 454 | // TODO: Special-case handling for Gentoo | ||
| 455 | } | ||
| 456 | |||
| 457 | const v0 = GCCVersion.parse("0.0.0"); | ||
| 458 | for (prefixes.items) |prefix| { | ||
| 459 | if (!tc.exists(prefix)) continue; | ||
| 460 | |||
| 461 | for (candidate_lib_dirs.items) |suffix| { | ||
| 462 | defer fib.reset(); | ||
| 463 | const lib_dir = std.fs.path.join(fib.allocator(), &.{ prefix, suffix }) catch continue; | ||
| 464 | if (!tc.exists(lib_dir)) continue; | ||
| 465 | |||
| 466 | const gcc_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc" }); | ||
| 467 | const gcc_cross_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc-cross" }); | ||
| 468 | |||
| 469 | try self.scanLibDirForGCCTriple(tc, target, lib_dir, triple_str, false, gcc_dir_exists, gcc_cross_dir_exists); | ||
| 470 | for (candidate_triple_aliases.items) |candidate| { | ||
| 471 | try self.scanLibDirForGCCTriple(tc, target, lib_dir, candidate, false, gcc_dir_exists, gcc_cross_dir_exists); | ||
| 472 | } | ||
| 473 | } | ||
| 474 | for (candidate_biarch_lib_dirs.items) |suffix| { | ||
| 475 | const lib_dir = std.fs.path.join(fib.allocator(), &.{ prefix, suffix }) catch continue; | ||
| 476 | if (!tc.exists(lib_dir)) continue; | ||
| 477 | |||
| 478 | const gcc_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc" }); | ||
| 479 | const gcc_cross_dir_exists = tc.joinedExists(&.{ lib_dir, "/gcc-cross" }); | ||
| 480 | for (candidate_biarch_triple_aliases.items) |candidate| { | ||
| 481 | try self.scanLibDirForGCCTriple(tc, target, lib_dir, candidate, true, gcc_dir_exists, gcc_cross_dir_exists); | ||
| 482 | } | ||
| 483 | } | ||
| 484 | if (self.version.order(v0) == .gt) break; | ||
| 485 | } | ||
| 486 | } | ||
| 487 | |||
| 488 | fn findBiarchMultilibs( | ||
| 489 | tc: *const Toolchain, | ||
| 490 | result: *Multilib.Detected, | ||
| 491 | target: *const Target, | ||
| 492 | path: [2][]const u8, | ||
| 493 | needs_biarch_suffix: bool, | ||
| 494 | ) !bool { | ||
| 495 | const suff64 = if (target.os.tag == .illumos) switch (target.cpu.arch) { | ||
| 496 | .x86, .x86_64 => "/amd64", | ||
| 497 | .sparc => "/sparcv9", | ||
| 498 | else => "/64", | ||
| 499 | } else "/64"; | ||
| 500 | |||
| 501 | const alt_64 = Multilib.init(suff64, suff64, &.{ "-m32", "+m64", "-mx32" }); | ||
| 502 | const alt_32 = Multilib.init("/32", "/32", &.{ "+m32", "-m64", "-mx32" }); | ||
| 503 | const alt_x32 = Multilib.init("/x32", "/x32", &.{ "-m32", "-m64", "+mx32" }); | ||
| 504 | |||
| 505 | const multilib_filter = Multilib.Filter{ | ||
| 506 | .base = path, | ||
| 507 | .file = "crtbegin.o", | ||
| 508 | }; | ||
| 509 | |||
| 510 | const Want = enum { | ||
| 511 | want32, | ||
| 512 | want64, | ||
| 513 | wantx32, | ||
| 514 | }; | ||
| 515 | const is_x32 = target.abi == .gnux32 or target.abi == .muslx32; | ||
| 516 | const target_ptr_width = target.ptrBitWidth(); | ||
| 517 | const want: Want = if (target_ptr_width == 32 and multilib_filter.exists(alt_32, tc)) | ||
| 518 | .want64 | ||
| 519 | else if (target_ptr_width == 64 and is_x32 and multilib_filter.exists(alt_x32, tc)) | ||
| 520 | .want64 | ||
| 521 | else if (target_ptr_width == 64 and !is_x32 and multilib_filter.exists(alt_64, tc)) | ||
| 522 | .want32 | ||
| 523 | else if (target_ptr_width == 32) | ||
| 524 | if (needs_biarch_suffix) .want64 else .want32 | ||
| 525 | else if (is_x32) | ||
| 526 | if (needs_biarch_suffix) .want64 else .wantx32 | ||
| 527 | else if (needs_biarch_suffix) .want32 else .want64; | ||
| 528 | |||
| 529 | const default = switch (want) { | ||
| 530 | .want32 => Multilib.init("", "", &.{ "+m32", "-m64", "-mx32" }), | ||
| 531 | .want64 => Multilib.init("", "", &.{ "-m32", "+m64", "-mx32" }), | ||
| 532 | .wantx32 => Multilib.init("", "", &.{ "-m32", "-m64", "+mx32" }), | ||
| 533 | }; | ||
| 534 | result.multilib_buf[result.multilib_count..][0..4].* = .{ | ||
| 535 | default, | ||
| 536 | alt_64, | ||
| 537 | alt_32, | ||
| 538 | alt_x32, | ||
| 539 | }; | ||
| 540 | result.multilib_count += 4; | ||
| 541 | |||
| 542 | result.filter(multilib_filter, tc); | ||
| 543 | return result.select(&.{ | ||
| 544 | if (target_ptr_width == 64 and !is_x32) "+m64" else "-m64", | ||
| 545 | if (target_ptr_width == 32) "+m32" else "-m32", | ||
| 546 | if (target_ptr_width == 64 and is_x32) "+mx32" else "-mx32", | ||
| 547 | }); | ||
| 548 | } | ||
| 549 | |||
| 550 | fn scanGCCForMultilibs( | ||
| 551 | self: *GCCDetector, | ||
| 552 | tc: *const Toolchain, | ||
| 553 | target: *const Target, | ||
| 554 | path: [2][]const u8, | ||
| 555 | needs_biarch_suffix: bool, | ||
| 556 | ) !bool { | ||
| 557 | var detected: Multilib.Detected = .{}; | ||
| 558 | if (target.cpu.arch == .csky) { | ||
| 559 | // TODO | ||
| 560 | } else if (target.cpu.arch.isMIPS()) { | ||
| 561 | // TODO | ||
| 562 | } else if (target.cpu.arch.isRISCV()) { | ||
| 563 | // TODO | ||
| 564 | } else if (target.cpu.arch == .msp430) { | ||
| 565 | // TODO | ||
| 566 | } else if (target.cpu.arch == .avr) { | ||
| 567 | // No multilibs | ||
| 568 | } else if (!try findBiarchMultilibs(tc, &detected, target, path, needs_biarch_suffix)) { | ||
| 569 | return false; | ||
| 570 | } | ||
| 571 | self.selected = detected.selected; | ||
| 572 | self.biarch_sibling = detected.biarch_sibling; | ||
| 573 | return true; | ||
| 574 | } | ||
| 575 | |||
| 576 | fn scanLibDirForGCCTriple( | ||
| 577 | self: *GCCDetector, | ||
| 578 | tc: *const Toolchain, | ||
| 579 | target: *const Target, | ||
| 580 | lib_dir: []const u8, | ||
| 581 | candidate_triple: []const u8, | ||
| 582 | needs_biarch_suffix: bool, | ||
| 583 | gcc_dir_exists: bool, | ||
| 584 | gcc_cross_dir_exists: bool, | ||
| 585 | ) !void { | ||
| 586 | var path_buf: [std.fs.max_path_bytes]u8 = undefined; | ||
| 587 | var fib = std.heap.FixedBufferAllocator.init(&path_buf); | ||
| 588 | const comp = tc.driver.comp; | ||
| 589 | const arena = comp.arena; | ||
| 590 | const io = comp.io; | ||
| 591 | for (0..2) |i| { | ||
| 592 | if (i == 0 and !gcc_dir_exists) continue; | ||
| 593 | if (i == 1 and !gcc_cross_dir_exists) continue; | ||
| 594 | defer fib.reset(); | ||
| 595 | |||
| 596 | const base: []const u8 = if (i == 0) "gcc" else "gcc-cross"; | ||
| 597 | var lib_suffix_buf: [64]u8 = undefined; | ||
| 598 | var suffix_buf_fib = std.heap.FixedBufferAllocator.init(&lib_suffix_buf); | ||
| 599 | const lib_suffix = std.fs.path.join(suffix_buf_fib.allocator(), &.{ base, candidate_triple }) catch continue; | ||
| 600 | |||
| 601 | const dir_name = std.fs.path.join(fib.allocator(), &.{ lib_dir, lib_suffix }) catch continue; | ||
| 602 | var parent_dir = comp.cwd.openDir(io, dir_name, .{ .access_sub_paths = false, .iterate = true }) catch continue; | ||
| 603 | defer parent_dir.close(io); | ||
| 604 | |||
| 605 | var it = parent_dir.iterate(); | ||
| 606 | while (it.next(io) catch continue) |entry| { | ||
| 607 | if (entry.kind != .directory) continue; | ||
| 608 | |||
| 609 | const version_text = entry.name; | ||
| 610 | const candidate_version = GCCVersion.parse(version_text); | ||
| 611 | if (candidate_version.major != -1) { | ||
| 612 | // TODO: cache path so we're not repeatedly scanning | ||
| 613 | } | ||
| 614 | if (candidate_version.isLessThan(4, 1, 1, "")) continue; | ||
| 615 | switch (candidate_version.order(self.version)) { | ||
| 616 | .lt, .eq => continue, | ||
| 617 | .gt => {}, | ||
| 618 | } | ||
| 619 | |||
| 620 | if (!try self.scanGCCForMultilibs(tc, target, .{ dir_name, version_text }, needs_biarch_suffix)) continue; | ||
| 621 | |||
| 622 | self.version = candidate_version; | ||
| 623 | self.gcc_triple = try arena.dupe(u8, candidate_triple); | ||
| 624 | self.install_path = try std.fs.path.join(arena, &.{ lib_dir, lib_suffix, version_text }); | ||
| 625 | self.parent_lib_path = try std.fs.path.join(arena, &.{ self.install_path, "..", "..", ".." }); | ||
| 626 | self.is_valid = true; | ||
| 627 | } | ||
| 628 | } | ||
| 629 | } | ||
| 630 | |||
| 631 | fn gccToolchainDir(tc: *const Toolchain) []const u8 { | ||
| 632 | const sysroot = tc.getSysroot(); | ||
| 633 | if (sysroot.len != 0) return ""; | ||
| 634 | return system_defaults.gcc_install_prefix; | ||
| 635 | } | ||
lib/compiler/aro/aro/LangOpts.zig+12-2| ... | @@ -7,16 +7,22 @@ pub const Compiler = enum { | ... | @@ -7,16 +7,22 @@ pub const Compiler = enum { |
| 7 | clang, | 7 | clang, |
| 8 | gcc, | 8 | gcc, |
| 9 | msvc, | 9 | msvc, |
| 10 | no, | ||
| 10 | 11 | ||
| 11 | pub fn defaultGccVersion(self: Compiler) u32 { | 12 | pub fn defaultGccVersion(self: Compiler) u32 { |
| 12 | return switch (self) { | 13 | return switch (self) { |
| 13 | .clang => 4 * 10_000 + 2 * 100 + 1, | 14 | .clang => 4 * 10_000 + 2 * 100 + 1, |
| 14 | .gcc => 7 * 10_000 + 1 * 100 + 0, | 15 | .no, .gcc => 7 * 10_000 + 1 * 100 + 0, |
| 15 | .msvc => 0, | 16 | .msvc => 0, |
| 16 | }; | 17 | }; |
| 17 | } | 18 | } |
| 18 | }; | 19 | }; |
| 19 | 20 | ||
| 21 | pub const BoundsSafety = enum { | ||
| 22 | none, | ||
| 23 | clang, | ||
| 24 | }; | ||
| 25 | |||
| 20 | /// The floating-point evaluation method for intermediate results within a single expression | 26 | /// The floating-point evaluation method for intermediate results within a single expression |
| 21 | pub const FPEvalMethod = enum(i8) { | 27 | pub const FPEvalMethod = enum(i8) { |
| 22 | /// The evaluation method cannot be determined or is inconsistent for this target. | 28 | /// The evaluation method cannot be determined or is inconsistent for this target. |
| ... | @@ -116,7 +122,7 @@ pub const Standard = enum { | ... | @@ -116,7 +122,7 @@ pub const Standard = enum { |
| 116 | 122 | ||
| 117 | const LangOpts = @This(); | 123 | const LangOpts = @This(); |
| 118 | 124 | ||
| 119 | emulate: Compiler = .clang, | 125 | emulate: Compiler = .no, |
| 120 | standard: Standard = .default, | 126 | standard: Standard = .default, |
| 121 | /// -fshort-enums option, makes enums only take up as much space as they need to hold all the values. | 127 | /// -fshort-enums option, makes enums only take up as much space as they need to hold all the values. |
| 122 | short_enums: bool = false, | 128 | short_enums: bool = false, |
| ... | @@ -149,6 +155,10 @@ preserve_comments_in_macros: bool = false, | ... | @@ -149,6 +155,10 @@ preserve_comments_in_macros: bool = false, |
| 149 | /// e.g. 4.2.1 == 40201 | 155 | /// e.g. 4.2.1 == 40201 |
| 150 | gnuc_version: ?u32 = null, | 156 | gnuc_version: ?u32 = null, |
| 151 | 157 | ||
| 158 | bounds_safety: BoundsSafety = .none, | ||
| 159 | |||
| 160 | default_symbol_visibility: std.builtin.SymbolVisibility = .default, | ||
| 161 | |||
| 152 | pub fn setStandard(self: *LangOpts, name: []const u8) error{InvalidStandard}!void { | 162 | pub fn setStandard(self: *LangOpts, name: []const u8) error{InvalidStandard}!void { |
| 153 | self.standard = Standard.NameMap.get(name) orelse return error.InvalidStandard; | 163 | self.standard = Standard.NameMap.get(name) orelse return error.InvalidStandard; |
| 154 | } | 164 | } |
lib/compiler/aro/aro/Parser.zig+336-142| ... | @@ -1,5 +1,4 @@ | ... | @@ -1,5 +1,4 @@ |
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const Io = std.Io; | ||
| 3 | const mem = std.mem; | 2 | const mem = std.mem; |
| 4 | const Allocator = mem.Allocator; | 3 | const Allocator = mem.Allocator; |
| 5 | const assert = std.debug.assert; | 4 | const assert = std.debug.assert; |
| ... | @@ -204,6 +203,11 @@ string_ids: struct { | ... | @@ -204,6 +203,11 @@ string_ids: struct { |
| 204 | sigjmp_buf: StringId, | 203 | sigjmp_buf: StringId, |
| 205 | ucontext_t: StringId, | 204 | ucontext_t: StringId, |
| 206 | }, | 205 | }, |
| 206 | va_arg_pack_ctx: packed struct { | ||
| 207 | valid: bool = false, | ||
| 208 | variadic: bool = false, | ||
| 209 | typed: bool = false, | ||
| 210 | } = .{}, | ||
| 207 | 211 | ||
| 208 | /// Checks codepoint for various pedantic warnings | 212 | /// Checks codepoint for various pedantic warnings |
| 209 | /// Returns true if diagnostic issued | 213 | /// Returns true if diagnostic issued |
| ... | @@ -212,7 +216,7 @@ fn checkIdentifierCodepointWarnings(p: *Parser, codepoint: u21, loc: Source.Loca | ... | @@ -212,7 +216,7 @@ fn checkIdentifierCodepointWarnings(p: *Parser, codepoint: u21, loc: Source.Loca |
| 212 | 216 | ||
| 213 | const prev_total = p.diagnostics.total; | 217 | const prev_total = p.diagnostics.total; |
| 214 | var sf = std.heap.stackFallback(1024, p.comp.gpa); | 218 | var sf = std.heap.stackFallback(1024, p.comp.gpa); |
| 215 | var allocating: Io.Writer.Allocating = .init(sf.get()); | 219 | var allocating: std.Io.Writer.Allocating = .init(sf.get()); |
| 216 | defer allocating.deinit(); | 220 | defer allocating.deinit(); |
| 217 | 221 | ||
| 218 | if (!char_info.isC99IdChar(codepoint)) { | 222 | if (!char_info.isC99IdChar(codepoint)) { |
| ... | @@ -426,7 +430,7 @@ pub fn err(p: *Parser, tok_i: TokenIndex, diagnostic: Diagnostic, args: anytype) | ... | @@ -426,7 +430,7 @@ pub fn err(p: *Parser, tok_i: TokenIndex, diagnostic: Diagnostic, args: anytype) |
| 426 | if (p.diagnostics.effectiveKind(diagnostic) == .off) return; | 430 | if (p.diagnostics.effectiveKind(diagnostic) == .off) return; |
| 427 | 431 | ||
| 428 | var sf = std.heap.stackFallback(1024, p.comp.gpa); | 432 | var sf = std.heap.stackFallback(1024, p.comp.gpa); |
| 429 | var allocating: Io.Writer.Allocating = .init(sf.get()); | 433 | var allocating: std.Io.Writer.Allocating = .init(sf.get()); |
| 430 | defer allocating.deinit(); | 434 | defer allocating.deinit(); |
| 431 | 435 | ||
| 432 | p.formatArgs(&allocating.writer, diagnostic.fmt, args) catch return error.OutOfMemory; | 436 | 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) | ... | @@ -448,7 +452,7 @@ pub fn err(p: *Parser, tok_i: TokenIndex, diagnostic: Diagnostic, args: anytype) |
| 448 | }, p.pp.expansionSlice(tok_i), true); | 452 | }, p.pp.expansionSlice(tok_i), true); |
| 449 | } | 453 | } |
| 450 | 454 | ||
| 451 | fn formatArgs(p: *Parser, w: *Io.Writer, fmt: []const u8, args: anytype) !void { | 455 | fn formatArgs(p: *Parser, w: *std.Io.Writer, fmt: []const u8, args: anytype) !void { |
| 452 | var i: usize = 0; | 456 | var i: usize = 0; |
| 453 | inline for (std.meta.fields(@TypeOf(args))) |arg_info| { | 457 | inline for (std.meta.fields(@TypeOf(args))) |arg_info| { |
| 454 | const arg = @field(args, arg_info.name); | 458 | const arg = @field(args, arg_info.name); |
| ... | @@ -477,13 +481,13 @@ fn formatArgs(p: *Parser, w: *Io.Writer, fmt: []const u8, args: anytype) !void { | ... | @@ -477,13 +481,13 @@ fn formatArgs(p: *Parser, w: *Io.Writer, fmt: []const u8, args: anytype) !void { |
| 477 | try w.writeAll(fmt[i..]); | 481 | try w.writeAll(fmt[i..]); |
| 478 | } | 482 | } |
| 479 | 483 | ||
| 480 | fn formatTokenId(w: *Io.Writer, fmt: []const u8, tok_id: Tree.Token.Id) !usize { | 484 | fn formatTokenId(w: *std.Io.Writer, fmt: []const u8, tok_id: Tree.Token.Id) !usize { |
| 481 | const i = Diagnostics.templateIndex(w, fmt, "{tok_id}"); | 485 | const i = Diagnostics.templateIndex(w, fmt, "{tok_id}"); |
| 482 | try w.writeAll(tok_id.symbol()); | 486 | try w.writeAll(tok_id.symbol()); |
| 483 | return i; | 487 | return i; |
| 484 | } | 488 | } |
| 485 | 489 | ||
| 486 | fn formatQualType(p: *Parser, w: *Io.Writer, fmt: []const u8, qt: QualType) !usize { | 490 | fn formatQualType(p: *Parser, w: *std.Io.Writer, fmt: []const u8, qt: QualType) !usize { |
| 487 | const i = Diagnostics.templateIndex(w, fmt, "{qt}"); | 491 | const i = Diagnostics.templateIndex(w, fmt, "{qt}"); |
| 488 | try w.writeByte('\''); | 492 | try w.writeByte('\''); |
| 489 | try qt.print(p.comp, w); | 493 | try qt.print(p.comp, w); |
| ... | @@ -502,7 +506,7 @@ fn formatQualType(p: *Parser, w: *Io.Writer, fmt: []const u8, qt: QualType) !usi | ... | @@ -502,7 +506,7 @@ fn formatQualType(p: *Parser, w: *Io.Writer, fmt: []const u8, qt: QualType) !usi |
| 502 | return i; | 506 | return i; |
| 503 | } | 507 | } |
| 504 | 508 | ||
| 505 | fn formatResult(p: *Parser, w: *Io.Writer, fmt: []const u8, res: Result) !usize { | 509 | fn formatResult(p: *Parser, w: *std.Io.Writer, fmt: []const u8, res: Result) !usize { |
| 506 | const i = Diagnostics.templateIndex(w, fmt, "{value}"); | 510 | const i = Diagnostics.templateIndex(w, fmt, "{value}"); |
| 507 | switch (res.val.opt_ref) { | 511 | switch (res.val.opt_ref) { |
| 508 | .none => try w.writeAll("(none)"), | 512 | .none => try w.writeAll("(none)"), |
| ... | @@ -525,7 +529,7 @@ const Normalized = struct { | ... | @@ -525,7 +529,7 @@ const Normalized = struct { |
| 525 | return .{ .str = str }; | 529 | return .{ .str = str }; |
| 526 | } | 530 | } |
| 527 | 531 | ||
| 528 | pub fn format(ctx: Normalized, w: *Io.Writer, fmt: []const u8) !usize { | 532 | pub fn format(ctx: Normalized, w: *std.Io.Writer, fmt: []const u8) !usize { |
| 529 | const i = Diagnostics.templateIndex(w, fmt, "{normalized}"); | 533 | const i = Diagnostics.templateIndex(w, fmt, "{normalized}"); |
| 530 | var it: std.unicode.Utf8Iterator = .{ | 534 | var it: std.unicode.Utf8Iterator = .{ |
| 531 | .bytes = ctx.str, | 535 | .bytes = ctx.str, |
| ... | @@ -559,7 +563,7 @@ const Codepoint = struct { | ... | @@ -559,7 +563,7 @@ const Codepoint = struct { |
| 559 | return .{ .codepoint = codepoint }; | 563 | return .{ .codepoint = codepoint }; |
| 560 | } | 564 | } |
| 561 | 565 | ||
| 562 | pub fn format(ctx: Codepoint, w: *Io.Writer, fmt: []const u8) !usize { | 566 | pub fn format(ctx: Codepoint, w: *std.Io.Writer, fmt: []const u8) !usize { |
| 563 | const i = Diagnostics.templateIndex(w, fmt, "{codepoint}"); | 567 | const i = Diagnostics.templateIndex(w, fmt, "{codepoint}"); |
| 564 | try w.print("{X:0>4}", .{ctx.codepoint}); | 568 | try w.print("{X:0>4}", .{ctx.codepoint}); |
| 565 | return i; | 569 | return i; |
| ... | @@ -573,7 +577,7 @@ const Escaped = struct { | ... | @@ -573,7 +577,7 @@ const Escaped = struct { |
| 573 | return .{ .str = str }; | 577 | return .{ .str = str }; |
| 574 | } | 578 | } |
| 575 | 579 | ||
| 576 | pub fn format(ctx: Escaped, w: *Io.Writer, fmt: []const u8) !usize { | 580 | pub fn format(ctx: Escaped, w: *std.Io.Writer, fmt: []const u8) !usize { |
| 577 | const i = Diagnostics.templateIndex(w, fmt, "{s}"); | 581 | const i = Diagnostics.templateIndex(w, fmt, "{s}"); |
| 578 | try std.zig.stringEscape(ctx.str, w); | 582 | try std.zig.stringEscape(ctx.str, w); |
| 579 | return i; | 583 | return i; |
| ... | @@ -740,6 +744,11 @@ fn getNode(p: *Parser, node: Node.Index, comptime tag: std.meta.Tag(Tree.Node)) | ... | @@ -740,6 +744,11 @@ fn getNode(p: *Parser, node: Node.Index, comptime tag: std.meta.Tag(Tree.Node)) |
| 740 | } | 744 | } |
| 741 | } | 745 | } |
| 742 | 746 | ||
| 747 | pub fn isAddressOfStringLiteral(p: *Parser, node: Node.Index) bool { | ||
| 748 | const addr_of = p.getNode(node, .addr_of_expr) orelse return false; | ||
| 749 | return p.nodeIs(addr_of.operand, .string_literal_expr); | ||
| 750 | } | ||
| 751 | |||
| 743 | fn pragma(p: *Parser) Compilation.Error!bool { | 752 | fn pragma(p: *Parser) Compilation.Error!bool { |
| 744 | var found_pragma = false; | 753 | var found_pragma = false; |
| 745 | while (p.eatToken(.keyword_pragma)) |_| { | 754 | while (p.eatToken(.keyword_pragma)) |_| { |
| ... | @@ -1070,14 +1079,15 @@ fn decl(p: *Parser) Error!bool { | ... | @@ -1070,14 +1079,15 @@ fn decl(p: *Parser) Error!bool { |
| 1070 | 1079 | ||
| 1071 | try p.attributeSpecifier(); | 1080 | try p.attributeSpecifier(); |
| 1072 | 1081 | ||
| 1082 | const decl_spec_start = p.tok_i; | ||
| 1073 | var decl_spec = (try p.declSpec()) orelse blk: { | 1083 | var decl_spec = (try p.declSpec()) orelse blk: { |
| 1074 | if (p.func.qt != null) { | 1084 | if (p.func.qt != null) { |
| 1075 | p.tok_i = first_tok; | 1085 | p.tok_i = first_tok; |
| 1076 | return false; | 1086 | return false; |
| 1077 | } | 1087 | } |
| 1078 | switch (p.tok_ids[first_tok]) { | 1088 | switch (p.tok_ids[decl_spec_start]) { |
| 1079 | .asterisk, .l_paren => {}, | 1089 | .asterisk, .l_paren => {}, |
| 1080 | .identifier, .extended_identifier => switch (p.tok_ids[first_tok + 1]) { | 1090 | .identifier, .extended_identifier => switch (p.tok_ids[decl_spec_start + 1]) { |
| 1081 | .identifier, .extended_identifier => { | 1091 | .identifier, .extended_identifier => { |
| 1082 | // The most likely reason for `identifier identifier` is | 1092 | // The most likely reason for `identifier identifier` is |
| 1083 | // an unknown type name. | 1093 | // an unknown type name. |
| ... | @@ -1087,7 +1097,7 @@ fn decl(p: *Parser) Error!bool { | ... | @@ -1087,7 +1097,7 @@ fn decl(p: *Parser) Error!bool { |
| 1087 | }, | 1097 | }, |
| 1088 | else => {}, | 1098 | else => {}, |
| 1089 | }, | 1099 | }, |
| 1090 | else => if (p.tok_i != first_tok) { | 1100 | else => if (p.tok_i != decl_spec_start) { |
| 1091 | try p.err(p.tok_i, .expected_ident_or_l_paren, .{}); | 1101 | try p.err(p.tok_i, .expected_ident_or_l_paren, .{}); |
| 1092 | return error.ParsingFailed; | 1102 | return error.ParsingFailed; |
| 1093 | } else return false, | 1103 | } else return false, |
| ... | @@ -1167,6 +1177,7 @@ fn decl(p: *Parser) Error!bool { | ... | @@ -1167,6 +1177,7 @@ fn decl(p: *Parser) Error!bool { |
| 1167 | 1177 | ||
| 1168 | // Collect old style parameter declarations. | 1178 | // Collect old style parameter declarations. |
| 1169 | if (init_d.d.old_style_func != null) { | 1179 | if (init_d.d.old_style_func != null) { |
| 1180 | try p.err(init_d.d.name, .def_no_proto_deprecated, .{}); | ||
| 1170 | const param_buf_top = p.param_buf.items.len; | 1181 | const param_buf_top = p.param_buf.items.len; |
| 1171 | defer p.param_buf.items.len = param_buf_top; | 1182 | defer p.param_buf.items.len = param_buf_top; |
| 1172 | 1183 | ||
| ... | @@ -1340,7 +1351,7 @@ fn decl(p: *Parser) Error!bool { | ... | @@ -1340,7 +1351,7 @@ fn decl(p: *Parser) Error!bool { |
| 1340 | if (init_d.d.old_style_func) |tok_i| try p.err(tok_i, .invalid_old_style_params, .{}); | 1351 | if (init_d.d.old_style_func) |tok_i| try p.err(tok_i, .invalid_old_style_params, .{}); |
| 1341 | 1352 | ||
| 1342 | if (decl_spec.storage_class == .typedef) { | 1353 | if (decl_spec.storage_class == .typedef) { |
| 1343 | try decl_spec.validateDecl(p); | 1354 | try decl_spec.validateDecl(p, init_d.asm_label); |
| 1344 | try p.tree.setNode(.{ .typedef = .{ | 1355 | try p.tree.setNode(.{ .typedef = .{ |
| 1345 | .name_tok = init_d.d.name, | 1356 | .name_tok = init_d.d.name, |
| 1346 | .qt = init_d.d.qt, | 1357 | .qt = init_d.d.qt, |
| ... | @@ -1357,7 +1368,7 @@ fn decl(p: *Parser) Error!bool { | ... | @@ -1357,7 +1368,7 @@ fn decl(p: *Parser) Error!bool { |
| 1357 | .definition = null, | 1368 | .definition = null, |
| 1358 | } }, @intFromEnum(decl_node)); | 1369 | } }, @intFromEnum(decl_node)); |
| 1359 | } else { | 1370 | } else { |
| 1360 | try decl_spec.validateDecl(p); | 1371 | try decl_spec.validateDecl(p, init_d.asm_label); |
| 1361 | var node_qt = init_d.d.qt; | 1372 | var node_qt = init_d.d.qt; |
| 1362 | if (p.func.qt == null and decl_spec.storage_class != .@"extern") { | 1373 | if (p.func.qt == null and decl_spec.storage_class != .@"extern") { |
| 1363 | if (node_qt.get(p.comp, .array)) |array_ty| { | 1374 | if (node_qt.get(p.comp, .array)) |array_ty| { |
| ... | @@ -1454,7 +1465,7 @@ fn decl(p: *Parser) Error!bool { | ... | @@ -1454,7 +1465,7 @@ fn decl(p: *Parser) Error!bool { |
| 1454 | return true; | 1465 | return true; |
| 1455 | } | 1466 | } |
| 1456 | 1467 | ||
| 1457 | fn staticAssertMessage(p: *Parser, cond_node: Node.Index, maybe_message: ?Result, allocating: *Io.Writer.Allocating) !?[]const u8 { | 1468 | fn staticAssertMessage(p: *Parser, cond_node: Node.Index, maybe_message: ?Result, allocating: *std.Io.Writer.Allocating) !?[]const u8 { |
| 1458 | const w = &allocating.writer; | 1469 | const w = &allocating.writer; |
| 1459 | 1470 | ||
| 1460 | const cond = cond_node.get(&p.tree); | 1471 | const cond = cond_node.get(&p.tree); |
| ... | @@ -1527,7 +1538,7 @@ fn staticAssert(p: *Parser) Error!bool { | ... | @@ -1527,7 +1538,7 @@ fn staticAssert(p: *Parser) Error!bool { |
| 1527 | } else { | 1538 | } else { |
| 1528 | if (!res.val.toBool(p.comp)) { | 1539 | if (!res.val.toBool(p.comp)) { |
| 1529 | var sf = std.heap.stackFallback(1024, gpa); | 1540 | var sf = std.heap.stackFallback(1024, gpa); |
| 1530 | var allocating: Io.Writer.Allocating = .init(sf.get()); | 1541 | var allocating: std.Io.Writer.Allocating = .init(sf.get()); |
| 1531 | defer allocating.deinit(); | 1542 | defer allocating.deinit(); |
| 1532 | 1543 | ||
| 1533 | if (p.staticAssertMessage(res_node, str, &allocating) catch return error.OutOfMemory) |message| { | 1544 | if (p.staticAssertMessage(res_node, str, &allocating) catch return error.OutOfMemory) |message| { |
| ... | @@ -1597,13 +1608,16 @@ pub const DeclSpec = struct { | ... | @@ -1597,13 +1608,16 @@ pub const DeclSpec = struct { |
| 1597 | if (d.constexpr) |tok_i| try p.err(tok_i, .illegal_storage_on_func, .{}); | 1608 | if (d.constexpr) |tok_i| try p.err(tok_i, .illegal_storage_on_func, .{}); |
| 1598 | } | 1609 | } |
| 1599 | 1610 | ||
| 1600 | fn validateDecl(d: DeclSpec, p: *Parser) Error!void { | 1611 | fn validateDecl(d: DeclSpec, p: *Parser, asm_label: ?Node.Index) Error!void { |
| 1601 | if (d.@"inline") |tok_i| try p.err(tok_i, .func_spec_non_func, .{"inline"}); | 1612 | if (d.@"inline") |tok_i| try p.err(tok_i, .func_spec_non_func, .{"inline"}); |
| 1602 | // TODO move to attribute validation | 1613 | // TODO move to attribute validation |
| 1603 | if (d.noreturn) |tok_i| try p.err(tok_i, .func_spec_non_func, .{"_Noreturn"}); | 1614 | if (d.noreturn) |tok_i| try p.err(tok_i, .func_spec_non_func, .{"_Noreturn"}); |
| 1604 | switch (d.storage_class) { | 1615 | switch (d.storage_class) { |
| 1605 | .auto => std.debug.assert(!p.comp.langopts.standard.atLeast(.c23)), | 1616 | .auto => { |
| 1606 | .register => if (p.func.qt == null) try p.err(p.tok_i, .illegal_storage_on_global, .{}), | 1617 | std.debug.assert(!p.comp.langopts.standard.atLeast(.c23)); |
| 1618 | try p.err(p.tok_i, .auto_on_global, .{}); | ||
| 1619 | }, | ||
| 1620 | .register => if (p.func.qt == null and asm_label == null) try p.err(p.tok_i, .register_on_global, .{}), | ||
| 1607 | else => {}, | 1621 | else => {}, |
| 1608 | } | 1622 | } |
| 1609 | } | 1623 | } |
| ... | @@ -1787,7 +1801,11 @@ fn storageClassSpec(p: *Parser, d: *DeclSpec) Error!bool { | ... | @@ -1787,7 +1801,11 @@ fn storageClassSpec(p: *Parser, d: *DeclSpec) Error!bool { |
| 1787 | return p.tok_i != start; | 1801 | return p.tok_i != start; |
| 1788 | } | 1802 | } |
| 1789 | 1803 | ||
| 1790 | const InitDeclarator = struct { d: Declarator, initializer: ?Result = null }; | 1804 | const InitDeclarator = struct { |
| 1805 | d: Declarator, | ||
| 1806 | initializer: ?Result = null, | ||
| 1807 | asm_label: ?Node.Index = null, | ||
| 1808 | }; | ||
| 1791 | 1809 | ||
| 1792 | /// attribute | 1810 | /// attribute |
| 1793 | /// : attrIdentifier | 1811 | /// : attrIdentifier |
| ... | @@ -1829,18 +1847,18 @@ fn attribute(p: *Parser, kind: Attribute.Kind, namespace: ?[]const u8) Error!?Te | ... | @@ -1829,18 +1847,18 @@ fn attribute(p: *Parser, kind: Attribute.Kind, namespace: ?[]const u8) Error!?Te |
| 1829 | if (try p.eatIdentifier()) |ident| { | 1847 | if (try p.eatIdentifier()) |ident| { |
| 1830 | if (try Attribute.diagnoseIdent(attr, &arguments, ident, p)) { | 1848 | if (try Attribute.diagnoseIdent(attr, &arguments, ident, p)) { |
| 1831 | p.skipTo(.r_paren); | 1849 | p.skipTo(.r_paren); |
| 1832 | return error.ParsingFailed; | 1850 | return null; |
| 1833 | } | 1851 | } |
| 1834 | } else { | 1852 | } else { |
| 1835 | try p.err(name_tok, .attribute_requires_identifier, .{name}); | 1853 | try p.err(name_tok, .attribute_requires_identifier, .{name}); |
| 1836 | return error.ParsingFailed; | 1854 | return null; |
| 1837 | } | 1855 | } |
| 1838 | } else { | 1856 | } else { |
| 1839 | const arg_start = p.tok_i; | 1857 | const arg_start = p.tok_i; |
| 1840 | const first_expr = try p.expect(assignExpr); | 1858 | const first_expr = try p.expect(assignExpr); |
| 1841 | if (try p.diagnose(attr, &arguments, arg_idx, first_expr, arg_start)) { | 1859 | if (try p.diagnose(attr, &arguments, arg_idx, first_expr, arg_start)) { |
| 1842 | p.skipTo(.r_paren); | 1860 | p.skipTo(.r_paren); |
| 1843 | return error.ParsingFailed; | 1861 | return null; |
| 1844 | } | 1862 | } |
| 1845 | } | 1863 | } |
| 1846 | arg_idx += 1; | 1864 | arg_idx += 1; |
| ... | @@ -1851,7 +1869,7 @@ fn attribute(p: *Parser, kind: Attribute.Kind, namespace: ?[]const u8) Error!?Te | ... | @@ -1851,7 +1869,7 @@ fn attribute(p: *Parser, kind: Attribute.Kind, namespace: ?[]const u8) Error!?Te |
| 1851 | const arg_expr = try p.expect(assignExpr); | 1869 | const arg_expr = try p.expect(assignExpr); |
| 1852 | if (try p.diagnose(attr, &arguments, arg_idx, arg_expr, arg_start)) { | 1870 | if (try p.diagnose(attr, &arguments, arg_idx, arg_expr, arg_start)) { |
| 1853 | p.skipTo(.r_paren); | 1871 | p.skipTo(.r_paren); |
| 1854 | return error.ParsingFailed; | 1872 | return null; |
| 1855 | } | 1873 | } |
| 1856 | } | 1874 | } |
| 1857 | }, | 1875 | }, |
| ... | @@ -1861,9 +1879,9 @@ fn attribute(p: *Parser, kind: Attribute.Kind, namespace: ?[]const u8) Error!?Te | ... | @@ -1861,9 +1879,9 @@ fn attribute(p: *Parser, kind: Attribute.Kind, namespace: ?[]const u8) Error!?Te |
| 1861 | try p.err(name_tok, .attribute_not_enough_args, .{ | 1879 | try p.err(name_tok, .attribute_not_enough_args, .{ |
| 1862 | @tagName(attr), required_count, | 1880 | @tagName(attr), required_count, |
| 1863 | }); | 1881 | }); |
| 1864 | return error.ParsingFailed; | 1882 | return null; |
| 1865 | } | 1883 | } |
| 1866 | return TentativeAttribute{ .attr = .{ .tag = attr, .args = arguments, .syntax = kind.toSyntax() }, .tok = name_tok }; | 1884 | return .{ .attr = .{ .tag = attr, .args = arguments, .syntax = kind.toSyntax() }, .tok = name_tok }; |
| 1867 | } | 1885 | } |
| 1868 | 1886 | ||
| 1869 | fn diagnose(p: *Parser, attr: Attribute.Tag, arguments: *Attribute.Arguments, arg_idx: u32, res: Result, arg_start: TokenIndex) !bool { | 1887 | 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 | ... | @@ -1995,12 +2013,12 @@ fn initDeclarator(p: *Parser, decl_spec: *DeclSpec, attr_buf_top: usize, decl_no |
| 1995 | defer p.attr_buf.len = this_attr_buf_top; | 2013 | defer p.attr_buf.len = this_attr_buf_top; |
| 1996 | const gpa = p.comp.gpa; | 2014 | const gpa = p.comp.gpa; |
| 1997 | 2015 | ||
| 1998 | var init_d = InitDeclarator{ | 2016 | var init_d: InitDeclarator = .{ |
| 1999 | .d = (try p.declarator(decl_spec.qt, .normal)) orelse return null, | 2017 | .d = (try p.declarator(decl_spec.qt, .normal)) orelse return null, |
| 2000 | }; | 2018 | }; |
| 2001 | 2019 | ||
| 2002 | try p.attributeSpecifierExtra(init_d.d.name); | 2020 | try p.attributeSpecifierExtra(init_d.d.name); |
| 2003 | _ = try p.assembly(.decl_label); | 2021 | init_d.asm_label = try p.assembly(.decl_label); |
| 2004 | try p.attributeSpecifierExtra(init_d.d.name); | 2022 | try p.attributeSpecifierExtra(init_d.d.name); |
| 2005 | 2023 | ||
| 2006 | switch (init_d.d.declarator_type) { | 2024 | switch (init_d.d.declarator_type) { |
| ... | @@ -2276,14 +2294,13 @@ fn typeSpec(p: *Parser, builder: *TypeStore.Builder) Error!bool { | ... | @@ -2276,14 +2294,13 @@ fn typeSpec(p: *Parser, builder: *TypeStore.Builder) Error!bool { |
| 2276 | }, .syntax = .keyword }, | 2294 | }, .syntax = .keyword }, |
| 2277 | .tok = align_tok, | 2295 | .tok = align_tok, |
| 2278 | }); | 2296 | }); |
| 2279 | } else { | 2297 | } else check: { |
| 2280 | const arg_start = p.tok_i; | 2298 | const arg_start = p.tok_i; |
| 2281 | const res = try p.integerConstExpr(.no_const_decl_folding); | 2299 | const res = try p.integerConstExpr(.no_const_decl_folding); |
| 2282 | if (!res.val.isZero(p.comp)) { | 2300 | if (!res.val.isZero(p.comp)) { |
| 2283 | var args = Attribute.initArguments(.aligned, align_tok); | 2301 | var args = Attribute.initArguments(.aligned, align_tok); |
| 2284 | if (try p.diagnose(.aligned, &args, 0, res, arg_start)) { | 2302 | if (try p.diagnose(.aligned, &args, 0, res, arg_start)) { |
| 2285 | p.skipTo(.r_paren); | 2303 | break :check; |
| 2286 | return error.ParsingFailed; | ||
| 2287 | } | 2304 | } |
| 2288 | args.aligned.alignment.?.node = .pack(res.node); | 2305 | args.aligned.alignment.?.node = .pack(res.node); |
| 2289 | try p.attr_buf.append(gpa, .{ | 2306 | try p.attr_buf.append(gpa, .{ |
| ... | @@ -2562,7 +2579,7 @@ fn recordSpec(p: *Parser) Error!QualType { | ... | @@ -2562,7 +2579,7 @@ fn recordSpec(p: *Parser) Error!QualType { |
| 2562 | 2579 | ||
| 2563 | if (!any_incomplete) { | 2580 | if (!any_incomplete) { |
| 2564 | const pragma_pack_value = switch (p.comp.langopts.emulate) { | 2581 | const pragma_pack_value = switch (p.comp.langopts.emulate) { |
| 2565 | .clang => starting_pragma_pack, | 2582 | .clang, .no => starting_pragma_pack, |
| 2566 | .gcc => p.pragma_pack, | 2583 | .gcc => p.pragma_pack, |
| 2567 | // TODO: msvc considers `#pragma pack` on a per-field basis | 2584 | // TODO: msvc considers `#pragma pack` on a per-field basis |
| 2568 | .msvc => p.pragma_pack, | 2585 | .msvc => p.pragma_pack, |
| ... | @@ -3542,7 +3559,6 @@ fn declarator( | ... | @@ -3542,7 +3559,6 @@ fn declarator( |
| 3542 | 3559 | ||
| 3543 | const pointer_qt = try p.comp.type_store.put(p.comp.gpa, .{ .pointer = .{ | 3560 | const pointer_qt = try p.comp.type_store.put(p.comp.gpa, .{ .pointer = .{ |
| 3544 | .child = d.qt, | 3561 | .child = d.qt, |
| 3545 | .decayed = null, | ||
| 3546 | } }); | 3562 | } }); |
| 3547 | d.qt = try builder.finishQuals(pointer_qt); | 3563 | d.qt = try builder.finishQuals(pointer_qt); |
| 3548 | } | 3564 | } |
| ... | @@ -4141,7 +4157,10 @@ fn designation(p: *Parser, il: *InitList, init_qt: QualType, index_list: *IndexL | ... | @@ -4141,7 +4157,10 @@ fn designation(p: *Parser, il: *InitList, init_qt: QualType, index_list: *IndexL |
| 4141 | const field = record_ty.fields[field_index]; | 4157 | const field = record_ty.fields[field_index]; |
| 4142 | if (field.name_tok == 0) if (field.qt.getRecord(p.comp)) |field_record_ty| { | 4158 | if (field.name_tok == 0) if (field.qt.getRecord(p.comp)) |field_record_ty| { |
| 4143 | // Recurse into anonymous field if it has a field by the name. | 4159 | // Recurse into anonymous field if it has a field by the name. |
| 4144 | if (!field_record_ty.hasField(p.comp, target_name)) continue; | 4160 | if (!field_record_ty.hasField(p.comp, target_name)) { |
| 4161 | field_index += 1; | ||
| 4162 | continue; | ||
| 4163 | } | ||
| 4145 | try index_list.append(gpa, field_index); | 4164 | try index_list.append(gpa, field_index); |
| 4146 | cur_il = try il.find(gpa, field_index); | 4165 | cur_il = try il.find(gpa, field_index); |
| 4147 | record_ty = field_record_ty; | 4166 | record_ty = field_record_ty; |
| ... | @@ -4983,31 +5002,31 @@ fn assembly(p: *Parser, kind: enum { global, decl_label, stmt }) Error!?Node.Ind | ... | @@ -4983,31 +5002,31 @@ fn assembly(p: *Parser, kind: enum { global, decl_label, stmt }) Error!?Node.Ind |
| 4983 | }; | 5002 | }; |
| 4984 | 5003 | ||
| 4985 | const l_paren = try p.expectToken(.l_paren); | 5004 | const l_paren = try p.expectToken(.l_paren); |
| 4986 | var result_node: ?Node.Index = null; | 5005 | const res = switch (kind) { |
| 4987 | switch (kind) { | 5006 | .decl_label => blk: { |
| 4988 | .decl_label => { | ||
| 4989 | const asm_str = try p.asmStr(); | 5007 | const asm_str = try p.asmStr(); |
| 4990 | const str = try p.removeNull(asm_str.val); | 5008 | const str = try p.removeNull(asm_str.val); |
| 4991 | 5009 | ||
| 4992 | const attr = Attribute{ .tag = .asm_label, .args = .{ .asm_label = .{ .name = str } }, .syntax = .keyword }; | 5010 | const attr = Attribute{ .tag = .asm_label, .args = .{ .asm_label = .{ .name = str } }, .syntax = .keyword }; |
| 4993 | try p.attr_buf.append(p.comp.gpa, .{ .attr = attr, .tok = asm_tok }); | 5011 | try p.attr_buf.append(p.comp.gpa, .{ .attr = attr, .tok = asm_tok }); |
| 5012 | break :blk asm_str.node; | ||
| 4994 | }, | 5013 | }, |
| 4995 | .global => { | 5014 | .global => blk: { |
| 4996 | const asm_str = try p.asmStr(); | 5015 | const asm_str = try p.asmStr(); |
| 4997 | try p.checkAsmStr(asm_str.val, l_paren); | 5016 | try p.checkAsmStr(asm_str.val, l_paren); |
| 4998 | result_node = try p.addNode(.{ | 5017 | break :blk try p.addNode(.{ |
| 4999 | .global_asm = .{ | 5018 | .global_asm = .{ |
| 5000 | .asm_tok = asm_tok, | 5019 | .asm_tok = asm_tok, |
| 5001 | .asm_str = asm_str.node, | 5020 | .asm_str = asm_str.node, |
| 5002 | }, | 5021 | }, |
| 5003 | }); | 5022 | }); |
| 5004 | }, | 5023 | }, |
| 5005 | .stmt => result_node = try p.gnuAsmStmt(quals, asm_tok, l_paren), | 5024 | .stmt => try p.gnuAsmStmt(quals, asm_tok, l_paren), |
| 5006 | } | 5025 | }; |
| 5007 | try p.expectClosing(l_paren, .r_paren); | 5026 | try p.expectClosing(l_paren, .r_paren); |
| 5008 | 5027 | ||
| 5009 | if (kind != .decl_label) _ = try p.expectToken(.semicolon); | 5028 | if (kind != .decl_label) _ = try p.expectToken(.semicolon); |
| 5010 | return result_node; | 5029 | return res; |
| 5011 | } | 5030 | } |
| 5012 | 5031 | ||
| 5013 | /// Same as stringLiteral but errors on unicode and wide string literals | 5032 | /// Same as stringLiteral but errors on unicode and wide string literals |
| ... | @@ -5253,7 +5272,6 @@ fn stmt(p: *Parser) Error!Node.Index { | ... | @@ -5253,7 +5272,6 @@ fn stmt(p: *Parser) Error!Node.Index { |
| 5253 | if (!goto_expr.qt.isInvalid() and !goto_expr.qt.isPointer(p.comp)) { | 5272 | if (!goto_expr.qt.isInvalid() and !goto_expr.qt.isPointer(p.comp)) { |
| 5254 | const result_qt = try p.comp.type_store.put(gpa, .{ .pointer = .{ | 5273 | const result_qt = try p.comp.type_store.put(gpa, .{ .pointer = .{ |
| 5255 | .child = .{ .@"const" = true, ._index = .void }, | 5274 | .child = .{ .@"const" = true, ._index = .void }, |
| 5256 | .decayed = null, | ||
| 5257 | } }); | 5275 | } }); |
| 5258 | if (!goto_expr.qt.isRealInt(p.comp)) { | 5276 | if (!goto_expr.qt.isRealInt(p.comp)) { |
| 5259 | try p.err(expr_tok, .incompatible_arg, .{ goto_expr.qt, result_qt }); | 5277 | try p.err(expr_tok, .incompatible_arg, .{ goto_expr.qt, result_qt }); |
| ... | @@ -5905,6 +5923,7 @@ const CallExpr = union(enum) { | ... | @@ -5905,6 +5923,7 @@ const CallExpr = union(enum) { |
| 5905 | .__builtin_reduce_xor, | 5923 | .__builtin_reduce_xor, |
| 5906 | .__builtin_reduce_max, | 5924 | .__builtin_reduce_max, |
| 5907 | .__builtin_reduce_min, | 5925 | .__builtin_reduce_min, |
| 5926 | .__builtin_constant_p, | ||
| 5908 | => 1, | 5927 | => 1, |
| 5909 | 5928 | ||
| 5910 | .__builtin_complex, | 5929 | .__builtin_complex, |
| ... | @@ -5922,13 +5941,15 @@ const CallExpr = union(enum) { | ... | @@ -5922,13 +5941,15 @@ const CallExpr = union(enum) { |
| 5922 | 5941 | ||
| 5923 | .__c11_atomic_store, | 5942 | .__c11_atomic_store, |
| 5924 | .__atomic_store, | 5943 | .__atomic_store, |
| 5944 | .__atomic_store_n, | ||
| 5945 | .__atomic_load, | ||
| 5925 | .__c11_atomic_exchange, | 5946 | .__c11_atomic_exchange, |
| 5926 | .__atomic_exchange, | ||
| 5927 | .__c11_atomic_fetch_add, | 5947 | .__c11_atomic_fetch_add, |
| 5928 | .__c11_atomic_fetch_sub, | 5948 | .__c11_atomic_fetch_sub, |
| 5929 | .__c11_atomic_fetch_or, | 5949 | .__c11_atomic_fetch_or, |
| 5930 | .__c11_atomic_fetch_xor, | 5950 | .__c11_atomic_fetch_xor, |
| 5931 | .__c11_atomic_fetch_and, | 5951 | .__c11_atomic_fetch_and, |
| 5952 | .__c11_atomic_fetch_nand, | ||
| 5932 | .__atomic_fetch_add, | 5953 | .__atomic_fetch_add, |
| 5933 | .__atomic_fetch_sub, | 5954 | .__atomic_fetch_sub, |
| 5934 | .__atomic_fetch_and, | 5955 | .__atomic_fetch_and, |
| ... | @@ -5948,6 +5969,9 @@ const CallExpr = union(enum) { | ... | @@ -5948,6 +5969,9 @@ const CallExpr = union(enum) { |
| 5948 | .__atomic_exchange_n, | 5969 | .__atomic_exchange_n, |
| 5949 | => 3, | 5970 | => 3, |
| 5950 | 5971 | ||
| 5972 | .__atomic_exchange, | ||
| 5973 | => 4, | ||
| 5974 | |||
| 5951 | .__c11_atomic_compare_exchange_strong, | 5975 | .__c11_atomic_compare_exchange_strong, |
| 5952 | .__c11_atomic_compare_exchange_weak, | 5976 | .__c11_atomic_compare_exchange_weak, |
| 5953 | => 5, | 5977 | => 5, |
| ... | @@ -5964,25 +5988,13 @@ const CallExpr = union(enum) { | ... | @@ -5964,25 +5988,13 @@ const CallExpr = union(enum) { |
| 5964 | 5988 | ||
| 5965 | fn returnType(self: CallExpr, p: *Parser, args: []const Node.Index, func_qt: QualType) !QualType { | 5989 | fn returnType(self: CallExpr, p: *Parser, args: []const Node.Index, func_qt: QualType) !QualType { |
| 5966 | if (self == .standard) { | 5990 | if (self == .standard) { |
| 5991 | if (func_qt.isInvalid()) return .invalid; | ||
| 5967 | return if (func_qt.get(p.comp, .func)) |func_ty| func_ty.return_type else .invalid; | 5992 | return if (func_qt.get(p.comp, .func)) |func_ty| func_ty.return_type else .invalid; |
| 5968 | } | 5993 | } |
| 5969 | const builtin = self.builtin; | 5994 | const builtin = self.builtin; |
| 5970 | const func_ty = func_qt.get(p.comp, .func).?; | 5995 | const func_ty = func_qt.get(p.comp, .func).?; |
| 5971 | return switch (builtin.expanded.tag) { | 5996 | return switch (builtin.expanded.tag) { |
| 5972 | .common => |tag| switch (tag) { | 5997 | .common => |tag| switch (tag) { |
| 5973 | .__c11_atomic_exchange => { | ||
| 5974 | if (args.len != 4) return .invalid; // wrong number of arguments; already an error | ||
| 5975 | const second_param = args[2]; | ||
| 5976 | return second_param.qt(&p.tree); | ||
| 5977 | }, | ||
| 5978 | .__c11_atomic_load => { | ||
| 5979 | if (args.len != 3) return .invalid; // wrong number of arguments; already an error | ||
| 5980 | const first_param = args[1]; | ||
| 5981 | const qt = first_param.qt(&p.tree); | ||
| 5982 | if (!qt.isPointer(p.comp)) return .invalid; | ||
| 5983 | return qt.childType(p.comp); | ||
| 5984 | }, | ||
| 5985 | |||
| 5986 | .__atomic_fetch_add, | 5998 | .__atomic_fetch_add, |
| 5987 | .__atomic_add_fetch, | 5999 | .__atomic_add_fetch, |
| 5988 | .__c11_atomic_fetch_add, | 6000 | .__c11_atomic_fetch_add, |
| ... | @@ -6008,15 +6020,38 @@ const CallExpr = union(enum) { | ... | @@ -6008,15 +6020,38 @@ const CallExpr = union(enum) { |
| 6008 | .__c11_atomic_fetch_nand, | 6020 | .__c11_atomic_fetch_nand, |
| 6009 | 6021 | ||
| 6010 | .__atomic_exchange_n, | 6022 | .__atomic_exchange_n, |
| 6023 | .__c11_atomic_exchange, | ||
| 6024 | => { | ||
| 6025 | const second_param = args[1].qt(&p.tree); | ||
| 6026 | return second_param; | ||
| 6027 | }, | ||
| 6028 | |||
| 6029 | .__sync_fetch_and_add, | ||
| 6030 | .__sync_fetch_and_and, | ||
| 6031 | .__sync_fetch_and_nand, | ||
| 6032 | .__sync_fetch_and_or, | ||
| 6033 | .__sync_fetch_and_sub, | ||
| 6034 | .__sync_fetch_and_xor, | ||
| 6035 | |||
| 6036 | .__sync_add_and_fetch, | ||
| 6037 | .__sync_and_and_fetch, | ||
| 6038 | .__sync_nand_and_fetch, | ||
| 6039 | .__sync_or_and_fetch, | ||
| 6040 | .__sync_sub_and_fetch, | ||
| 6041 | .__sync_xor_and_fetch, | ||
| 6042 | |||
| 6043 | .__sync_swap, | ||
| 6044 | .__sync_lock_test_and_set, | ||
| 6045 | .__sync_val_compare_and_swap, | ||
| 6011 | => { | 6046 | => { |
| 6012 | if (args.len != 3) return .invalid; // wrong number of arguments; already an error | 6047 | if (args.len < 2) return .invalid; |
| 6013 | const second_param = args[2]; | 6048 | const second_param = args[1].qt(&p.tree); |
| 6014 | return second_param.qt(&p.tree); | 6049 | return second_param; |
| 6015 | }, | 6050 | }, |
| 6016 | .__builtin_complex => { | 6051 | .__builtin_complex => { |
| 6017 | if (args.len < 1) return .invalid; // not enough arguments; already an error | 6052 | const last_param = args[args.len - 1].qt(&p.tree); |
| 6018 | const last_param = args[args.len - 1]; | 6053 | if (last_param.isInvalid()) return .invalid; |
| 6019 | return try last_param.qt(&p.tree).toComplex(p.comp); | 6054 | return try last_param.toComplex(p.comp); |
| 6020 | }, | 6055 | }, |
| 6021 | .__atomic_compare_exchange, | 6056 | .__atomic_compare_exchange, |
| 6022 | .__atomic_compare_exchange_n, | 6057 | .__atomic_compare_exchange_n, |
| ... | @@ -6027,9 +6062,8 @@ const CallExpr = union(enum) { | ... | @@ -6027,9 +6062,8 @@ const CallExpr = union(enum) { |
| 6027 | .__c11_atomic_compare_exchange_strong, | 6062 | .__c11_atomic_compare_exchange_strong, |
| 6028 | .__c11_atomic_compare_exchange_weak, | 6063 | .__c11_atomic_compare_exchange_weak, |
| 6029 | => { | 6064 | => { |
| 6030 | if (args.len != 6) return .invalid; // wrong number of arguments | 6065 | const third_param = args[2].qt(&p.tree); |
| 6031 | const third_param = args[3]; | 6066 | return third_param; |
| 6032 | return third_param.qt(&p.tree); | ||
| 6033 | }, | 6067 | }, |
| 6034 | 6068 | ||
| 6035 | .__builtin_elementwise_abs, | 6069 | .__builtin_elementwise_abs, |
| ... | @@ -6058,13 +6092,12 @@ const CallExpr = union(enum) { | ... | @@ -6058,13 +6092,12 @@ const CallExpr = union(enum) { |
| 6058 | .__builtin_elementwise_sub_sat, | 6092 | .__builtin_elementwise_sub_sat, |
| 6059 | .__builtin_elementwise_fma, | 6093 | .__builtin_elementwise_fma, |
| 6060 | .__builtin_elementwise_popcount, | 6094 | .__builtin_elementwise_popcount, |
| 6095 | |||
| 6061 | .__builtin_nondeterministic_value, | 6096 | .__builtin_nondeterministic_value, |
| 6062 | => { | 6097 | => { |
| 6063 | if (args.len < 1) return .invalid; // not enough arguments; already an error | 6098 | const first_param = args[0].qt(&p.tree); |
| 6064 | const last_param = args[args.len - 1]; | 6099 | return first_param; |
| 6065 | return last_param.qt(&p.tree); | ||
| 6066 | }, | 6100 | }, |
| 6067 | .__builtin_nontemporal_load, | ||
| 6068 | .__builtin_reduce_add, | 6101 | .__builtin_reduce_add, |
| 6069 | .__builtin_reduce_mul, | 6102 | .__builtin_reduce_mul, |
| 6070 | .__builtin_reduce_and, | 6103 | .__builtin_reduce_and, |
| ... | @@ -6073,30 +6106,19 @@ const CallExpr = union(enum) { | ... | @@ -6073,30 +6106,19 @@ const CallExpr = union(enum) { |
| 6073 | .__builtin_reduce_max, | 6106 | .__builtin_reduce_max, |
| 6074 | .__builtin_reduce_min, | 6107 | .__builtin_reduce_min, |
| 6075 | => { | 6108 | => { |
| 6076 | if (args.len < 1) return .invalid; // not enough arguments; already an error | 6109 | const first_param = args[0].qt(&p.tree); |
| 6077 | const last_param = args[args.len - 1]; | 6110 | if (first_param.isInvalid()) return .invalid; |
| 6078 | return last_param.qt(&p.tree).childType(p.comp); | 6111 | const vector_ty = first_param.get(p.comp, .vector) orelse return .invalid; |
| 6112 | return vector_ty.elem; | ||
| 6079 | }, | 6113 | }, |
| 6080 | .__sync_add_and_fetch, | ||
| 6081 | .__sync_and_and_fetch, | ||
| 6082 | .__sync_fetch_and_add, | ||
| 6083 | .__sync_fetch_and_and, | ||
| 6084 | .__sync_fetch_and_nand, | ||
| 6085 | .__sync_fetch_and_or, | ||
| 6086 | .__sync_fetch_and_sub, | ||
| 6087 | .__sync_fetch_and_xor, | ||
| 6088 | .__sync_lock_test_and_set, | ||
| 6089 | .__sync_nand_and_fetch, | ||
| 6090 | .__sync_or_and_fetch, | ||
| 6091 | .__sync_sub_and_fetch, | ||
| 6092 | .__sync_swap, | ||
| 6093 | .__sync_xor_and_fetch, | ||
| 6094 | .__sync_val_compare_and_swap, | ||
| 6095 | .__atomic_load_n, | 6114 | .__atomic_load_n, |
| 6115 | .__c11_atomic_load, | ||
| 6116 | .__builtin_nontemporal_load, | ||
| 6096 | => { | 6117 | => { |
| 6097 | if (args.len < 1) return .invalid; // not enough arguments; already an error | 6118 | const first_param = args[0].qt(&p.tree); |
| 6098 | const first_param = args[0]; | 6119 | if (first_param.isInvalid()) return .invalid; |
| 6099 | return first_param.qt(&p.tree).childType(p.comp); | 6120 | if (!first_param.isPointer(p.comp)) return .invalid; |
| 6121 | return first_param.childType(p.comp); | ||
| 6100 | }, | 6122 | }, |
| 6101 | else => func_ty.return_type, | 6123 | else => func_ty.return_type, |
| 6102 | }, | 6124 | }, |
| ... | @@ -6104,9 +6126,16 @@ const CallExpr = union(enum) { | ... | @@ -6104,9 +6126,16 @@ const CallExpr = union(enum) { |
| 6104 | }; | 6126 | }; |
| 6105 | } | 6127 | } |
| 6106 | 6128 | ||
| 6107 | fn finish(self: CallExpr, p: *Parser, func_qt: QualType, list_buf_top: usize, l_paren: TokenIndex) Error!Result { | 6129 | fn finish( |
| 6130 | self: CallExpr, | ||
| 6131 | p: *Parser, | ||
| 6132 | func_qt: QualType, | ||
| 6133 | list_buf_top: usize, | ||
| 6134 | l_paren: TokenIndex, | ||
| 6135 | args_ok: bool, | ||
| 6136 | ) Error!Result { | ||
| 6108 | const args = p.list_buf.items[list_buf_top..]; | 6137 | const args = p.list_buf.items[list_buf_top..]; |
| 6109 | const return_qt = try self.returnType(p, args, func_qt); | 6138 | const return_qt: QualType = if (args_ok) try self.returnType(p, args, func_qt) else .invalid; |
| 6110 | switch (self) { | 6139 | switch (self) { |
| 6111 | .standard => |func_node| return .{ | 6140 | .standard => |func_node| return .{ |
| 6112 | .qt = return_qt, | 6141 | .qt = return_qt, |
| ... | @@ -6118,7 +6147,7 @@ const CallExpr = union(enum) { | ... | @@ -6118,7 +6147,7 @@ const CallExpr = union(enum) { |
| 6118 | } }), | 6147 | } }), |
| 6119 | }, | 6148 | }, |
| 6120 | .builtin => |builtin| return .{ | 6149 | .builtin => |builtin| return .{ |
| 6121 | .val = try evalBuiltin(builtin.expanded, p, args), | 6150 | .val = if (args_ok) try evalBuiltin(builtin.expanded, p, args) else .{}, |
| 6122 | .qt = return_qt, | 6151 | .qt = return_qt, |
| 6123 | .node = try p.addNode(.{ .builtin_call_expr = .{ | 6152 | .node = try p.addNode(.{ .builtin_call_expr = .{ |
| 6124 | .builtin_tok = builtin.builtin_tok, | 6153 | .builtin_tok = builtin.builtin_tok, |
| ... | @@ -6283,14 +6312,12 @@ pub const Result = struct { | ... | @@ -6283,14 +6312,12 @@ pub const Result = struct { |
| 6283 | if (!adjusted_elem_qt.eqlQualified(a_elem, p.comp)) { | 6312 | if (!adjusted_elem_qt.eqlQualified(a_elem, p.comp)) { |
| 6284 | a.qt = try p.comp.type_store.put(gpa, .{ .pointer = .{ | 6313 | a.qt = try p.comp.type_store.put(gpa, .{ .pointer = .{ |
| 6285 | .child = adjusted_elem_qt, | 6314 | .child = adjusted_elem_qt, |
| 6286 | .decayed = null, | ||
| 6287 | } }); | 6315 | } }); |
| 6288 | try a.implicitCast(p, .bitcast, tok); | 6316 | try a.implicitCast(p, .bitcast, tok); |
| 6289 | } | 6317 | } |
| 6290 | if (!adjusted_elem_qt.eqlQualified(b_elem, p.comp)) { | 6318 | if (!adjusted_elem_qt.eqlQualified(b_elem, p.comp)) { |
| 6291 | b.qt = try p.comp.type_store.put(gpa, .{ .pointer = .{ | 6319 | b.qt = try p.comp.type_store.put(gpa, .{ .pointer = .{ |
| 6292 | .child = adjusted_elem_qt, | 6320 | .child = adjusted_elem_qt, |
| 6293 | .decayed = null, | ||
| 6294 | } }); | 6321 | } }); |
| 6295 | try b.implicitCast(p, .bitcast, tok); | 6322 | try b.implicitCast(p, .bitcast, tok); |
| 6296 | } | 6323 | } |
| ... | @@ -6478,6 +6505,7 @@ pub const Result = struct { | ... | @@ -6478,6 +6505,7 @@ pub const Result = struct { |
| 6478 | .add => { | 6505 | .add => { |
| 6479 | // if both aren't arithmetic one should be pointer and the other an integer | 6506 | // if both aren't arithmetic one should be pointer and the other an integer |
| 6480 | if (a_sk.isPointer() == b_sk.isPointer() or a_sk.isInt() == b_sk.isInt()) return a.invalidBinTy(tok, b, p); | 6507 | if (a_sk.isPointer() == b_sk.isPointer() or a_sk.isInt() == b_sk.isInt()) return a.invalidBinTy(tok, b, p); |
| 6508 | try p.boundsSafetyCheckPointerArithmetic(a.qt, b.qt, tok, a.node); | ||
| 6481 | 6509 | ||
| 6482 | if (a_sk == .void_pointer or b_sk == .void_pointer) | 6510 | if (a_sk == .void_pointer or b_sk == .void_pointer) |
| 6483 | try p.err(tok, .gnu_pointer_arith, .{}); | 6511 | try p.err(tok, .gnu_pointer_arith, .{}); |
| ... | @@ -6496,6 +6524,7 @@ pub const Result = struct { | ... | @@ -6496,6 +6524,7 @@ pub const Result = struct { |
| 6496 | .sub => { | 6524 | .sub => { |
| 6497 | // if both aren't arithmetic then either both should be pointers or just the left one. | 6525 | // if both aren't arithmetic then either both should be pointers or just the left one. |
| 6498 | if (!a_sk.isPointer() or !(b_sk.isPointer() or b_sk.isInt())) return a.invalidBinTy(tok, b, p); | 6526 | if (!a_sk.isPointer() or !(b_sk.isPointer() or b_sk.isInt())) return a.invalidBinTy(tok, b, p); |
| 6527 | try p.boundsSafetyCheckPointerArithmetic(a.qt, b.qt, tok, a.node); | ||
| 6499 | 6528 | ||
| 6500 | if (a_sk == .void_pointer) | 6529 | if (a_sk == .void_pointer) |
| 6501 | try p.err(tok, .gnu_pointer_arith, .{}); | 6530 | try p.err(tok, .gnu_pointer_arith, .{}); |
| ... | @@ -7087,14 +7116,14 @@ pub const Result = struct { | ... | @@ -7087,14 +7116,14 @@ pub const Result = struct { |
| 7087 | } else if (dest_sk.isPointer()) { | 7116 | } else if (dest_sk.isPointer()) { |
| 7088 | if (src_sk.isPointer()) { | 7117 | if (src_sk.isPointer()) { |
| 7089 | cast_kind = .bitcast; | 7118 | cast_kind = .bitcast; |
| 7119 | } else if (src_sk == .bool) { | ||
| 7120 | cast_kind = .bool_to_pointer; | ||
| 7090 | } else if (src_sk.isInt()) { | 7121 | } else if (src_sk.isInt()) { |
| 7091 | if (!src_sk.isReal()) { | 7122 | if (!src_sk.isReal()) { |
| 7092 | res.qt = res.qt.toReal(p.comp); | 7123 | res.qt = res.qt.toReal(p.comp); |
| 7093 | try res.implicitCast(p, .complex_int_to_real, l_paren); | 7124 | try res.implicitCast(p, .complex_int_to_real, l_paren); |
| 7094 | } | 7125 | } |
| 7095 | cast_kind = .int_to_pointer; | 7126 | cast_kind = .int_to_pointer; |
| 7096 | } else if (src_sk == .bool) { | ||
| 7097 | cast_kind = .bool_to_pointer; | ||
| 7098 | } else if (res.qt.is(p.comp, .array)) { | 7127 | } else if (res.qt.is(p.comp, .array)) { |
| 7099 | cast_kind = .array_to_pointer; | 7128 | cast_kind = .array_to_pointer; |
| 7100 | } else if (res.qt.is(p.comp, .func)) { | 7129 | } else if (res.qt.is(p.comp, .func)) { |
| ... | @@ -7497,7 +7526,16 @@ fn issueDeclaredConstHereNote(p: *Parser, decl_ref: Tree.Node.DeclRef, var_name: | ... | @@ -7497,7 +7526,16 @@ fn issueDeclaredConstHereNote(p: *Parser, decl_ref: Tree.Node.DeclRef, var_name: |
| 7497 | try p.err(location, .declared_const_here, .{var_name}); | 7526 | try p.err(location, .declared_const_here, .{var_name}); |
| 7498 | } | 7527 | } |
| 7499 | 7528 | ||
| 7500 | fn issueConstAssignmetDiagnostics(p: *Parser, node_idx: Node.Index, tok: TokenIndex) Compilation.Error!void { | 7529 | fn issueBoundsDeclaredHereNote(p: *Parser, decl_ref: Tree.Node.DeclRef, var_name: []const u8, bounds: Type.Pointer.Bounds) Compilation.Error!void { |
| 7530 | const location = switch (decl_ref.decl.get(&p.tree)) { | ||
| 7531 | .variable => |variable| variable.name_tok, | ||
| 7532 | .param => |param| param.name_tok, | ||
| 7533 | else => return, | ||
| 7534 | }; | ||
| 7535 | try p.err(location, .pointer_bounds_declared_here, .{ var_name, @tagName(bounds) }); | ||
| 7536 | } | ||
| 7537 | |||
| 7538 | fn issueConstAssignmentDiagnostics(p: *Parser, node_idx: Node.Index, tok: TokenIndex) Compilation.Error!void { | ||
| 7501 | if (p.unwrapNestedOperation(node_idx)) |unwrapped| { | 7539 | if (p.unwrapNestedOperation(node_idx)) |unwrapped| { |
| 7502 | const name = p.tokSlice(unwrapped.name_tok); | 7540 | const name = p.tokSlice(unwrapped.name_tok); |
| 7503 | try p.err(tok, .const_var_assignment, .{ name, unwrapped.qt }); | 7541 | try p.err(tok, .const_var_assignment, .{ name, unwrapped.qt }); |
| ... | @@ -7530,7 +7568,7 @@ fn assignExpr(p: *Parser) Error!?Result { | ... | @@ -7530,7 +7568,7 @@ fn assignExpr(p: *Parser) Error!?Result { |
| 7530 | 7568 | ||
| 7531 | var is_const: bool = undefined; | 7569 | var is_const: bool = undefined; |
| 7532 | if (!p.tree.isLvalExtra(lhs.node, &is_const) or is_const) { | 7570 | if (!p.tree.isLvalExtra(lhs.node, &is_const) or is_const) { |
| 7533 | try p.issueConstAssignmetDiagnostics(lhs.node, tok); | 7571 | try p.issueConstAssignmentDiagnostics(lhs.node, tok); |
| 7534 | lhs.qt = .invalid; | 7572 | lhs.qt = .invalid; |
| 7535 | } | 7573 | } |
| 7536 | 7574 | ||
| ... | @@ -8226,7 +8264,7 @@ fn builtinChooseExpr(p: *Parser) Error!Result { | ... | @@ -8226,7 +8264,7 @@ fn builtinChooseExpr(p: *Parser) Error!Result { |
| 8226 | return cond; | 8264 | return cond; |
| 8227 | } | 8265 | } |
| 8228 | 8266 | ||
| 8229 | /// vaStart : __builtin_va_arg '(' assignExpr ',' typeName ')' | 8267 | /// vaArg : __builtin_va_arg '(' assignExpr ',' typeName ')' |
| 8230 | fn builtinVaArg(p: *Parser, builtin_tok: TokenIndex) Error!Result { | 8268 | fn builtinVaArg(p: *Parser, builtin_tok: TokenIndex) Error!Result { |
| 8231 | const l_paren = try p.expectToken(.l_paren); | 8269 | const l_paren = try p.expectToken(.l_paren); |
| 8232 | const va_list_tok = p.tok_i; | 8270 | const va_list_tok = p.tok_i; |
| ... | @@ -8258,6 +8296,62 @@ fn builtinVaArg(p: *Parser, builtin_tok: TokenIndex) Error!Result { | ... | @@ -8258,6 +8296,62 @@ fn builtinVaArg(p: *Parser, builtin_tok: TokenIndex) Error!Result { |
| 8258 | }; | 8296 | }; |
| 8259 | } | 8297 | } |
| 8260 | 8298 | ||
| 8299 | /// vaArgPack : __builtin_va_arg_pack '(' ')' | ||
| 8300 | fn builtinVaArgPack(p: *Parser, builtin_tok: TokenIndex) Error!Result { | ||
| 8301 | const l_paren = try p.expectToken(.l_paren); | ||
| 8302 | try p.expectClosing(l_paren, .r_paren); | ||
| 8303 | |||
| 8304 | var res_qt: QualType = .invalid; | ||
| 8305 | if (!try p.checkVaPackFunc(builtin_tok, "__builtin_va_arg_pack")) { | ||
| 8306 | // Only add one error. | ||
| 8307 | } else if (!p.va_arg_pack_ctx.valid) { | ||
| 8308 | try p.err(builtin_tok, .va_pack_non_call, .{}); | ||
| 8309 | } else if (!p.va_arg_pack_ctx.variadic) { | ||
| 8310 | try p.err(builtin_tok, .va_pack_non_variadic_call, .{}); | ||
| 8311 | } else if (p.va_arg_pack_ctx.typed) { | ||
| 8312 | try p.err(builtin_tok, .va_pack_non_variadic_arg, .{}); | ||
| 8313 | } else { | ||
| 8314 | res_qt = .void; | ||
| 8315 | } | ||
| 8316 | return .{ | ||
| 8317 | .qt = res_qt, | ||
| 8318 | .node = try p.addNode(.{ | ||
| 8319 | .builtin_va_arg_pack = .{ .builtin_tok = builtin_tok }, | ||
| 8320 | }), | ||
| 8321 | }; | ||
| 8322 | } | ||
| 8323 | |||
| 8324 | /// vaArgPackLen : __builtin_va_arg_pack_len '(' ')' | ||
| 8325 | fn builtinVaArgPackLen(p: *Parser, builtin_tok: TokenIndex) Error!Result { | ||
| 8326 | const l_paren = try p.expectToken(.l_paren); | ||
| 8327 | try p.expectClosing(l_paren, .r_paren); | ||
| 8328 | |||
| 8329 | _ = try p.checkVaPackFunc(builtin_tok, "__builtin_va_arg_pack_len"); | ||
| 8330 | |||
| 8331 | return .{ | ||
| 8332 | .qt = .int, | ||
| 8333 | .node = try p.addNode(.{ | ||
| 8334 | .builtin_va_arg_pack_len = .{ | ||
| 8335 | .builtin_tok = builtin_tok, | ||
| 8336 | }, | ||
| 8337 | }), | ||
| 8338 | }; | ||
| 8339 | } | ||
| 8340 | |||
| 8341 | fn checkVaPackFunc(p: *Parser, builtin_tok: TokenIndex, va_func_name: []const u8) !bool { | ||
| 8342 | const func_qt, _ = (try p.checkVaFunc(builtin_tok, va_func_name)) orelse return false; | ||
| 8343 | |||
| 8344 | var it = Attribute.Iterator.initType(func_qt, p.comp); | ||
| 8345 | while (it.next()) |item| switch (item[0].tag) { | ||
| 8346 | .always_inline, .gnu_inline => break, | ||
| 8347 | else => {}, | ||
| 8348 | } else { | ||
| 8349 | try p.err(builtin_tok, .va_func_not_always_inline, .{va_func_name}); | ||
| 8350 | return false; | ||
| 8351 | } | ||
| 8352 | return true; | ||
| 8353 | } | ||
| 8354 | |||
| 8261 | const OffsetKind = enum { bits, bytes }; | 8355 | const OffsetKind = enum { bits, bytes }; |
| 8262 | 8356 | ||
| 8263 | /// offsetof | 8357 | /// offsetof |
| ... | @@ -8504,7 +8598,6 @@ fn unExpr(p: *Parser) Error!?Result { | ... | @@ -8504,7 +8598,6 @@ fn unExpr(p: *Parser) Error!?Result { |
| 8504 | 8598 | ||
| 8505 | operand.qt = try p.comp.type_store.put(gpa, .{ .pointer = .{ | 8599 | operand.qt = try p.comp.type_store.put(gpa, .{ .pointer = .{ |
| 8506 | .child = operand.qt, | 8600 | .child = operand.qt, |
| 8507 | .decayed = null, | ||
| 8508 | } }); | 8601 | } }); |
| 8509 | } | 8602 | } |
| 8510 | if (p.getNode(operand.node, .decl_ref_expr)) |decl_ref| { | 8603 | if (p.getNode(operand.node, .decl_ref_expr)) |decl_ref| { |
| ... | @@ -8596,6 +8689,9 @@ fn unExpr(p: *Parser) Error!?Result { | ... | @@ -8596,6 +8689,9 @@ fn unExpr(p: *Parser) Error!?Result { |
| 8596 | try p.err(tok, .not_assignable, .{}); | 8689 | try p.err(tok, .not_assignable, .{}); |
| 8597 | return error.ParsingFailed; | 8690 | return error.ParsingFailed; |
| 8598 | } | 8691 | } |
| 8692 | if (operand.qt.get(p.comp, .pointer)) |pointer| { | ||
| 8693 | try p.checkPtrArithmeticAllowed(pointer, p.tok_i, operand.node); | ||
| 8694 | } | ||
| 8599 | try operand.usualUnaryConversion(p, tok); | 8695 | try operand.usualUnaryConversion(p, tok); |
| 8600 | 8696 | ||
| 8601 | if (operand.val.is(.int, p.comp) or operand.val.is(.int, p.comp)) { | 8697 | if (operand.val.is(.int, p.comp) or operand.val.is(.int, p.comp)) { |
| ... | @@ -8624,6 +8720,9 @@ fn unExpr(p: *Parser) Error!?Result { | ... | @@ -8624,6 +8720,9 @@ fn unExpr(p: *Parser) Error!?Result { |
| 8624 | try p.err(tok, .not_assignable, .{}); | 8720 | try p.err(tok, .not_assignable, .{}); |
| 8625 | return error.ParsingFailed; | 8721 | return error.ParsingFailed; |
| 8626 | } | 8722 | } |
| 8723 | if (operand.qt.get(p.comp, .pointer)) |pointer| { | ||
| 8724 | try p.checkPtrArithmeticAllowed(pointer, p.tok_i, operand.node); | ||
| 8725 | } | ||
| 8627 | try operand.usualUnaryConversion(p, tok); | 8726 | try operand.usualUnaryConversion(p, tok); |
| 8628 | 8727 | ||
| 8629 | if (operand.val.is(.int, p.comp) or operand.val.is(.int, p.comp)) { | 8728 | if (operand.val.is(.int, p.comp) or operand.val.is(.int, p.comp)) { |
| ... | @@ -8826,7 +8925,7 @@ fn unExpr(p: *Parser) Error!?Result { | ... | @@ -8826,7 +8925,7 @@ fn unExpr(p: *Parser) Error!?Result { |
| 8826 | } else switch (p.comp.langopts.emulate) { | 8925 | } else switch (p.comp.langopts.emulate) { |
| 8827 | .msvc => {}, // Doesn't support `_Complex` or `__imag` in the first place | 8926 | .msvc => {}, // Doesn't support `_Complex` or `__imag` in the first place |
| 8828 | .gcc => operand.val = .zero, | 8927 | .gcc => operand.val = .zero, |
| 8829 | .clang => { | 8928 | .clang, .no => { |
| 8830 | if (operand.val.is(.int, p.comp) or operand.val.is(.float, p.comp)) { | 8929 | if (operand.val.is(.int, p.comp) or operand.val.is(.float, p.comp)) { |
| 8831 | operand.val = .zero; | 8930 | operand.val = .zero; |
| 8832 | } else { | 8931 | } else { |
| ... | @@ -8886,7 +8985,7 @@ fn compoundLiteral(p: *Parser, qt_opt: ?QualType, opt_l_paren: ?TokenIndex) Erro | ... | @@ -8886,7 +8985,7 @@ fn compoundLiteral(p: *Parser, qt_opt: ?QualType, opt_l_paren: ?TokenIndex) Erro |
| 8886 | try p.err(tok, .invalid_compound_literal_storage_class, .{@tagName(d.storage_class)}); | 8985 | try p.err(tok, .invalid_compound_literal_storage_class, .{@tagName(d.storage_class)}); |
| 8887 | d.storage_class = .none; | 8986 | d.storage_class = .none; |
| 8888 | }, | 8987 | }, |
| 8889 | .register => if (p.func.qt == null) try p.err(p.tok_i, .illegal_storage_on_global, .{}), | 8988 | .register => if (p.func.qt == null) try p.err(p.tok_i, .register_on_global_compound_literal, .{}), |
| 8890 | else => {}, | 8989 | else => {}, |
| 8891 | } | 8990 | } |
| 8892 | 8991 | ||
| ... | @@ -8968,6 +9067,9 @@ fn suffixExpr(p: *Parser, lhs: Result) Error!?Result { | ... | @@ -8968,6 +9067,9 @@ fn suffixExpr(p: *Parser, lhs: Result) Error!?Result { |
| 8968 | try p.err(p.tok_i, .not_assignable, .{}); | 9067 | try p.err(p.tok_i, .not_assignable, .{}); |
| 8969 | return error.ParsingFailed; | 9068 | return error.ParsingFailed; |
| 8970 | } | 9069 | } |
| 9070 | if (operand.qt.get(p.comp, .pointer)) |pointer| { | ||
| 9071 | try p.checkPtrArithmeticAllowed(pointer, p.tok_i, operand.node); | ||
| 9072 | } | ||
| 8971 | try operand.usualUnaryConversion(p, p.tok_i); | 9073 | try operand.usualUnaryConversion(p, p.tok_i); |
| 8972 | 9074 | ||
| 8973 | try operand.un(p, .post_inc_expr, p.tok_i); | 9075 | try operand.un(p, .post_inc_expr, p.tok_i); |
| ... | @@ -8989,6 +9091,9 @@ fn suffixExpr(p: *Parser, lhs: Result) Error!?Result { | ... | @@ -8989,6 +9091,9 @@ fn suffixExpr(p: *Parser, lhs: Result) Error!?Result { |
| 8989 | try p.err(p.tok_i, .not_assignable, .{}); | 9091 | try p.err(p.tok_i, .not_assignable, .{}); |
| 8990 | return error.ParsingFailed; | 9092 | return error.ParsingFailed; |
| 8991 | } | 9093 | } |
| 9094 | if (operand.qt.get(p.comp, .pointer)) |pointer| { | ||
| 9095 | try p.checkPtrArithmeticAllowed(pointer, p.tok_i, operand.node); | ||
| 9096 | } | ||
| 8992 | try operand.usualUnaryConversion(p, p.tok_i); | 9097 | try operand.usualUnaryConversion(p, p.tok_i); |
| 8993 | 9098 | ||
| 8994 | try operand.un(p, .post_dec_expr, p.tok_i); | 9099 | try operand.un(p, .post_dec_expr, p.tok_i); |
| ... | @@ -9003,6 +9108,7 @@ fn suffixExpr(p: *Parser, lhs: Result) Error!?Result { | ... | @@ -9003,6 +9108,7 @@ fn suffixExpr(p: *Parser, lhs: Result) Error!?Result { |
| 9003 | const array_before_conversion = lhs; | 9108 | const array_before_conversion = lhs; |
| 9004 | const index_before_conversion = index; | 9109 | const index_before_conversion = index; |
| 9005 | var ptr = lhs; | 9110 | var ptr = lhs; |
| 9111 | |||
| 9006 | try ptr.lvalConversion(p, l_bracket); | 9112 | try ptr.lvalConversion(p, l_bracket); |
| 9007 | try index.lvalConversion(p, l_bracket); | 9113 | try index.lvalConversion(p, l_bracket); |
| 9008 | if (ptr.qt.get(p.comp, .pointer)) |pointer_ty| { | 9114 | if (ptr.qt.get(p.comp, .pointer)) |pointer_ty| { |
| ... | @@ -9176,14 +9282,7 @@ fn checkVaStartArg(p: *Parser, builtin_tok: TokenIndex, first_after: TokenIndex, | ... | @@ -9176,14 +9282,7 @@ fn checkVaStartArg(p: *Parser, builtin_tok: TokenIndex, first_after: TokenIndex, |
| 9176 | return error.ParsingFailed; | 9282 | return error.ParsingFailed; |
| 9177 | } | 9283 | } |
| 9178 | 9284 | ||
| 9179 | const func_qt = p.func.qt orelse { | 9285 | _, const func_ty = (try p.checkVaFunc(builtin_tok, "va_start")) orelse return; |
| 9180 | try p.err(builtin_tok, .va_start_not_in_func, .{}); | ||
| 9181 | return; | ||
| 9182 | }; | ||
| 9183 | const func_ty = func_qt.get(p.comp, .func) orelse return; | ||
| 9184 | if (func_ty.kind != .variadic or func_ty.params.len == 0) { | ||
| 9185 | return p.err(builtin_tok, .va_start_fixed_args, .{}); | ||
| 9186 | } | ||
| 9187 | const last_param_name = func_ty.params[func_ty.params.len - 1].name; | 9286 | const last_param_name = func_ty.params[func_ty.params.len - 1].name; |
| 9188 | const decl_ref = p.getNode(arg.node, .decl_ref_expr); | 9287 | const decl_ref = p.getNode(arg.node, .decl_ref_expr); |
| 9189 | if (decl_ref == null or last_param_name != try p.comp.internString(p.tokSlice(decl_ref.?.name_tok))) { | 9288 | 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, | ... | @@ -9191,6 +9290,19 @@ fn checkVaStartArg(p: *Parser, builtin_tok: TokenIndex, first_after: TokenIndex, |
| 9191 | } | 9290 | } |
| 9192 | } | 9291 | } |
| 9193 | 9292 | ||
| 9293 | fn checkVaFunc(p: *Parser, builtin_tok: TokenIndex, va_func_name: []const u8) !?struct { QualType, Type.Func } { | ||
| 9294 | const func_qt = p.func.qt orelse { | ||
| 9295 | try p.err(builtin_tok, .va_func_not_in_func, .{va_func_name}); | ||
| 9296 | return null; | ||
| 9297 | }; | ||
| 9298 | const func_ty = func_qt.get(p.comp, .func) orelse return null; | ||
| 9299 | if (func_ty.kind != .variadic or func_ty.params.len == 0) { | ||
| 9300 | try p.err(builtin_tok, .va_func_fixed_args, .{va_func_name}); | ||
| 9301 | return null; | ||
| 9302 | } | ||
| 9303 | return .{ func_qt, func_ty }; | ||
| 9304 | } | ||
| 9305 | |||
| 9194 | fn checkArithOverflowArg(p: *Parser, builtin_tok: TokenIndex, first_after: TokenIndex, param_tok: TokenIndex, arg: *Result, idx: u32) !void { | 9306 | fn checkArithOverflowArg(p: *Parser, builtin_tok: TokenIndex, first_after: TokenIndex, param_tok: TokenIndex, arg: *Result, idx: u32) !void { |
| 9195 | _ = builtin_tok; | 9307 | _ = builtin_tok; |
| 9196 | _ = first_after; | 9308 | _ = first_after; |
| ... | @@ -9320,7 +9432,7 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result { | ... | @@ -9320,7 +9432,7 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result { |
| 9320 | 9432 | ||
| 9321 | // We cannot refer to the function type here because the pointer to | 9433 | // We cannot refer to the function type here because the pointer to |
| 9322 | // type_store.extra might get invalidated while parsing args. | 9434 | // type_store.extra might get invalidated while parsing args. |
| 9323 | const func_qt, const params_len, const func_kind = blk: { | 9435 | const func_qt, const typed_params_len, const func_kind_base = blk: { |
| 9324 | var base_qt = lhs.qt; | 9436 | var base_qt = lhs.qt; |
| 9325 | if (base_qt.get(p.comp, .pointer)) |pointer_ty| base_qt = pointer_ty.child; | 9437 | if (base_qt.get(p.comp, .pointer)) |pointer_ty| base_qt = pointer_ty.child; |
| 9326 | if (base_qt.isInvalid()) break :blk .{ base_qt, std.math.maxInt(usize), undefined }; | 9438 | 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 { | ... | @@ -9343,9 +9455,44 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result { |
| 9343 | 9455 | ||
| 9344 | const call_expr = CallExpr.init(p, lhs.node, func.node); | 9456 | const call_expr = CallExpr.init(p, lhs.node, func.node); |
| 9345 | 9457 | ||
| 9458 | const param_len_override = call_expr.paramCountOverride(); | ||
| 9459 | const params_len = param_len_override orelse typed_params_len; | ||
| 9460 | const func_kind = if (param_len_override != null) .normal else func_kind_base; | ||
| 9461 | |||
| 9346 | while (p.eatToken(.r_paren) == null) { | 9462 | while (p.eatToken(.r_paren) == null) { |
| 9347 | const param_tok = p.tok_i; | 9463 | const param_tok = p.tok_i; |
| 9348 | if (arg_count == params_len) first_after = p.tok_i; | 9464 | if (arg_count == params_len) first_after = p.tok_i; |
| 9465 | |||
| 9466 | // Check for __builtin_va_arg_pack | ||
| 9467 | { | ||
| 9468 | var i = p.tok_i; | ||
| 9469 | loop: switch (p.tok_ids[i]) { | ||
| 9470 | .l_paren => { | ||
| 9471 | i += 1; | ||
| 9472 | continue :loop p.tok_ids[i]; | ||
| 9473 | }, | ||
| 9474 | .identifier => if (mem.eql(u8, p.tokSlice(i), "__builtin_va_arg_pack")) { | ||
| 9475 | @branchHint(.cold); | ||
| 9476 | p.va_arg_pack_ctx = .{ | ||
| 9477 | .valid = true, | ||
| 9478 | .variadic = func_kind != .normal, | ||
| 9479 | .typed = arg_count < typed_params_len, | ||
| 9480 | }; | ||
| 9481 | defer p.va_arg_pack_ctx = .{}; | ||
| 9482 | |||
| 9483 | const arg = try p.expect(assignExpr); | ||
| 9484 | try p.list_buf.append(gpa, arg.node); | ||
| 9485 | arg_count += 1; | ||
| 9486 | if (p.eatToken(.comma)) |_| { | ||
| 9487 | try p.err(i, .va_pack_non_final_arg, .{}); | ||
| 9488 | continue; | ||
| 9489 | } | ||
| 9490 | try p.expectClosing(l_paren, .r_paren); | ||
| 9491 | break; | ||
| 9492 | }, | ||
| 9493 | else => {}, | ||
| 9494 | } | ||
| 9495 | } | ||
| 9349 | var arg = try p.expect(assignExpr); | 9496 | var arg = try p.expect(assignExpr); |
| 9350 | 9497 | ||
| 9351 | if (call_expr.shouldPerformLvalConversion(arg_count)) { | 9498 | if (call_expr.shouldPerformLvalConversion(arg_count)) { |
| ... | @@ -9353,7 +9500,7 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result { | ... | @@ -9353,7 +9500,7 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result { |
| 9353 | } | 9500 | } |
| 9354 | if ((arg.qt.hasIncompleteSize(p.comp) and !arg.qt.is(p.comp, .void)) or arg.qt.isInvalid()) return error.ParsingFailed; | 9501 | if ((arg.qt.hasIncompleteSize(p.comp) and !arg.qt.is(p.comp, .void)) or arg.qt.isInvalid()) return error.ParsingFailed; |
| 9355 | 9502 | ||
| 9356 | if (arg_count >= params_len) { | 9503 | if (arg_count >= typed_params_len) { |
| 9357 | if (call_expr.shouldPromoteVarArg(arg_count)) switch (arg.qt.base(p.comp).type) { | 9504 | if (call_expr.shouldPromoteVarArg(arg_count)) switch (arg.qt.base(p.comp).type) { |
| 9358 | .int => |int_ty| if (int_ty == .int) try arg.castToInt(p, arg.qt.promoteInt(p.comp), param_tok), | 9505 | .int => |int_ty| if (int_ty == .int) try arg.castToInt(p, arg.qt.promoteInt(p.comp), param_tok), |
| 9359 | .float => |float_ty| if (float_ty == .double) try arg.castToFloat(p, .double, param_tok), | 9506 | .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 { | ... | @@ -9407,19 +9554,23 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result { |
| 9407 | } | 9554 | } |
| 9408 | if (func_qt.isInvalid()) { | 9555 | if (func_qt.isInvalid()) { |
| 9409 | // Skip argument count checks. | 9556 | // Skip argument count checks. |
| 9410 | return try call_expr.finish(p, func_qt, list_buf_top, l_paren); | 9557 | return try call_expr.finish(p, func_qt, list_buf_top, l_paren, false); |
| 9411 | } | 9558 | } |
| 9412 | 9559 | ||
| 9413 | if (call_expr.paramCountOverride()) |expected| { | 9560 | const r_paren = p.tok_i - 1; |
| 9414 | if (expected != arg_count) { | 9561 | var args_ok = true; |
| 9415 | try p.err(first_after, .expected_arguments, .{ expected, arg_count }); | 9562 | switch (func_kind) { |
| 9416 | } | ||
| 9417 | } else switch (func_kind) { | ||
| 9418 | .normal => if (params_len != arg_count) { | 9563 | .normal => if (params_len != arg_count) { |
| 9419 | try p.err(first_after, .expected_arguments, .{ params_len, arg_count }); | 9564 | try p.err( |
| 9565 | if (arg_count < params_len) r_paren else first_after, | ||
| 9566 | .expected_arguments, | ||
| 9567 | .{ params_len, arg_count }, | ||
| 9568 | ); | ||
| 9569 | args_ok = false; | ||
| 9420 | }, | 9570 | }, |
| 9421 | .variadic => if (arg_count < params_len) { | 9571 | .variadic => if (arg_count < params_len) { |
| 9422 | try p.err(first_after, .expected_at_least_arguments, .{ params_len, arg_count }); | 9572 | try p.err(r_paren, .expected_at_least_arguments, .{ params_len, arg_count }); |
| 9573 | args_ok = false; | ||
| 9423 | }, | 9574 | }, |
| 9424 | .old_style => if (params_len != arg_count) { | 9575 | .old_style => if (params_len != arg_count) { |
| 9425 | if (params_len == 0) | 9576 | if (params_len == 0) |
| ... | @@ -9429,10 +9580,60 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result { | ... | @@ -9429,10 +9580,60 @@ fn callExpr(p: *Parser, lhs: Result) Error!Result { |
| 9429 | }, | 9580 | }, |
| 9430 | } | 9581 | } |
| 9431 | 9582 | ||
| 9432 | return try call_expr.finish(p, func_qt, list_buf_top, l_paren); | 9583 | return try call_expr.finish(p, func_qt, list_buf_top, l_paren, args_ok); |
| 9584 | } | ||
| 9585 | |||
| 9586 | fn boundsSafetyCheckArrayAccess(p: *Parser, lhs: Result, rhs: Result, l_bracket: TokenIndex) !void { | ||
| 9587 | if (!p.comp.hasClangStyleBoundsSafety()) return; | ||
| 9588 | |||
| 9589 | 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 }; | ||
| 9590 | |||
| 9591 | switch (pointer.bounds) { | ||
| 9592 | .c, .unsafe_indexable => {}, | ||
| 9593 | .single => { | ||
| 9594 | if (!index.val.isZero(p.comp)) { | ||
| 9595 | try p.err(l_bracket, .single_requires_zero_index, .{}); | ||
| 9596 | if (p.unwrapNestedOperation(ptr_res.node)) |unwrapped| { | ||
| 9597 | const name = p.tokSlice(unwrapped.name_tok); | ||
| 9598 | try p.issueBoundsDeclaredHereNote(unwrapped, name, pointer.bounds); | ||
| 9599 | } | ||
| 9600 | } | ||
| 9601 | }, | ||
| 9602 | } | ||
| 9603 | } | ||
| 9604 | |||
| 9605 | fn boundsSafetyCheckPointerArithmetic(p: *Parser, lhs: QualType, rhs: QualType, tok: TokenIndex, node: Tree.Node.Index) !void { | ||
| 9606 | if (!p.comp.hasClangStyleBoundsSafety()) return; | ||
| 9607 | |||
| 9608 | const pointer = if (rhs.isInt(p.comp)) | ||
| 9609 | lhs.get(p.comp, .pointer) orelse return | ||
| 9610 | else if (lhs.isInt(p.comp)) | ||
| 9611 | rhs.get(p.comp, .pointer) orelse return | ||
| 9612 | else | ||
| 9613 | return; | ||
| 9614 | |||
| 9615 | try p.checkPtrArithmeticAllowed(pointer, tok, node); | ||
| 9616 | } | ||
| 9617 | |||
| 9618 | fn checkPtrArithmeticAllowed(p: *Parser, pointer: Type.Pointer, tok: TokenIndex, node: Tree.Node.Index) !void { | ||
| 9619 | if (!p.comp.hasClangStyleBoundsSafety()) return; | ||
| 9620 | |||
| 9621 | switch (pointer.bounds) { | ||
| 9622 | .c, .unsafe_indexable => {}, | ||
| 9623 | .single => { | ||
| 9624 | // clang issues this diagnostic even with a constant `0` operand | ||
| 9625 | try p.err(tok, .pointer_arith_single, .{}); | ||
| 9626 | if (p.unwrapNestedOperation(node)) |unwrapped| { | ||
| 9627 | const name = p.tokSlice(unwrapped.name_tok); | ||
| 9628 | try p.issueBoundsDeclaredHereNote(unwrapped, name, pointer.bounds); | ||
| 9629 | } | ||
| 9630 | }, | ||
| 9631 | } | ||
| 9433 | } | 9632 | } |
| 9434 | 9633 | ||
| 9435 | fn checkArrayBounds(p: *Parser, index: Result, array: Result, tok: TokenIndex) !void { | 9634 | fn checkArrayBounds(p: *Parser, index: Result, array: Result, tok: TokenIndex) !void { |
| 9635 | try p.boundsSafetyCheckArrayAccess(array, index, tok); | ||
| 9636 | |||
| 9436 | if (index.val.opt_ref == .none) return; | 9637 | if (index.val.opt_ref == .none) return; |
| 9437 | 9638 | ||
| 9438 | const array_len = array.qt.arrayLen(p.comp) orelse return; | 9639 | const array_len = array.qt.arrayLen(p.comp) orelse return; |
| ... | @@ -9579,6 +9780,8 @@ fn primaryExpr(p: *Parser) Error!?Result { | ... | @@ -9579,6 +9780,8 @@ fn primaryExpr(p: *Parser) Error!?Result { |
| 9579 | .common => |tag| switch (tag) { | 9780 | .common => |tag| switch (tag) { |
| 9580 | .__builtin_choose_expr => return try p.builtinChooseExpr(), | 9781 | .__builtin_choose_expr => return try p.builtinChooseExpr(), |
| 9581 | .__builtin_va_arg => return try p.builtinVaArg(name_tok), | 9782 | .__builtin_va_arg => return try p.builtinVaArg(name_tok), |
| 9783 | .__builtin_va_arg_pack => return try p.builtinVaArgPack(name_tok), | ||
| 9784 | .__builtin_va_arg_pack_len => return try p.builtinVaArgPackLen(name_tok), | ||
| 9582 | .__builtin_offsetof => return try p.builtinOffsetof(name_tok, .bytes), | 9785 | .__builtin_offsetof => return try p.builtinOffsetof(name_tok, .bytes), |
| 9583 | .__builtin_bitoffsetof => return try p.builtinOffsetof(name_tok, .bits), | 9786 | .__builtin_bitoffsetof => return try p.builtinOffsetof(name_tok, .bits), |
| 9584 | .__builtin_types_compatible_p => return try p.typesCompatible(name_tok), | 9787 | .__builtin_types_compatible_p => return try p.typesCompatible(name_tok), |
| ... | @@ -9720,7 +9923,7 @@ fn primaryExpr(p: *Parser) Error!?Result { | ... | @@ -9720,7 +9923,7 @@ fn primaryExpr(p: *Parser) Error!?Result { |
| 9720 | qt = some.qt; | 9923 | qt = some.qt; |
| 9721 | } else if (p.func.qt) |func_qt| { | 9924 | } else if (p.func.qt) |func_qt| { |
| 9722 | var sf = std.heap.stackFallback(1024, gpa); | 9925 | var sf = std.heap.stackFallback(1024, gpa); |
| 9723 | var allocating: Io.Writer.Allocating = .init(sf.get()); | 9926 | var allocating: std.Io.Writer.Allocating = .init(sf.get()); |
| 9724 | defer allocating.deinit(); | 9927 | defer allocating.deinit(); |
| 9725 | 9928 | ||
| 9726 | func_qt.printNamed(p.tokSlice(p.func.name), p.comp, &allocating.writer) catch return error.OutOfMemory; | 9929 | 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 | ... | @@ -10277,16 +10480,13 @@ fn fixedSizeInt(p: *Parser, base: u8, buf: []const u8, suffix: NumberSuffix, tok |
| 10277 | if (res.qt.intRankOrder(suffix_qt, p.comp).compare(.lt)) continue; | 10480 | if (res.qt.intRankOrder(suffix_qt, p.comp).compare(.lt)) continue; |
| 10278 | const max_int = try Value.maxInt(res.qt, p.comp); | 10481 | const max_int = try Value.maxInt(res.qt, p.comp); |
| 10279 | if (interned_val.compare(.lte, max_int, p.comp)) break; | 10482 | if (interned_val.compare(.lte, max_int, p.comp)) break; |
| 10280 | } else { | 10483 | } else switch (p.comp.langopts.emulate) { |
| 10281 | if (p.comp.langopts.emulate == .gcc) { | 10484 | .no, .gcc => if (p.comp.target.hasInt128()) { |
| 10282 | if (p.comp.target.hasInt128()) { | 10485 | res.qt = .int128; |
| 10283 | res.qt = .int128; | ||
| 10284 | } else { | ||
| 10285 | res.qt = .long_long; | ||
| 10286 | } | ||
| 10287 | } else { | 10486 | } else { |
| 10288 | res.qt = .ulong_long; | 10487 | res.qt = .long_long; |
| 10289 | } | 10488 | }, |
| 10489 | .msvc, .clang => res.qt = .ulong_long, | ||
| 10290 | } | 10490 | } |
| 10291 | 10491 | ||
| 10292 | res.node = try p.addNode(.{ .int_literal = .{ .qt = res.qt, .literal_tok = tok_i } }); | 10492 | res.node = try p.addNode(.{ .int_literal = .{ .qt = res.qt, .literal_tok = tok_i } }); |
| ... | @@ -10604,12 +10804,7 @@ fn genericSelection(p: *Parser) Error!?Result { | ... | @@ -10604,12 +10804,7 @@ fn genericSelection(p: *Parser) Error!?Result { |
| 10604 | } | 10804 | } |
| 10605 | 10805 | ||
| 10606 | test "Node locations" { | 10806 | test "Node locations" { |
| 10607 | var arena_state: std.heap.ArenaAllocator = .init(std.testing.allocator); | 10807 | var comp = try Compilation.init(.testing); |
| 10608 | defer arena_state.deinit(); | ||
| 10609 | const arena = arena_state.allocator(); | ||
| 10610 | |||
| 10611 | var diagnostics: Diagnostics = .{ .output = .ignore }; | ||
| 10612 | var comp = Compilation.init(std.testing.allocator, arena, std.testing.io, &diagnostics, Io.Dir.cwd()); | ||
| 10613 | defer comp.deinit(); | 10808 | defer comp.deinit(); |
| 10614 | 10809 | ||
| 10615 | const file = try comp.addSourceFromBuffer("file.c", | 10810 | const file = try comp.addSourceFromBuffer("file.c", |
| ... | @@ -10621,7 +10816,7 @@ test "Node locations" { | ... | @@ -10621,7 +10816,7 @@ test "Node locations" { |
| 10621 | 10816 | ||
| 10622 | const builtin_macros = try comp.generateBuiltinMacros(.no_system_defines); | 10817 | const builtin_macros = try comp.generateBuiltinMacros(.no_system_defines); |
| 10623 | 10818 | ||
| 10624 | var pp = Preprocessor.init(&comp, .default); | 10819 | var pp = try Preprocessor.init(&comp, .testing); |
| 10625 | defer pp.deinit(); | 10820 | defer pp.deinit(); |
| 10626 | try pp.addBuiltinMacros(); | 10821 | try pp.addBuiltinMacros(); |
| 10627 | 10822 | ||
| ... | @@ -10633,7 +10828,6 @@ test "Node locations" { | ... | @@ -10633,7 +10828,6 @@ test "Node locations" { |
| 10633 | var tree = try Parser.parse(&pp); | 10828 | var tree = try Parser.parse(&pp); |
| 10634 | defer tree.deinit(); | 10829 | defer tree.deinit(); |
| 10635 | 10830 | ||
| 10636 | try std.testing.expectEqual(0, comp.diagnostics.total); | ||
| 10637 | for (tree.root_decls.items[tree.root_decls.items.len - 3 ..], 0..) |node, i| { | 10831 | for (tree.root_decls.items[tree.root_decls.items.len - 3 ..], 0..) |node, i| { |
| 10638 | const slice = tree.tokSlice(node.tok(&tree)); | 10832 | const slice = tree.tokSlice(node.tok(&tree)); |
| 10639 | const expected_slice = switch (i) { | 10833 | const expected_slice = switch (i) { |
lib/compiler/aro/aro/Parser/Diagnostic.zig+79-19| ... | @@ -79,9 +79,9 @@ pub const expected_integer_constant_expr: Diagnostic = .{ | ... | @@ -79,9 +79,9 @@ pub const expected_integer_constant_expr: Diagnostic = .{ |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | pub const missing_type_specifier: Diagnostic = .{ | 81 | pub const missing_type_specifier: Diagnostic = .{ |
| 82 | .fmt = "type specifier missing, defaults to 'int'", | 82 | .fmt = "type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int", |
| 83 | .opt = .@"implicit-int", | 83 | .opt = .@"implicit-int", |
| 84 | .kind = .warning, | 84 | .kind = .@"error", |
| 85 | }; | 85 | }; |
| 86 | 86 | ||
| 87 | pub const missing_type_specifier_c23: Diagnostic = .{ | 87 | pub const missing_type_specifier_c23: Diagnostic = .{ |
| ... | @@ -90,9 +90,9 @@ pub const missing_type_specifier_c23: Diagnostic = .{ | ... | @@ -90,9 +90,9 @@ pub const missing_type_specifier_c23: Diagnostic = .{ |
| 90 | }; | 90 | }; |
| 91 | 91 | ||
| 92 | pub const param_not_declared: Diagnostic = .{ | 92 | pub const param_not_declared: Diagnostic = .{ |
| 93 | .fmt = "parameter '{s}' was not declared, defaults to 'int'", | 93 | .fmt = "parameter '{s}' was not declared, defaults to 'int'; ISO C99 and later do not support implicit int", |
| 94 | .opt = .@"implicit-int", | 94 | .opt = .@"implicit-int", |
| 95 | .kind = .warning, | 95 | .kind = .@"error", |
| 96 | .extension = true, | 96 | .extension = true, |
| 97 | }; | 97 | }; |
| 98 | 98 | ||
| ... | @@ -216,8 +216,13 @@ pub const illegal_storage_on_func: Diagnostic = .{ | ... | @@ -216,8 +216,13 @@ pub const illegal_storage_on_func: Diagnostic = .{ |
| 216 | .kind = .@"error", | 216 | .kind = .@"error", |
| 217 | }; | 217 | }; |
| 218 | 218 | ||
| 219 | pub const illegal_storage_on_global: Diagnostic = .{ | 219 | pub const auto_on_global: Diagnostic = .{ |
| 220 | .fmt = "illegal storage class on global variable", | 220 | .fmt = "'auto' specified on global variable", |
| 221 | .kind = .@"error", | ||
| 222 | }; | ||
| 223 | |||
| 224 | pub const register_on_global: Diagnostic = .{ | ||
| 225 | .fmt = "register name not specified for global variable", | ||
| 221 | .kind = .@"error", | 226 | .kind = .@"error", |
| 222 | }; | 227 | }; |
| 223 | 228 | ||
| ... | @@ -1507,13 +1512,38 @@ pub const builtin_must_be_called: Diagnostic = .{ | ... | @@ -1507,13 +1512,38 @@ pub const builtin_must_be_called: Diagnostic = .{ |
| 1507 | .kind = .@"error", | 1512 | .kind = .@"error", |
| 1508 | }; | 1513 | }; |
| 1509 | 1514 | ||
| 1510 | pub const va_start_not_in_func: Diagnostic = .{ | 1515 | pub const va_func_not_in_func: Diagnostic = .{ |
| 1511 | .fmt = "'va_start' cannot be used outside a function", | 1516 | .fmt = "'{s}' cannot be used outside a function", |
| 1517 | .kind = .@"error", | ||
| 1518 | }; | ||
| 1519 | |||
| 1520 | pub const va_func_fixed_args: Diagnostic = .{ | ||
| 1521 | .fmt = "'{s}' used in a function with fixed args", | ||
| 1522 | .kind = .@"error", | ||
| 1523 | }; | ||
| 1524 | |||
| 1525 | pub const va_func_not_always_inline: Diagnostic = .{ | ||
| 1526 | .fmt = "'{s}' used in a function that is not always inlined", | ||
| 1527 | .kind = .@"error", | ||
| 1528 | }; | ||
| 1529 | |||
| 1530 | pub const va_pack_non_call: Diagnostic = .{ | ||
| 1531 | .fmt = "'__va_arg_pack' used outside a call", | ||
| 1532 | .kind = .@"error", | ||
| 1533 | }; | ||
| 1534 | |||
| 1535 | pub const va_pack_non_variadic_call: Diagnostic = .{ | ||
| 1536 | .fmt = "'__va_arg_pack' passed to non-variadic function", | ||
| 1537 | .kind = .@"error", | ||
| 1538 | }; | ||
| 1539 | |||
| 1540 | pub const va_pack_non_variadic_arg: Diagnostic = .{ | ||
| 1541 | .fmt = "'__va_arg_pack' passed as non-variadic argument", | ||
| 1512 | .kind = .@"error", | 1542 | .kind = .@"error", |
| 1513 | }; | 1543 | }; |
| 1514 | 1544 | ||
| 1515 | pub const va_start_fixed_args: Diagnostic = .{ | 1545 | pub const va_pack_non_final_arg: Diagnostic = .{ |
| 1516 | .fmt = "'va_start' used in a function with fixed args", | 1546 | .fmt = "'__va_arg_pack' is not the final argument", |
| 1517 | .kind = .@"error", | 1547 | .kind = .@"error", |
| 1518 | }; | 1548 | }; |
| 1519 | 1549 | ||
| ... | @@ -2258,11 +2288,11 @@ pub const unterminated_char_literal_error: Diagnostic = .{ | ... | @@ -2258,11 +2288,11 @@ pub const unterminated_char_literal_error: Diagnostic = .{ |
| 2258 | .kind = .@"error", | 2288 | .kind = .@"error", |
| 2259 | }; | 2289 | }; |
| 2260 | 2290 | ||
| 2261 | // pub const def_no_proto_deprecated: Diagnostic = .{ | 2291 | pub const def_no_proto_deprecated: Diagnostic = .{ |
| 2262 | // .fmt = "a function definition without a prototype is deprecated in all versions of C and is not supported in C23", | 2292 | .fmt = "a function definition without a prototype is deprecated in all versions of C and is not supported in C23", |
| 2263 | // .kind = .warning, | 2293 | .kind = .warning, |
| 2264 | // .opt = .@"deprecated-non-prototype", | 2294 | .opt = .@"deprecated-non-prototype", |
| 2265 | // }; | 2295 | }; |
| 2266 | 2296 | ||
| 2267 | pub const passing_args_to_kr: Diagnostic = .{ | 2297 | pub const passing_args_to_kr: Diagnostic = .{ |
| 2268 | .fmt = "passing arguments to a function without a prototype is deprecated in all versions of C and is not supported in C23", | 2298 | .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 = .{ | ... | @@ -2296,6 +2326,11 @@ pub const invalid_compound_literal_storage_class: Diagnostic = .{ |
| 2296 | .kind = .@"error", | 2326 | .kind = .@"error", |
| 2297 | }; | 2327 | }; |
| 2298 | 2328 | ||
| 2329 | pub const register_on_global_compound_literal: Diagnostic = .{ | ||
| 2330 | .fmt = "file scope compound literal specifies 'register'", | ||
| 2331 | .kind = .@"error", | ||
| 2332 | }; | ||
| 2333 | |||
| 2299 | pub const identifier_not_normalized: Diagnostic = .{ | 2334 | pub const identifier_not_normalized: Diagnostic = .{ |
| 2300 | .fmt = "'{normalized}' is not in NFC", | 2335 | .fmt = "'{normalized}' is not in NFC", |
| 2301 | .kind = .warning, | 2336 | .kind = .warning, |
| ... | @@ -2465,10 +2500,9 @@ pub const declared_const_here: Diagnostic = .{ | ... | @@ -2465,10 +2500,9 @@ pub const declared_const_here: Diagnostic = .{ |
| 2465 | .kind = .note, | 2500 | .kind = .note, |
| 2466 | }; | 2501 | }; |
| 2467 | 2502 | ||
| 2468 | pub const nonnull_not_applicable: Diagnostic = .{ | 2503 | pub const pointer_bounds_declared_here: Diagnostic = .{ |
| 2469 | .fmt = "'nonnull' attribute only applies to functions, methods, and parameters", | 2504 | .fmt = "pointer '{s}' declared {s} here", |
| 2470 | .kind = .warning, | 2505 | .kind = .note, |
| 2471 | .opt = .@"ignored-attributes", | ||
| 2472 | }; | 2506 | }; |
| 2473 | 2507 | ||
| 2474 | pub const mixing_decimal_floats: Diagnostic = .{ | 2508 | pub const mixing_decimal_floats: Diagnostic = .{ |
| ... | @@ -2480,3 +2514,29 @@ pub const invalid_attribute_location: Diagnostic = .{ | ... | @@ -2480,3 +2514,29 @@ pub const invalid_attribute_location: Diagnostic = .{ |
| 2480 | .fmt = "{s} cannot appear here", | 2514 | .fmt = "{s} cannot appear here", |
| 2481 | .kind = .@"error", | 2515 | .kind = .@"error", |
| 2482 | }; | 2516 | }; |
| 2517 | |||
| 2518 | pub const attribute_requires_pointer: Diagnostic = .{ | ||
| 2519 | .fmt = "'{s}' attribute only applies to pointer arguments", | ||
| 2520 | .kind = .@"error", | ||
| 2521 | }; | ||
| 2522 | |||
| 2523 | pub const single_requires_zero_index: Diagnostic = .{ | ||
| 2524 | .fmt = "array subscript on single pointer must use a constant index of 0 to be in bounds", | ||
| 2525 | .kind = .@"error", | ||
| 2526 | }; | ||
| 2527 | |||
| 2528 | pub const pointer_arith_single: Diagnostic = .{ | ||
| 2529 | .fmt = "pointer arithmetic on single pointer is out of bounds; consider adding '__counted_by'", | ||
| 2530 | .kind = .@"error", | ||
| 2531 | }; | ||
| 2532 | |||
| 2533 | pub const redundant_bounds_annotation: Diagnostic = .{ | ||
| 2534 | .fmt = "pointer annotated with {s} multiple times. Annotate only once to remove this warning", | ||
| 2535 | .kind = .warning, | ||
| 2536 | .opt = .@"bounds-attributes-redundant", | ||
| 2537 | }; | ||
| 2538 | |||
| 2539 | pub const multiple_bounds_annotations: Diagnostic = .{ | ||
| 2540 | .fmt = "pointer cannot have more than one bound attribute", | ||
| 2541 | .kind = .@"error", | ||
| 2542 | }; |
lib/compiler/aro/aro/Preprocessor.zig+127-56| ... | @@ -1,6 +1,6 @@ | ... | @@ -1,6 +1,6 @@ |
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const Io = std.Io; | ||
| 3 | const mem = std.mem; | 2 | const mem = std.mem; |
| 3 | const path = std.Io.Dir.path; | ||
| 4 | const Allocator = mem.Allocator; | 4 | const Allocator = mem.Allocator; |
| 5 | const assert = std.debug.assert; | 5 | const assert = std.debug.assert; |
| 6 | 6 | ||
| ... | @@ -79,12 +79,15 @@ pub const Macro = struct { | ... | @@ -79,12 +79,15 @@ pub const Macro = struct { |
| 79 | }); | 79 | }); |
| 80 | 80 | ||
| 81 | const Object = enum { | 81 | const Object = enum { |
| 82 | base_file, | ||
| 82 | file, | 83 | file, |
| 84 | file_basename, | ||
| 83 | line, | 85 | line, |
| 84 | counter, | 86 | counter, |
| 85 | date, | 87 | date, |
| 86 | time, | 88 | time, |
| 87 | timestamp, | 89 | timestamp, |
| 90 | include_level, | ||
| 88 | }; | 91 | }; |
| 89 | 92 | ||
| 90 | const Func = enum { | 93 | const Func = enum { |
| ... | @@ -216,8 +219,6 @@ pub const Macro = struct { | ... | @@ -216,8 +219,6 @@ pub const Macro = struct { |
| 216 | } | 219 | } |
| 217 | }; | 220 | }; |
| 218 | 221 | ||
| 219 | const Preprocessor = @This(); | ||
| 220 | |||
| 221 | const ExpansionEntry = struct { | 222 | const ExpansionEntry = struct { |
| 222 | idx: Tree.TokenIndex, | 223 | idx: Tree.TokenIndex, |
| 223 | locs: [*]Source.Location, | 224 | locs: [*]Source.Location, |
| ... | @@ -228,6 +229,8 @@ const TokenState = struct { | ... | @@ -228,6 +229,8 @@ const TokenState = struct { |
| 228 | expansion_entries_len: usize, | 229 | expansion_entries_len: usize, |
| 229 | }; | 230 | }; |
| 230 | 231 | ||
| 232 | const Preprocessor = @This(); | ||
| 233 | |||
| 231 | comp: *Compilation, | 234 | comp: *Compilation, |
| 232 | diagnostics: *Diagnostics, | 235 | diagnostics: *Diagnostics, |
| 233 | 236 | ||
| ... | @@ -275,6 +278,12 @@ m_times: std.AutoHashMapUnmanaged(Source.Id, u64) = .empty, | ... | @@ -275,6 +278,12 @@ m_times: std.AutoHashMapUnmanaged(Source.Id, u64) = .empty, |
| 275 | /// The dependency file tracking all includes and embeds. | 278 | /// The dependency file tracking all includes and embeds. |
| 276 | dep_file: ?*DepFile = null, | 279 | dep_file: ?*DepFile = null, |
| 277 | 280 | ||
| 281 | /// Path prefixes to replace when expanding __FILE__ | ||
| 282 | path_replacements: []const struct { []const u8, []const u8 } = &.{}, | ||
| 283 | |||
| 284 | /// File used for __BASE_FILE__ macro. | ||
| 285 | base_file: Source.Id, | ||
| 286 | |||
| 278 | pub const parse = Parser.parse; | 287 | pub const parse = Parser.parse; |
| 279 | 288 | ||
| 280 | pub const Linemarkers = enum { | 289 | pub const Linemarkers = enum { |
| ... | @@ -286,21 +295,22 @@ pub const Linemarkers = enum { | ... | @@ -286,21 +295,22 @@ pub const Linemarkers = enum { |
| 286 | numeric_directives, | 295 | numeric_directives, |
| 287 | }; | 296 | }; |
| 288 | 297 | ||
| 289 | pub fn init(comp: *Compilation, source_epoch: SourceEpoch) Preprocessor { | 298 | pub const InitOptions = struct { |
| 290 | const pp: Preprocessor = .{ | 299 | base_file: Source.Id, |
| 291 | .comp = comp, | 300 | |
| 292 | .diagnostics = comp.diagnostics, | 301 | source_epoch: ?SourceEpoch = null, |
| 293 | .arena = .init(comp.gpa), | 302 | add_builtin_macros: bool = true, |
| 294 | .hideset = .{ .comp = comp }, | 303 | path_replacements: []const struct { []const u8, []const u8 } = &.{}, |
| 295 | .source_epoch = source_epoch, | 304 | |
| 305 | pub const testing: InitOptions = .{ | ||
| 306 | .base_file = undefined, | ||
| 307 | .source_epoch = .default, | ||
| 308 | .add_builtin_macros = false, | ||
| 296 | }; | 309 | }; |
| 297 | comp.pragmaEvent(.before_preprocess); | 310 | }; |
| 298 | return pp; | ||
| 299 | } | ||
| 300 | 311 | ||
| 301 | /// Initialize Preprocessor with builtin macros. | 312 | pub fn init(comp: *Compilation, options: InitOptions) !Preprocessor { |
| 302 | pub fn initDefault(comp: *Compilation) !Preprocessor { | 313 | const source_epoch: SourceEpoch = options.source_epoch orelse comp.environment.sourceEpoch(comp.io) catch |er| switch (er) { |
| 303 | const source_epoch: SourceEpoch = comp.environment.sourceEpoch(comp.io) catch |er| switch (er) { | ||
| 304 | error.InvalidEpoch => blk: { | 314 | error.InvalidEpoch => blk: { |
| 305 | const diagnostic: Diagnostic = .invalid_source_epoch; | 315 | const diagnostic: Diagnostic = .invalid_source_epoch; |
| 306 | try comp.diagnostics.add(.{ .text = diagnostic.fmt, .kind = diagnostic.kind, .opt = diagnostic.opt, .location = null }); | 316 | 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 { | ... | @@ -308,9 +318,18 @@ pub fn initDefault(comp: *Compilation) !Preprocessor { |
| 308 | }, | 318 | }, |
| 309 | }; | 319 | }; |
| 310 | 320 | ||
| 311 | var pp = init(comp, source_epoch); | 321 | var pp: Preprocessor = .{ |
| 322 | .comp = comp, | ||
| 323 | .diagnostics = comp.diagnostics, | ||
| 324 | .arena = .init(comp.gpa), | ||
| 325 | .hideset = .{ .comp = comp }, | ||
| 326 | .source_epoch = source_epoch, | ||
| 327 | .base_file = options.base_file, | ||
| 328 | .path_replacements = options.path_replacements, | ||
| 329 | }; | ||
| 312 | errdefer pp.deinit(); | 330 | errdefer pp.deinit(); |
| 313 | try pp.addBuiltinMacros(); | 331 | comp.pragmaEvent(.before_preprocess); |
| 332 | if (options.add_builtin_macros) try pp.addBuiltinMacros(); | ||
| 314 | return pp; | 333 | return pp; |
| 315 | } | 334 | } |
| 316 | 335 | ||
| ... | @@ -339,7 +358,7 @@ pub fn addBuiltinMacros(pp: *Preprocessor) !void { | ... | @@ -339,7 +358,7 @@ pub fn addBuiltinMacros(pp: *Preprocessor) !void { |
| 339 | try pp.addBuiltinMacro("__is_identifier", .{ .func = .is_identifier }); | 358 | try pp.addBuiltinMacro("__is_identifier", .{ .func = .is_identifier }); |
| 340 | try pp.addBuiltinMacro("_Pragma", .{ .func = .pragma_operator }); | 359 | try pp.addBuiltinMacro("_Pragma", .{ .func = .pragma_operator }); |
| 341 | 360 | ||
| 342 | if (pp.comp.langopts.emulate == .clang) { | 361 | if (pp.comp.langopts.emulate == .no or pp.comp.langopts.emulate == .clang) { |
| 343 | try pp.addBuiltinMacro("__is_target_arch", .{ .func = .is_target_arch }); | 362 | try pp.addBuiltinMacro("__is_target_arch", .{ .func = .is_target_arch }); |
| 344 | try pp.addBuiltinMacro("__is_target_vendor", .{ .func = .is_target_vendor }); | 363 | try pp.addBuiltinMacro("__is_target_vendor", .{ .func = .is_target_vendor }); |
| 345 | try pp.addBuiltinMacro("__is_target_os", .{ .func = .is_target_os }); | 364 | try pp.addBuiltinMacro("__is_target_os", .{ .func = .is_target_os }); |
| ... | @@ -359,6 +378,12 @@ pub fn addBuiltinMacros(pp: *Preprocessor) !void { | ... | @@ -359,6 +378,12 @@ pub fn addBuiltinMacros(pp: *Preprocessor) !void { |
| 359 | try pp.addBuiltinMacro("__DATE__", .{ .obj = .date }); | 378 | try pp.addBuiltinMacro("__DATE__", .{ .obj = .date }); |
| 360 | try pp.addBuiltinMacro("__TIME__", .{ .obj = .time }); | 379 | try pp.addBuiltinMacro("__TIME__", .{ .obj = .time }); |
| 361 | try pp.addBuiltinMacro("__TIMESTAMP__", .{ .obj = .timestamp }); | 380 | try pp.addBuiltinMacro("__TIMESTAMP__", .{ .obj = .timestamp }); |
| 381 | |||
| 382 | if (pp.comp.langopts.emulate == .no or pp.comp.langopts.emulate == .clang) { | ||
| 383 | try pp.addBuiltinMacro("__BASE_FILE__", .{ .obj = .base_file }); | ||
| 384 | try pp.addBuiltinMacro("__FILE_NAME__", .{ .obj = .file_basename }); | ||
| 385 | try pp.addBuiltinMacro("__INCLUDE_LEVEL__", .{ .obj = .include_level }); | ||
| 386 | } | ||
| 362 | } | 387 | } |
| 363 | 388 | ||
| 364 | pub fn deinit(pp: *Preprocessor) void { | 389 | pub fn deinit(pp: *Preprocessor) void { |
| ... | @@ -395,7 +420,7 @@ fn mTime(pp: *Preprocessor, source_id: Source.Id) !u64 { | ... | @@ -395,7 +420,7 @@ fn mTime(pp: *Preprocessor, source_id: Source.Id) !u64 { |
| 395 | return gop.value_ptr.*; | 420 | return gop.value_ptr.*; |
| 396 | } | 421 | } |
| 397 | 422 | ||
| 398 | pub fn expansionSlice(pp: *Preprocessor, tok: Tree.TokenIndex) []Source.Location { | 423 | pub fn expansionSlice(pp: *const Preprocessor, tok: Tree.TokenIndex) []Source.Location { |
| 399 | const S = struct { | 424 | const S = struct { |
| 400 | fn orderTokenIndex(context: Tree.TokenIndex, item: Tree.TokenIndex) std.math.Order { | 425 | fn orderTokenIndex(context: Tree.TokenIndex, item: Tree.TokenIndex) std.math.Order { |
| 401 | return std.math.order(context, item); | 426 | return std.math.order(context, item); |
| ... | @@ -1065,13 +1090,11 @@ fn fatalNotFound(pp: *Preprocessor, tok: TokenWithExpansionLocs, filename: []con | ... | @@ -1065,13 +1090,11 @@ fn fatalNotFound(pp: *Preprocessor, tok: TokenWithExpansionLocs, filename: []con |
| 1065 | 1090 | ||
| 1066 | fn verboseLog(pp: *Preprocessor, raw: RawToken, comptime fmt: []const u8, args: anytype) void { | 1091 | fn verboseLog(pp: *Preprocessor, raw: RawToken, comptime fmt: []const u8, args: anytype) void { |
| 1067 | @branchHint(.cold); | 1092 | @branchHint(.cold); |
| 1068 | const comp = pp.comp; | 1093 | const source = pp.comp.getSource(raw.source); |
| 1069 | const io = comp.io; | ||
| 1070 | const source = comp.getSource(raw.source); | ||
| 1071 | const line_col = source.lineCol(.{ .id = raw.source, .line = raw.line, .byte_offset = raw.start }); | 1094 | const line_col = source.lineCol(.{ .id = raw.source, .line = raw.line, .byte_offset = raw.start }); |
| 1072 | 1095 | ||
| 1073 | var stderr_buf: [4096]u8 = undefined; | 1096 | var stderr_buf: [4096]u8 = undefined; |
| 1074 | var stderr = Io.File.stderr().writer(io, &stderr_buf); | 1097 | var stderr = std.Io.File.stderr().writer(pp.comp.io, &stderr_buf); |
| 1075 | const w = &stderr.interface; | 1098 | const w = &stderr.interface; |
| 1076 | 1099 | ||
| 1077 | w.print("{s}:{d}:{d}: ", .{ source.path, line_col.line_no, line_col.col }) catch return; | 1100 | 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 | ... | @@ -1435,7 +1458,37 @@ fn expandObjMacro(pp: *Preprocessor, simple_macro: *const Macro) Error!ExpandBuf |
| 1435 | .file => { | 1458 | .file => { |
| 1436 | const start = pp.comp.generated_buf.items.len; | 1459 | const start = pp.comp.generated_buf.items.len; |
| 1437 | const source = pp.comp.getSource(pp.expansion_source_loc.id); | 1460 | const source = pp.comp.getSource(pp.expansion_source_loc.id); |
| 1438 | try pp.comp.generated_buf.print(gpa, "\"{f}\"\n", .{fmtEscapes(source.path)}); | 1461 | for (pp.path_replacements) |replacement| { |
| 1462 | if (mem.cutPrefix(u8, source.path, replacement[0])) |rest| { | ||
| 1463 | try pp.comp.generated_buf.print(gpa, "\"{f}{f}\"", .{ fmtEscapes(replacement[1]), fmtEscapes(rest) }); | ||
| 1464 | break; | ||
| 1465 | } | ||
| 1466 | } else { | ||
| 1467 | try pp.comp.generated_buf.print(gpa, "\"{f}\"\n", .{fmtEscapes(source.path)}); | ||
| 1468 | } | ||
| 1469 | |||
| 1470 | buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .string_literal, tok)); | ||
| 1471 | }, | ||
| 1472 | .base_file => { | ||
| 1473 | try pp.err(pp.expansion_source_loc, .base_file_is_clang_extension, .{}); | ||
| 1474 | const start = pp.comp.generated_buf.items.len; | ||
| 1475 | const base_file = pp.comp.getSource(pp.base_file); | ||
| 1476 | for (pp.path_replacements) |replacement| { | ||
| 1477 | if (mem.cutPrefix(u8, base_file.path, replacement[0])) |rest| { | ||
| 1478 | try pp.comp.generated_buf.print(gpa, "\"{f}{f}\"", .{ fmtEscapes(replacement[1]), fmtEscapes(rest) }); | ||
| 1479 | } | ||
| 1480 | } else { | ||
| 1481 | try pp.comp.generated_buf.print(gpa, "\"{f}\"", .{fmtEscapes(base_file.path)}); | ||
| 1482 | } | ||
| 1483 | |||
| 1484 | buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .string_literal, tok)); | ||
| 1485 | }, | ||
| 1486 | .file_basename => { | ||
| 1487 | try pp.err(pp.expansion_source_loc, .file_name_is_clang_extension, .{}); | ||
| 1488 | const start = pp.comp.generated_buf.items.len; | ||
| 1489 | const source = pp.comp.getSource(pp.expansion_source_loc.id); | ||
| 1490 | const basename = path.basename(source.path); | ||
| 1491 | try pp.comp.generated_buf.print(gpa, "\"{f}\"", .{fmtEscapes(basename)}); | ||
| 1439 | 1492 | ||
| 1440 | buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .string_literal, tok)); | 1493 | buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .string_literal, tok)); |
| 1441 | }, | 1494 | }, |
| ... | @@ -1472,6 +1525,13 @@ fn expandObjMacro(pp: *Preprocessor, simple_macro: *const Macro) Error!ExpandBuf | ... | @@ -1472,6 +1525,13 @@ fn expandObjMacro(pp: *Preprocessor, simple_macro: *const Macro) Error!ExpandBuf |
| 1472 | try pp.writeDateTimeStamp(.fromBuiltin(builtin_kind), timestamp); | 1525 | try pp.writeDateTimeStamp(.fromBuiltin(builtin_kind), timestamp); |
| 1473 | buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .string_literal, tok)); | 1526 | buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .string_literal, tok)); |
| 1474 | }, | 1527 | }, |
| 1528 | .include_level => { | ||
| 1529 | try pp.err(pp.expansion_source_loc, .include_level_is_clang_extension, .{}); | ||
| 1530 | const start = pp.comp.generated_buf.items.len; | ||
| 1531 | try pp.comp.generated_buf.print(gpa, "{d}\n", .{pp.include_depth}); | ||
| 1532 | |||
| 1533 | buf.appendAssumeCapacity(try pp.makeGeneratedToken(start, .pp_num, tok)); | ||
| 1534 | }, | ||
| 1475 | }, | 1535 | }, |
| 1476 | else => buf.appendAssumeCapacity(tok), | 1536 | else => buf.appendAssumeCapacity(tok), |
| 1477 | } | 1537 | } |
| ... | @@ -1828,7 +1888,11 @@ fn handleBuiltinMacro(pp: *Preprocessor, builtin: Macro.Builtin.Func, param_toks | ... | @@ -1828,7 +1888,11 @@ fn handleBuiltinMacro(pp: *Preprocessor, builtin: Macro.Builtin.Func, param_toks |
| 1828 | features.hasFeature(pp.comp, ident_str) | 1888 | features.hasFeature(pp.comp, ident_str) |
| 1829 | else | 1889 | else |
| 1830 | features.hasExtension(pp.comp, ident_str), | 1890 | features.hasExtension(pp.comp, ident_str), |
| 1831 | .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)), | 1891 | |
| 1892 | .has_builtin => Builtins.fromName(pp.comp, ident_str) != null or | ||
| 1893 | ((pp.comp.langopts.emulate == .no or pp.comp.langopts.emulate == .clang) and | ||
| 1894 | Macro.Builtin.has_builtin_special_cases.has(ident_str)), | ||
| 1895 | |||
| 1832 | .is_target_arch => pp.comp.isTargetArch(ident_str), | 1896 | .is_target_arch => pp.comp.isTargetArch(ident_str), |
| 1833 | .is_target_os => pp.comp.isTargetOs(ident_str), | 1897 | .is_target_os => pp.comp.isTargetOs(ident_str), |
| 1834 | .is_target_vendor => pp.comp.isTargetVendor(ident_str), | 1898 | .is_target_vendor => pp.comp.isTargetVendor(ident_str), |
| ... | @@ -1972,7 +2036,7 @@ fn expandFuncMacro( | ... | @@ -1972,7 +2036,7 @@ fn expandFuncMacro( |
| 1972 | }, | 2036 | }, |
| 1973 | .macro_param_no_expand => { | 2037 | .macro_param_no_expand => { |
| 1974 | if (tok_i + 1 < func_macro.tokens.len and func_macro.tokens[tok_i + 1].id == .hash_hash) { | 2038 | if (tok_i + 1 < func_macro.tokens.len and func_macro.tokens[tok_i + 1].id == .hash_hash) { |
| 1975 | hideset = pp.hideset.get(tokFromRaw(func_macro.tokens[tok_i + 1]).loc); | 2039 | hideset = .none; |
| 1976 | } | 2040 | } |
| 1977 | const slice = getPasteArgs(args.items[raw.end]); | 2041 | const slice = getPasteArgs(args.items[raw.end]); |
| 1978 | const raw_loc = Source.Location{ .id = raw.source, .byte_offset = raw.start, .line = raw.line }; | 2042 | const raw_loc = Source.Location{ .id = raw.source, .byte_offset = raw.start, .line = raw.line }; |
| ... | @@ -1980,7 +2044,7 @@ fn expandFuncMacro( | ... | @@ -1980,7 +2044,7 @@ fn expandFuncMacro( |
| 1980 | }, | 2044 | }, |
| 1981 | .macro_param => { | 2045 | .macro_param => { |
| 1982 | if (tok_i + 1 < func_macro.tokens.len and func_macro.tokens[tok_i + 1].id == .hash_hash) { | 2046 | if (tok_i + 1 < func_macro.tokens.len and func_macro.tokens[tok_i + 1].id == .hash_hash) { |
| 1983 | hideset = pp.hideset.get(tokFromRaw(func_macro.tokens[tok_i + 1]).loc); | 2047 | hideset = .none; |
| 1984 | } | 2048 | } |
| 1985 | const arg = expanded_args.items[raw.end]; | 2049 | const arg = expanded_args.items[raw.end]; |
| 1986 | const raw_loc = Source.Location{ .id = raw.source, .byte_offset = raw.start, .line = raw.line }; | 2050 | const raw_loc = Source.Location{ .id = raw.source, .byte_offset = raw.start, .line = raw.line }; |
| ... | @@ -2330,9 +2394,10 @@ fn expandFuncMacro( | ... | @@ -2330,9 +2394,10 @@ fn expandFuncMacro( |
| 2330 | for (buf.items) |*tok| { | 2394 | for (buf.items) |*tok| { |
| 2331 | try tok.addExpansionLocation(gpa, &.{macro_tok.loc}); | 2395 | try tok.addExpansionLocation(gpa, &.{macro_tok.loc}); |
| 2332 | try tok.addExpansionLocation(gpa, macro_expansion_locs); | 2396 | try tok.addExpansionLocation(gpa, macro_expansion_locs); |
| 2333 | const tok_hidelist = pp.hideset.get(tok.loc); | 2397 | if (tok.id.shouldTrackHideset(.func)) { |
| 2334 | const new_hidelist = try pp.hideset.@"union"(tok_hidelist, hideset); | 2398 | const new_hideset = try pp.hideset.@"union"(pp.hideset.get(tok.loc), hideset); |
| 2335 | try pp.hideset.put(tok.loc, new_hidelist); | 2399 | try pp.hideset.put(tok.loc, new_hideset); |
| 2400 | } | ||
| 2336 | } | 2401 | } |
| 2337 | 2402 | ||
| 2338 | return buf; | 2403 | return buf; |
| ... | @@ -2698,9 +2763,10 @@ fn expandMacroExhaustive( | ... | @@ -2698,9 +2763,10 @@ fn expandMacroExhaustive( |
| 2698 | try tok.addExpansionLocation(gpa, &.{macro_tok.loc}); | 2763 | try tok.addExpansionLocation(gpa, &.{macro_tok.loc}); |
| 2699 | try tok.addExpansionLocation(gpa, macro_expansion_locs); | 2764 | try tok.addExpansionLocation(gpa, macro_expansion_locs); |
| 2700 | 2765 | ||
| 2701 | const tok_hidelist = pp.hideset.get(tok.loc); | 2766 | if (tok.id.shouldTrackHideset(.obj)) { |
| 2702 | const new_hidelist = try pp.hideset.@"union"(tok_hidelist, hs); | 2767 | const new_hideset = try pp.hideset.@"union"(pp.hideset.get(tok.loc), hs); |
| 2703 | try pp.hideset.put(tok.loc, new_hidelist); | 2768 | try pp.hideset.put(tok.loc, new_hideset); |
| 2769 | } | ||
| 2704 | 2770 | ||
| 2705 | if (tok.id == .keyword_defined and eval_ctx == .expr) { | 2771 | if (tok.id == .keyword_defined and eval_ctx == .expr) { |
| 2706 | if (macro.is_func) { | 2772 | if (macro.is_func) { |
| ... | @@ -2914,7 +2980,10 @@ fn pasteTokens(pp: *Preprocessor, lhs_toks: *ExpandBuf, rhs_toks: []const TokenW | ... | @@ -2914,7 +2980,10 @@ fn pasteTokens(pp: *Preprocessor, lhs_toks: *ExpandBuf, rhs_toks: []const TokenW |
| 2914 | .placemarker | 2980 | .placemarker |
| 2915 | else | 2981 | else |
| 2916 | pasted_token.id; | 2982 | pasted_token.id; |
| 2917 | try lhs_toks.append(gpa, try pp.makeGeneratedToken(start, pasted_id, lhs)); | 2983 | |
| 2984 | const hideset = try pp.hideset.intersection(pp.hideset.get(lhs.loc), pp.hideset.get(rhs.loc)); | ||
| 2985 | const generated_token = try pp.makeGeneratedTokenExtra(start, pasted_id, lhs, hideset); | ||
| 2986 | try lhs_toks.append(gpa, generated_token); | ||
| 2918 | 2987 | ||
| 2919 | if (next.id != .nl and next.id != .eof) { | 2988 | if (next.id != .nl and next.id != .eof) { |
| 2920 | try pp.err(lhs, .pasting_formed_invalid, .{pp.comp.generated_buf.items[start..end]}); | 2989 | 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 | ... | @@ -2924,7 +2993,7 @@ fn pasteTokens(pp: *Preprocessor, lhs_toks: *ExpandBuf, rhs_toks: []const TokenW |
| 2924 | try bufCopyTokens(gpa, lhs_toks, rhs_toks[rhs_rest..], &.{}); | 2993 | try bufCopyTokens(gpa, lhs_toks, rhs_toks[rhs_rest..], &.{}); |
| 2925 | } | 2994 | } |
| 2926 | 2995 | ||
| 2927 | fn makeGeneratedToken(pp: *Preprocessor, start: usize, id: Token.Id, source: TokenWithExpansionLocs) !TokenWithExpansionLocs { | 2996 | fn makeGeneratedTokenExtra(pp: *Preprocessor, start: usize, id: Token.Id, source: TokenWithExpansionLocs, hideset: Hideset.Index) !TokenWithExpansionLocs { |
| 2928 | const gpa = pp.comp.gpa; | 2997 | const gpa = pp.comp.gpa; |
| 2929 | var pasted_token = TokenWithExpansionLocs{ .id = id, .loc = .{ | 2998 | var pasted_token = TokenWithExpansionLocs{ .id = id, .loc = .{ |
| 2930 | .id = .generated, | 2999 | .id = .generated, |
| ... | @@ -2934,9 +3003,15 @@ fn makeGeneratedToken(pp: *Preprocessor, start: usize, id: Token.Id, source: Tok | ... | @@ -2934,9 +3003,15 @@ fn makeGeneratedToken(pp: *Preprocessor, start: usize, id: Token.Id, source: Tok |
| 2934 | pp.generated_line += 1; | 3003 | pp.generated_line += 1; |
| 2935 | try pasted_token.addExpansionLocation(gpa, &.{source.loc}); | 3004 | try pasted_token.addExpansionLocation(gpa, &.{source.loc}); |
| 2936 | try pasted_token.addExpansionLocation(gpa, source.expansionSlice()); | 3005 | try pasted_token.addExpansionLocation(gpa, source.expansionSlice()); |
| 3006 | try pp.hideset.put(pasted_token.loc, hideset); | ||
| 3007 | |||
| 2937 | return pasted_token; | 3008 | return pasted_token; |
| 2938 | } | 3009 | } |
| 2939 | 3010 | ||
| 3011 | fn makeGeneratedToken(pp: *Preprocessor, start: usize, id: Token.Id, source: TokenWithExpansionLocs) !TokenWithExpansionLocs { | ||
| 3012 | return pp.makeGeneratedTokenExtra(start, id, source, pp.hideset.get(source.loc)); | ||
| 3013 | } | ||
| 3014 | |||
| 2940 | /// Defines a new macro and warns if it is a duplicate | 3015 | /// Defines a new macro and warns if it is a duplicate |
| 2941 | fn defineMacro(pp: *Preprocessor, define_tok: RawToken, name_tok: TokenWithExpansionLocs, macro: Macro) Error!void { | 3016 | fn defineMacro(pp: *Preprocessor, define_tok: RawToken, name_tok: TokenWithExpansionLocs, macro: Macro) Error!void { |
| 2942 | const name_str = pp.expandedSlice(name_tok); | 3017 | const name_str = pp.expandedSlice(name_tok); |
| ... | @@ -3898,16 +3973,14 @@ test "Preserve pragma tokens sometimes" { | ... | @@ -3898,16 +3973,14 @@ test "Preserve pragma tokens sometimes" { |
| 3898 | const gpa = std.testing.allocator; | 3973 | const gpa = std.testing.allocator; |
| 3899 | const Test = struct { | 3974 | const Test = struct { |
| 3900 | fn runPreprocessor(source_text: []const u8) ![]const u8 { | 3975 | fn runPreprocessor(source_text: []const u8) ![]const u8 { |
| 3901 | var arena: std.heap.ArenaAllocator = .init(gpa); | ||
| 3902 | defer arena.deinit(); | ||
| 3903 | |||
| 3904 | var diagnostics: Diagnostics = .{ .output = .ignore }; | 3976 | var diagnostics: Diagnostics = .{ .output = .ignore }; |
| 3905 | var comp = Compilation.init(gpa, arena.allocator(), std.testing.io, &diagnostics, Io.Dir.cwd()); | 3977 | var comp = try Compilation.init(.testing); |
| 3978 | comp.diagnostics = &diagnostics; | ||
| 3906 | defer comp.deinit(); | 3979 | defer comp.deinit(); |
| 3907 | 3980 | ||
| 3908 | try comp.addDefaultPragmaHandlers(); | 3981 | try comp.addDefaultPragmaHandlers(); |
| 3909 | 3982 | ||
| 3910 | var pp = Preprocessor.init(&comp, .default); | 3983 | var pp = try Preprocessor.init(&comp, .testing); |
| 3911 | defer pp.deinit(); | 3984 | defer pp.deinit(); |
| 3912 | 3985 | ||
| 3913 | pp.preserve_whitespace = true; | 3986 | pp.preserve_whitespace = true; |
| ... | @@ -3966,12 +4039,10 @@ test "destringify" { | ... | @@ -3966,12 +4039,10 @@ test "destringify" { |
| 3966 | try std.testing.expectEqualStrings(destringified, pp.char_buf.items); | 4039 | try std.testing.expectEqualStrings(destringified, pp.char_buf.items); |
| 3967 | } | 4040 | } |
| 3968 | }; | 4041 | }; |
| 3969 | var arena: std.heap.ArenaAllocator = .init(gpa); | 4042 | var comp = try Compilation.init(.testing); |
| 3970 | defer arena.deinit(); | ||
| 3971 | var diagnostics: Diagnostics = .{ .output = .ignore }; | ||
| 3972 | var comp = Compilation.init(gpa, arena.allocator(), std.testing.io, &diagnostics, Io.Dir.cwd()); | ||
| 3973 | defer comp.deinit(); | 4043 | defer comp.deinit(); |
| 3974 | var pp = Preprocessor.init(&comp, .default); | 4044 | |
| 4045 | var pp = try Preprocessor.init(&comp, .testing); | ||
| 3975 | defer pp.deinit(); | 4046 | defer pp.deinit(); |
| 3976 | 4047 | ||
| 3977 | try Test.testDestringify(&pp, "hello\tworld\n", "hello\tworld\n"); | 4048 | try Test.testDestringify(&pp, "hello\tworld\n", "hello\tworld\n"); |
| ... | @@ -4026,20 +4097,20 @@ test "Include guards" { | ... | @@ -4026,20 +4097,20 @@ test "Include guards" { |
| 4026 | }; | 4097 | }; |
| 4027 | } | 4098 | } |
| 4028 | 4099 | ||
| 4029 | fn testIncludeGuard(gpa: std.mem.Allocator, comptime template: []const u8, tok_id: RawToken.Id, expected_guards: u32) !void { | 4100 | fn testIncludeGuard(comptime template: []const u8, tok_id: RawToken.Id, expected_guards: u32) !void { |
| 4030 | var arena_state: std.heap.ArenaAllocator = .init(gpa); | 4101 | const gpa = std.testing.allocator; |
| 4031 | defer arena_state.deinit(); | ||
| 4032 | const arena = arena_state.allocator(); | ||
| 4033 | 4102 | ||
| 4034 | var diagnostics: Diagnostics = .{ .output = .ignore }; | 4103 | var diagnostics: Diagnostics = .{ .output = .ignore }; |
| 4035 | var comp = Compilation.init(gpa, arena, std.testing.io, &diagnostics, Io.Dir.cwd()); | 4104 | var comp = try Compilation.init(.testing); |
| 4105 | comp.diagnostics = &diagnostics; | ||
| 4036 | defer comp.deinit(); | 4106 | defer comp.deinit(); |
| 4037 | var pp = Preprocessor.init(&comp, .default); | 4107 | var pp = try Preprocessor.init(&comp, .testing); |
| 4038 | defer pp.deinit(); | 4108 | defer pp.deinit(); |
| 4039 | 4109 | ||
| 4040 | const path = try std.fs.path.join(arena, &.{ ".", "bar.h" }); | 4110 | const file_path = try path.join(gpa, &.{ ".", "bar.h" }); |
| 4111 | defer gpa.free(file_path); | ||
| 4041 | 4112 | ||
| 4042 | _ = try comp.addSourceFromBuffer(path, "int bar = 5;\n"); | 4113 | _ = try comp.addSourceFromBuffer(file_path, "int bar = 5;\n"); |
| 4043 | 4114 | ||
| 4044 | var buf: std.ArrayList(u8) = .empty; | 4115 | var buf: std.ArrayList(u8) = .empty; |
| 4045 | defer buf.deinit(gpa); | 4116 | defer buf.deinit(gpa); |
| ... | @@ -4074,14 +4145,14 @@ test "Include guards" { | ... | @@ -4074,14 +4145,14 @@ test "Include guards" { |
| 4074 | \\#endif | 4145 | \\#endif |
| 4075 | ; | 4146 | ; |
| 4076 | const expected_guards: u32 = if (Test.pairsWithIfndef(tag)) 0 else 1; | 4147 | const expected_guards: u32 = if (Test.pairsWithIfndef(tag)) 0 else 1; |
| 4077 | try Test.testIncludeGuard(std.testing.allocator, inside_ifndef_template, tag, expected_guards); | 4148 | try Test.testIncludeGuard(inside_ifndef_template, tag, expected_guards); |
| 4078 | 4149 | ||
| 4079 | const outside_ifndef_template = | 4150 | const outside_ifndef_template = |
| 4080 | \\#ifndef FOO | 4151 | \\#ifndef FOO |
| 4081 | \\#endif | 4152 | \\#endif |
| 4082 | \\#{s}{s} | 4153 | \\#{s}{s} |
| 4083 | ; | 4154 | ; |
| 4084 | try Test.testIncludeGuard(std.testing.allocator, outside_ifndef_template, tag, 0); | 4155 | try Test.testIncludeGuard(outside_ifndef_template, tag, 0); |
| 4085 | } | 4156 | } |
| 4086 | } | 4157 | } |
| 4087 | } | 4158 | } |
lib/compiler/aro/aro/Preprocessor/Diagnostic.zig+21| ... | @@ -472,3 +472,24 @@ pub const pragma_once_in_main_file: Diagnostic = .{ | ... | @@ -472,3 +472,24 @@ pub const pragma_once_in_main_file: Diagnostic = .{ |
| 472 | .kind = .warning, | 472 | .kind = .warning, |
| 473 | .opt = .@"pragma-once-outside-header", | 473 | .opt = .@"pragma-once-outside-header", |
| 474 | }; | 474 | }; |
| 475 | |||
| 476 | pub const file_name_is_clang_extension: Diagnostic = .{ | ||
| 477 | .fmt = "__FILE_NAME__ is a clang extension", | ||
| 478 | .opt = .@"file-name-extension", | ||
| 479 | .kind = .off, | ||
| 480 | .extension = true, | ||
| 481 | }; | ||
| 482 | |||
| 483 | pub const base_file_is_clang_extension: Diagnostic = .{ | ||
| 484 | .fmt = "__BASE_FILE__ is a clang extension", | ||
| 485 | .opt = .@"base-file-extension", | ||
| 486 | .kind = .off, | ||
| 487 | .extension = true, | ||
| 488 | }; | ||
| 489 | |||
| 490 | pub const include_level_is_clang_extension: Diagnostic = .{ | ||
| 491 | .fmt = "__INCLUDE_LEVEL__ is a clang extension", | ||
| 492 | .opt = .@"include-level-extension", | ||
| 493 | .kind = .off, | ||
| 494 | .extension = true, | ||
| 495 | }; |
lib/compiler/aro/aro/Target.zig+17-12| ... | @@ -229,7 +229,7 @@ pub fn intMaxType(target: *const Target) QualType { | ... | @@ -229,7 +229,7 @@ pub fn intMaxType(target: *const Target) QualType { |
| 229 | => return .long, | 229 | => return .long, |
| 230 | 230 | ||
| 231 | .x86_64 => switch (target.os.tag) { | 231 | .x86_64 => switch (target.os.tag) { |
| 232 | .windows, .openbsd => {}, | 232 | .windows, .openbsd, .uefi => {}, |
| 233 | else => switch (target.abi) { | 233 | else => switch (target.abi) { |
| 234 | .gnux32, .muslx32 => {}, | 234 | .gnux32, .muslx32 => {}, |
| 235 | else => return .long, | 235 | else => return .long, |
| ... | @@ -546,18 +546,10 @@ pub fn systemCompiler(target: *const Target) LangOpts.Compiler { | ... | @@ -546,18 +546,10 @@ pub fn systemCompiler(target: *const Target) LangOpts.Compiler { |
| 546 | } | 546 | } |
| 547 | 547 | ||
| 548 | pub fn hasFloat128(target: *const Target) bool { | 548 | pub fn hasFloat128(target: *const Target) bool { |
| 549 | if (target.cpu.arch.isWasm()) return true; | ||
| 550 | if (target.os.tag.isDarwin()) return false; | 549 | if (target.os.tag.isDarwin()) return false; |
| 551 | if (target.cpu.arch.isPowerPC()) return std.Target.powerpc.featureSetHas(target.cpu.features, .float128); | 550 | if (target.os.tag == .windows) return false; |
| 552 | return switch (target.os.tag) { | 551 | if (target.cpu.arch.isX86()) return true; |
| 553 | .dragonfly, | 552 | return target.cTypeBitSize(.longdouble) == 128; |
| 554 | .haiku, | ||
| 555 | .linux, | ||
| 556 | .openbsd, | ||
| 557 | .illumos, | ||
| 558 | => target.cpu.arch.isX86(), | ||
| 559 | else => false, | ||
| 560 | }; | ||
| 561 | } | 553 | } |
| 562 | 554 | ||
| 563 | pub fn hasInt128(target: *const Target) bool { | 555 | pub fn hasInt128(target: *const Target) bool { |
| ... | @@ -1238,6 +1230,7 @@ pub fn toLLVMTriple(target: *const Target, buf: []u8) []const u8 { | ... | @@ -1238,6 +1230,7 @@ pub fn toLLVMTriple(target: *const Target, buf: []u8) []const u8 { |
| 1238 | .other, | 1230 | .other, |
| 1239 | .plan9, | 1231 | .plan9, |
| 1240 | .vita, | 1232 | .vita, |
| 1233 | .psp, | ||
| 1241 | => "unknown", | 1234 | => "unknown", |
| 1242 | }; | 1235 | }; |
| 1243 | writer.writeAll(llvm_os) catch unreachable; | 1236 | writer.writeAll(llvm_os) catch unreachable; |
| ... | @@ -1356,6 +1349,18 @@ pub fn isPIEDefault(target: *const Target) DefaultPIStatus { | ... | @@ -1356,6 +1349,18 @@ pub fn isPIEDefault(target: *const Target) DefaultPIStatus { |
| 1356 | }; | 1349 | }; |
| 1357 | } | 1350 | } |
| 1358 | 1351 | ||
| 1352 | pub fn ppcElfVersion(target: *const Target) u32 { | ||
| 1353 | std.debug.assert(target.cpu.arch.isPowerPC()); | ||
| 1354 | return switch (target.cpu.arch) { | ||
| 1355 | .powerpc64le => 2, | ||
| 1356 | .powerpc64 => if ((target.os.isAtLeast(.freebsd, .{ .major = 13, .minor = 0, .patch = 0 }) orelse false) or target.os.tag == .openbsd or target.abi.isMusl()) | ||
| 1357 | 2 | ||
| 1358 | else | ||
| 1359 | 1, | ||
| 1360 | else => 1, | ||
| 1361 | }; | ||
| 1362 | } | ||
| 1363 | |||
| 1359 | pub fn isPICdefault(target: *const Target) DefaultPIStatus { | 1364 | pub fn isPICdefault(target: *const Target) DefaultPIStatus { |
| 1360 | return switch (target.os.tag) { | 1365 | return switch (target.os.tag) { |
| 1361 | .haiku, | 1366 | .haiku, |
lib/compiler/aro/aro/Tokenizer.zig+31-14| ... | @@ -1,5 +1,4 @@ | ... | @@ -1,5 +1,4 @@ |
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const Io = std.Io; | ||
| 3 | const assert = std.debug.assert; | 2 | const assert = std.debug.assert; |
| 4 | 3 | ||
| 5 | const Compilation = @import("Compilation.zig"); | 4 | const Compilation = @import("Compilation.zig"); |
| ... | @@ -891,6 +890,14 @@ pub const Token = struct { | ... | @@ -891,6 +890,14 @@ pub const Token = struct { |
| 891 | else => false, | 890 | else => false, |
| 892 | }; | 891 | }; |
| 893 | } | 892 | } |
| 893 | |||
| 894 | pub fn shouldTrackHideset(id: Id, context: enum { func, obj }) bool { | ||
| 895 | return switch (id) { | ||
| 896 | .identifier, .extended_identifier => true, | ||
| 897 | .r_paren => context == .func, | ||
| 898 | else => false, | ||
| 899 | }; | ||
| 900 | } | ||
| 894 | }; | 901 | }; |
| 895 | 902 | ||
| 896 | /// double underscore and underscore + capital letter identifiers | 903 | /// double underscore and underscore + capital letter identifiers |
| ... | @@ -938,6 +945,18 @@ pub const Token = struct { | ... | @@ -938,6 +945,18 @@ pub const Token = struct { |
| 938 | .keyword_unaligned, | 945 | .keyword_unaligned, |
| 939 | .keyword_unaligned2, | 946 | .keyword_unaligned2, |
| 940 | => if (langopts.ms_extensions) kw else .identifier, | 947 | => if (langopts.ms_extensions) kw else .identifier, |
| 948 | |||
| 949 | .keyword_float32, | ||
| 950 | .keyword_float64, | ||
| 951 | .keyword_float128, | ||
| 952 | .keyword_float32x, | ||
| 953 | .keyword_float64x, | ||
| 954 | .keyword_float128x, | ||
| 955 | .keyword_dfloat32, | ||
| 956 | .keyword_dfloat64, | ||
| 957 | .keyword_dfloat128, | ||
| 958 | .keyword_dfloat64x, | ||
| 959 | => if (langopts.emulate == .clang) .identifier else kw, | ||
| 941 | else => kw, | 960 | else => kw, |
| 942 | }; | 961 | }; |
| 943 | } | 962 | } |
| ... | @@ -2008,11 +2027,11 @@ test "operators" { | ... | @@ -2008,11 +2027,11 @@ test "operators" { |
| 2008 | test "keywords" { | 2027 | test "keywords" { |
| 2009 | try expectTokens( | 2028 | try expectTokens( |
| 2010 | \\auto __auto_type break case char const continue default do | 2029 | \\auto __auto_type break case char const continue default do |
| 2011 | \\double else enum extern float for goto if int | 2030 | \\double else enum extern float for goto if int |
| 2012 | \\long register return short signed sizeof static | 2031 | \\long register return short signed sizeof static |
| 2013 | \\struct switch typedef union unsigned void volatile | 2032 | \\struct switch typedef union unsigned void volatile |
| 2014 | \\while _Bool _Complex _Imaginary inline restrict _Alignas | 2033 | \\while _Bool _Complex _Imaginary inline restrict _Alignas |
| 2015 | \\_Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local | 2034 | \\_Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local |
| 2016 | \\__attribute __attribute__ | 2035 | \\__attribute __attribute__ |
| 2017 | \\ | 2036 | \\ |
| 2018 | , &.{ | 2037 | , &.{ |
| ... | @@ -2324,13 +2343,13 @@ test "Universal character names" { | ... | @@ -2324,13 +2343,13 @@ test "Universal character names" { |
| 2324 | 2343 | ||
| 2325 | test "Tokenizer fuzz test" { | 2344 | test "Tokenizer fuzz test" { |
| 2326 | const Context = struct { | 2345 | const Context = struct { |
| 2327 | fn testOne(_: @This(), input_bytes: []const u8) anyerror!void { | 2346 | fn testOne(_: @This(), smith: *std.testing.Smith) anyerror!void { |
| 2328 | var arena: std.heap.ArenaAllocator = .init(std.testing.allocator); | 2347 | var comp = try Compilation.init(.testing); |
| 2329 | defer arena.deinit(); | ||
| 2330 | var comp = Compilation.init(std.testing.allocator, arena.allocator(), std.testing.io, undefined, Io.Dir.cwd()); | ||
| 2331 | defer comp.deinit(); | 2348 | defer comp.deinit(); |
| 2332 | 2349 | ||
| 2333 | const source = try comp.addSourceFromBuffer("fuzz.c", input_bytes); | 2350 | var buf: [256]u8 = undefined; |
| 2351 | const contents_len = smith.slice(&buf); | ||
| 2352 | const source = try comp.addSourceFromBuffer("fuzz.c", buf[0..contents_len]); | ||
| 2334 | 2353 | ||
| 2335 | var tokenizer: Tokenizer = .{ | 2354 | var tokenizer: Tokenizer = .{ |
| 2336 | .buf = source.buf, | 2355 | .buf = source.buf, |
| ... | @@ -2350,9 +2369,7 @@ test "Tokenizer fuzz test" { | ... | @@ -2350,9 +2369,7 @@ test "Tokenizer fuzz test" { |
| 2350 | } | 2369 | } |
| 2351 | 2370 | ||
| 2352 | fn expectTokensExtra(contents: []const u8, expected_tokens: []const Token.Id, langopts: ?LangOpts) !void { | 2371 | fn expectTokensExtra(contents: []const u8, expected_tokens: []const Token.Id, langopts: ?LangOpts) !void { |
| 2353 | var arena: std.heap.ArenaAllocator = .init(std.testing.allocator); | 2372 | var comp = try Compilation.init(.testing); |
| 2354 | defer arena.deinit(); | ||
| 2355 | var comp = Compilation.init(std.testing.allocator, arena.allocator(), std.testing.io, undefined, Io.Dir.cwd()); | ||
| 2356 | defer comp.deinit(); | 2373 | defer comp.deinit(); |
| 2357 | if (langopts) |provided| { | 2374 | if (langopts) |provided| { |
| 2358 | comp.langopts = provided; | 2375 | comp.langopts = provided; |
lib/compiler/aro/aro/Toolchain.zig+4-7| ... | @@ -495,9 +495,9 @@ pub fn addSystemIncludeDir(tc: *const Toolchain, path: []const u8) !void { | ... | @@ -495,9 +495,9 @@ pub fn addSystemIncludeDir(tc: *const Toolchain, path: []const u8) !void { |
| 495 | pub fn addBuiltinIncludeDir(tc: *const Toolchain) !void { | 495 | pub fn addBuiltinIncludeDir(tc: *const Toolchain) !void { |
| 496 | const d = tc.driver; | 496 | const d = tc.driver; |
| 497 | const comp = d.comp; | 497 | const comp = d.comp; |
| 498 | const io = comp.io; | ||
| 498 | const gpa = comp.gpa; | 499 | const gpa = comp.gpa; |
| 499 | const arena = comp.arena; | 500 | const arena = comp.arena; |
| 500 | const io = comp.io; | ||
| 501 | try d.includes.ensureUnusedCapacity(gpa, 1); | 501 | try d.includes.ensureUnusedCapacity(gpa, 1); |
| 502 | if (d.resource_dir) |resource_dir| { | 502 | if (d.resource_dir) |resource_dir| { |
| 503 | const path = try std.fs.path.join(arena, &.{ resource_dir, "include" }); | 503 | const path = try std.fs.path.join(arena, &.{ resource_dir, "include" }); |
| ... | @@ -524,14 +524,12 @@ pub fn addBuiltinIncludeDir(tc: *const Toolchain) !void { | ... | @@ -524,14 +524,12 @@ pub fn addBuiltinIncludeDir(tc: *const Toolchain) !void { |
| 524 | /// Otherwise returns a slice of `buf`. If the file is larger than `buf` partial contents are returned | 524 | /// Otherwise returns a slice of `buf`. If the file is larger than `buf` partial contents are returned |
| 525 | pub fn readFile(tc: *const Toolchain, path: []const u8, buf: []u8) ?[]const u8 { | 525 | pub fn readFile(tc: *const Toolchain, path: []const u8, buf: []u8) ?[]const u8 { |
| 526 | const comp = tc.driver.comp; | 526 | const comp = tc.driver.comp; |
| 527 | const io = comp.io; | 527 | return comp.cwd.readFile(comp.io, path, buf) catch null; |
| 528 | return comp.cwd.readFile(io, path, buf) catch null; | ||
| 529 | } | 528 | } |
| 530 | 529 | ||
| 531 | pub fn exists(tc: *const Toolchain, path: []const u8) bool { | 530 | pub fn exists(tc: *const Toolchain, path: []const u8) bool { |
| 532 | const comp = tc.driver.comp; | 531 | const comp = tc.driver.comp; |
| 533 | const io = comp.io; | 532 | comp.cwd.access(comp.io, path, .{}) catch return false; |
| 534 | comp.cwd.access(io, path, .{}) catch return false; | ||
| 535 | return true; | 533 | return true; |
| 536 | } | 534 | } |
| 537 | 535 | ||
| ... | @@ -549,8 +547,7 @@ pub fn canExecute(tc: *const Toolchain, path: []const u8) bool { | ... | @@ -549,8 +547,7 @@ pub fn canExecute(tc: *const Toolchain, path: []const u8) bool { |
| 549 | } | 547 | } |
| 550 | 548 | ||
| 551 | const comp = tc.driver.comp; | 549 | const comp = tc.driver.comp; |
| 552 | const io = comp.io; | 550 | comp.cwd.access(comp.io, path, .{ .execute = true }) catch return false; |
| 553 | comp.cwd.access(io, path, .{ .execute = true }) catch return false; | ||
| 554 | // Todo: ensure path is not a directory | 551 | // Todo: ensure path is not a directory |
| 555 | return true; | 552 | return true; |
| 556 | } | 553 | } |
lib/compiler/aro/aro/Tree.zig+178-148| ... | @@ -34,7 +34,7 @@ pub const TokenWithExpansionLocs = struct { | ... | @@ -34,7 +34,7 @@ pub const TokenWithExpansionLocs = struct { |
| 34 | expansion_locs: ?[*]Source.Location = null, | 34 | expansion_locs: ?[*]Source.Location = null, |
| 35 | 35 | ||
| 36 | pub fn expansionSlice(tok: TokenWithExpansionLocs) []const Source.Location { | 36 | pub fn expansionSlice(tok: TokenWithExpansionLocs) []const Source.Location { |
| 37 | const locs = tok.expansion_locs orelse return &[0]Source.Location{}; | 37 | const locs = tok.expansion_locs orelse return &.{}; |
| 38 | var i: usize = 0; | 38 | var i: usize = 0; |
| 39 | while (locs[i].id.index != .unused) : (i += 1) {} | 39 | while (locs[i].id.index != .unused) : (i += 1) {} |
| 40 | return locs[0..i]; | 40 | return locs[0..i]; |
| ... | @@ -243,6 +243,8 @@ pub const Node = union(enum) { | ... | @@ -243,6 +243,8 @@ pub const Node = union(enum) { |
| 243 | builtin_choose_expr: Conditional, | 243 | builtin_choose_expr: Conditional, |
| 244 | builtin_convertvector: Convertvector, | 244 | builtin_convertvector: Convertvector, |
| 245 | builtin_shufflevector: Shufflevector, | 245 | builtin_shufflevector: Shufflevector, |
| 246 | builtin_va_arg_pack: VaArgPack, | ||
| 247 | builtin_va_arg_pack_len: VaArgPack, | ||
| 246 | 248 | ||
| 247 | /// C23 bool literal `true` / `false` | 249 | /// C23 bool literal `true` / `false` |
| 248 | bool_literal: Literal, | 250 | bool_literal: Literal, |
| ... | @@ -633,6 +635,10 @@ pub const Node = union(enum) { | ... | @@ -633,6 +635,10 @@ pub const Node = union(enum) { |
| 633 | indexes: []const Node.Index, | 635 | indexes: []const Node.Index, |
| 634 | }; | 636 | }; |
| 635 | 637 | ||
| 638 | pub const VaArgPack = struct { | ||
| 639 | builtin_tok: TokenIndex, | ||
| 640 | }; | ||
| 641 | |||
| 636 | pub const Literal = struct { | 642 | pub const Literal = struct { |
| 637 | literal_tok: TokenIndex, | 643 | literal_tok: TokenIndex, |
| 638 | qt: QualType, | 644 | qt: QualType, |
| ... | @@ -1689,6 +1695,16 @@ pub const Node = union(enum) { | ... | @@ -1689,6 +1695,16 @@ pub const Node = union(enum) { |
| 1689 | .indexes = @ptrCast(tree.extra.items[node_data[1] + 2 ..][0..node_data[2]]), | 1695 | .indexes = @ptrCast(tree.extra.items[node_data[1] + 2 ..][0..node_data[2]]), |
| 1690 | }, | 1696 | }, |
| 1691 | }, | 1697 | }, |
| 1698 | .builtin_va_arg_pack => .{ | ||
| 1699 | .builtin_va_arg_pack = .{ | ||
| 1700 | .builtin_tok = node_tok, | ||
| 1701 | }, | ||
| 1702 | }, | ||
| 1703 | .builtin_va_arg_pack_len => .{ | ||
| 1704 | .builtin_va_arg_pack_len = .{ | ||
| 1705 | .builtin_tok = node_tok, | ||
| 1706 | }, | ||
| 1707 | }, | ||
| 1692 | .array_init_expr_two => .{ | 1708 | .array_init_expr_two => .{ |
| 1693 | .array_init_expr = .{ | 1709 | .array_init_expr = .{ |
| 1694 | .l_brace_tok = node_tok, | 1710 | .l_brace_tok = node_tok, |
| ... | @@ -1797,7 +1813,9 @@ pub const Node = union(enum) { | ... | @@ -1797,7 +1813,9 @@ pub const Node = union(enum) { |
| 1797 | .global_asm, | 1813 | .global_asm, |
| 1798 | .generic_association_expr, | 1814 | .generic_association_expr, |
| 1799 | .generic_default_expr, | 1815 | .generic_default_expr, |
| 1816 | .builtin_va_arg_pack, | ||
| 1800 | => null, | 1817 | => null, |
| 1818 | .builtin_va_arg_pack_len => .int, | ||
| 1801 | .builtin_types_compatible_p => .int, | 1819 | .builtin_types_compatible_p => .int, |
| 1802 | else => { | 1820 | else => { |
| 1803 | // If a node is typed the type is stored in data[0]. | 1821 | // If a node is typed the type is stored in data[0]. |
| ... | @@ -1963,6 +1981,8 @@ pub const Node = union(enum) { | ... | @@ -1963,6 +1981,8 @@ pub const Node = union(enum) { |
| 1963 | builtin_types_compatible_p, | 1981 | builtin_types_compatible_p, |
| 1964 | builtin_convertvector, | 1982 | builtin_convertvector, |
| 1965 | builtin_shufflevector, | 1983 | builtin_shufflevector, |
| 1984 | builtin_va_arg_pack, | ||
| 1985 | builtin_va_arg_pack_len, | ||
| 1966 | array_init_expr, | 1986 | array_init_expr, |
| 1967 | array_init_expr_two, | 1987 | array_init_expr_two, |
| 1968 | struct_init_expr, | 1988 | struct_init_expr, |
| ... | @@ -2789,6 +2809,14 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void { | ... | @@ -2789,6 +2809,14 @@ pub fn setNode(tree: *Tree, node: Node, index: usize) !void { |
| 2789 | tree.extra.appendAssumeCapacity(@intFromEnum(builtin.rhs)); | 2809 | tree.extra.appendAssumeCapacity(@intFromEnum(builtin.rhs)); |
| 2790 | tree.extra.appendSliceAssumeCapacity(@ptrCast(builtin.indexes)); | 2810 | tree.extra.appendSliceAssumeCapacity(@ptrCast(builtin.indexes)); |
| 2791 | }, | 2811 | }, |
| 2812 | .builtin_va_arg_pack => |builtin| { | ||
| 2813 | repr.tag = .builtin_va_arg_pack; | ||
| 2814 | repr.tok = builtin.builtin_tok; | ||
| 2815 | }, | ||
| 2816 | .builtin_va_arg_pack_len => |builtin| { | ||
| 2817 | repr.tag = .builtin_va_arg_pack_len; | ||
| 2818 | repr.tok = builtin.builtin_tok; | ||
| 2819 | }, | ||
| 2792 | .array_init_expr => |init| { | 2820 | .array_init_expr => |init| { |
| 2793 | repr.data[0] = @bitCast(init.container_qt); | 2821 | repr.data[0] = @bitCast(init.container_qt); |
| 2794 | if (init.items.len > 2) { | 2822 | if (init.items.len > 2) { |
| ... | @@ -3000,12 +3028,12 @@ pub fn tokSlice(tree: *const Tree, tok_i: TokenIndex) []const u8 { | ... | @@ -3000,12 +3028,12 @@ pub fn tokSlice(tree: *const Tree, tok_i: TokenIndex) []const u8 { |
| 3000 | return tree.comp.locSlice(loc); | 3028 | return tree.comp.locSlice(loc); |
| 3001 | } | 3029 | } |
| 3002 | 3030 | ||
| 3003 | pub fn dump(tree: *const Tree, config: std.Io.tty.Config, w: *std.Io.Writer) std.Io.tty.Config.SetColorError!void { | 3031 | pub fn dump(tree: *const Tree, term: std.Io.Terminal) std.Io.Terminal.SetColorError!void { |
| 3004 | for (tree.root_decls.items) |i| { | 3032 | for (tree.root_decls.items) |i| { |
| 3005 | try tree.dumpNode(i, 0, config, w); | 3033 | try tree.dumpNode(i, 0, term); |
| 3006 | try w.writeByte('\n'); | 3034 | try term.writer.writeByte('\n'); |
| 3007 | } | 3035 | } |
| 3008 | try w.flush(); | 3036 | try term.writer.flush(); |
| 3009 | } | 3037 | } |
| 3010 | 3038 | ||
| 3011 | fn dumpFieldAttributes(tree: *const Tree, attributes: []const Attribute, level: u32, w: *std.Io.Writer) !void { | 3039 | fn dumpFieldAttributes(tree: *const Tree, attributes: []const Attribute, level: u32, w: *std.Io.Writer) !void { |
| ... | @@ -3052,25 +3080,26 @@ fn dumpNode( | ... | @@ -3052,25 +3080,26 @@ fn dumpNode( |
| 3052 | tree: *const Tree, | 3080 | tree: *const Tree, |
| 3053 | node_index: Node.Index, | 3081 | node_index: Node.Index, |
| 3054 | level: u32, | 3082 | level: u32, |
| 3055 | config: std.Io.tty.Config, | 3083 | term: std.Io.Terminal, |
| 3056 | w: *std.Io.Writer, | ||
| 3057 | ) !void { | 3084 | ) !void { |
| 3058 | const delta = 2; | 3085 | const delta = 2; |
| 3059 | const half = delta / 2; | 3086 | const half = delta / 2; |
| 3060 | const TYPE = std.Io.tty.Color.bright_magenta; | 3087 | const TYPE = std.Io.Terminal.Color.bright_magenta; |
| 3061 | const TAG = std.Io.tty.Color.bright_cyan; | 3088 | const TAG = std.Io.Terminal.Color.bright_cyan; |
| 3062 | const IMPLICIT = std.Io.tty.Color.bright_blue; | 3089 | const IMPLICIT = std.Io.Terminal.Color.bright_blue; |
| 3063 | const NAME = std.Io.tty.Color.bright_red; | 3090 | const NAME = std.Io.Terminal.Color.bright_red; |
| 3064 | const LITERAL = std.Io.tty.Color.bright_green; | 3091 | const LITERAL = std.Io.Terminal.Color.bright_green; |
| 3065 | const ATTRIBUTE = std.Io.tty.Color.bright_yellow; | 3092 | const ATTRIBUTE = std.Io.Terminal.Color.bright_yellow; |
| 3093 | |||
| 3094 | const w = term.writer; | ||
| 3066 | 3095 | ||
| 3067 | const node = node_index.get(tree); | 3096 | const node = node_index.get(tree); |
| 3068 | try w.splatByteAll(' ', level); | 3097 | try w.splatByteAll(' ', level); |
| 3069 | 3098 | ||
| 3070 | if (config == .no_color) { | 3099 | if (term.mode == .no_color) { |
| 3071 | if (node.isImplicit()) try w.writeAll("implicit "); | 3100 | if (node.isImplicit()) try w.writeAll("implicit "); |
| 3072 | } else { | 3101 | } else { |
| 3073 | try config.setColor(w, if (node.isImplicit()) IMPLICIT else TAG); | 3102 | try term.setColor(if (node.isImplicit()) IMPLICIT else TAG); |
| 3074 | } | 3103 | } |
| 3075 | try w.print("{s}", .{@tagName(node)}); | 3104 | try w.print("{s}", .{@tagName(node)}); |
| 3076 | 3105 | ||
| ... | @@ -3078,36 +3107,36 @@ fn dumpNode( | ... | @@ -3078,36 +3107,36 @@ fn dumpNode( |
| 3078 | try w.writeAll(": "); | 3107 | try w.writeAll(": "); |
| 3079 | switch (node) { | 3108 | switch (node) { |
| 3080 | .cast => |cast| { | 3109 | .cast => |cast| { |
| 3081 | try config.setColor(w, .white); | 3110 | try term.setColor(.white); |
| 3082 | try w.print("({s}) ", .{@tagName(cast.kind)}); | 3111 | try w.print("({s}) ", .{@tagName(cast.kind)}); |
| 3083 | }, | 3112 | }, |
| 3084 | else => {}, | 3113 | else => {}, |
| 3085 | } | 3114 | } |
| 3086 | 3115 | ||
| 3087 | try config.setColor(w, TYPE); | 3116 | try term.setColor(TYPE); |
| 3088 | try w.writeByte('\''); | 3117 | try w.writeByte('\''); |
| 3089 | try qt.dump(tree.comp, w); | 3118 | try qt.dump(tree.comp, w); |
| 3090 | try w.writeByte('\''); | 3119 | try w.writeByte('\''); |
| 3091 | } | 3120 | } |
| 3092 | 3121 | ||
| 3093 | if (tree.isLval(node_index)) { | 3122 | if (tree.isLval(node_index)) { |
| 3094 | try config.setColor(w, ATTRIBUTE); | 3123 | try term.setColor(ATTRIBUTE); |
| 3095 | try w.writeAll(" lvalue"); | 3124 | try w.writeAll(" lvalue"); |
| 3096 | } | 3125 | } |
| 3097 | if (tree.isBitfield(node_index)) { | 3126 | if (tree.isBitfield(node_index)) { |
| 3098 | try config.setColor(w, ATTRIBUTE); | 3127 | try term.setColor(ATTRIBUTE); |
| 3099 | try w.writeAll(" bitfield"); | 3128 | try w.writeAll(" bitfield"); |
| 3100 | } | 3129 | } |
| 3101 | if (node == .asm_stmt) { | 3130 | if (node == .asm_stmt) { |
| 3102 | const quals = node.asm_stmt.quals; | 3131 | const quals = node.asm_stmt.quals; |
| 3103 | try config.setColor(w, ATTRIBUTE); | 3132 | try term.setColor(ATTRIBUTE); |
| 3104 | if (quals.@"inline") try w.writeAll(" inline"); | 3133 | if (quals.@"inline") try w.writeAll(" inline"); |
| 3105 | if (quals.@"volatile") try w.writeAll(" volatile"); | 3134 | if (quals.@"volatile") try w.writeAll(" volatile"); |
| 3106 | if (quals.goto) try w.writeAll(" goto"); | 3135 | if (quals.goto) try w.writeAll(" goto"); |
| 3107 | } | 3136 | } |
| 3108 | 3137 | ||
| 3109 | if (tree.value_map.get(node_index)) |val| { | 3138 | if (tree.value_map.get(node_index)) |val| { |
| 3110 | try config.setColor(w, LITERAL); | 3139 | try term.setColor(LITERAL); |
| 3111 | try w.writeAll(" (value: "); | 3140 | try w.writeAll(" (value: "); |
| 3112 | if (try val.print(node_index.qt(tree), tree.comp, w)) |nested| switch (nested) { | 3141 | if (try val.print(node_index.qt(tree), tree.comp, w)) |nested| switch (nested) { |
| 3113 | .pointer => |ptr| { | 3142 | .pointer => |ptr| { |
| ... | @@ -3127,15 +3156,15 @@ fn dumpNode( | ... | @@ -3127,15 +3156,15 @@ fn dumpNode( |
| 3127 | try w.writeByte(')'); | 3156 | try w.writeByte(')'); |
| 3128 | } | 3157 | } |
| 3129 | if (node == .return_stmt and node.return_stmt.operand == .implicit and node.return_stmt.operand.implicit) { | 3158 | if (node == .return_stmt and node.return_stmt.operand == .implicit and node.return_stmt.operand.implicit) { |
| 3130 | try config.setColor(w, IMPLICIT); | 3159 | try term.setColor(IMPLICIT); |
| 3131 | try w.writeAll(" (value: 0)"); | 3160 | try w.writeAll(" (value: 0)"); |
| 3132 | } | 3161 | } |
| 3133 | 3162 | ||
| 3134 | try w.writeAll("\n"); | 3163 | try w.writeAll("\n"); |
| 3135 | try config.setColor(w, .reset); | 3164 | try term.setColor(.reset); |
| 3136 | 3165 | ||
| 3137 | if (node_index.qtOrNull(tree)) |qt| { | 3166 | if (node_index.qtOrNull(tree)) |qt| { |
| 3138 | try config.setColor(w, ATTRIBUTE); | 3167 | try term.setColor(ATTRIBUTE); |
| 3139 | var it = Attribute.Iterator.initType(qt, tree.comp); | 3168 | var it = Attribute.Iterator.initType(qt, tree.comp); |
| 3140 | while (it.next()) |item| { | 3169 | while (it.next()) |item| { |
| 3141 | const attr, _ = item; | 3170 | const attr, _ = item; |
| ... | @@ -3143,56 +3172,56 @@ fn dumpNode( | ... | @@ -3143,56 +3172,56 @@ fn dumpNode( |
| 3143 | try w.print("attr: {s}", .{@tagName(attr.tag)}); | 3172 | try w.print("attr: {s}", .{@tagName(attr.tag)}); |
| 3144 | try tree.dumpAttribute(attr, w); | 3173 | try tree.dumpAttribute(attr, w); |
| 3145 | } | 3174 | } |
| 3146 | try config.setColor(w, .reset); | 3175 | try term.setColor(.reset); |
| 3147 | } | 3176 | } |
| 3148 | 3177 | ||
| 3149 | switch (node) { | 3178 | switch (node) { |
| 3150 | .empty_decl => {}, | 3179 | .empty_decl => {}, |
| 3151 | .global_asm => |@"asm"| { | 3180 | .global_asm => |@"asm"| { |
| 3152 | try tree.dumpNode(@"asm".asm_str, level + delta, config, w); | 3181 | try tree.dumpNode(@"asm".asm_str, level + delta, term); |
| 3153 | }, | 3182 | }, |
| 3154 | .static_assert => |assert| { | 3183 | .static_assert => |assert| { |
| 3155 | try w.splatByteAll(' ', level + 1); | 3184 | try w.splatByteAll(' ', level + 1); |
| 3156 | try w.writeAll("condition:\n"); | 3185 | try w.writeAll("condition:\n"); |
| 3157 | try tree.dumpNode(assert.cond, level + delta, config, w); | 3186 | try tree.dumpNode(assert.cond, level + delta, term); |
| 3158 | if (assert.message) |some| { | 3187 | if (assert.message) |some| { |
| 3159 | try w.splatByteAll(' ', level + 1); | 3188 | try w.splatByteAll(' ', level + 1); |
| 3160 | try w.writeAll("diagnostic:\n"); | 3189 | try w.writeAll("diagnostic:\n"); |
| 3161 | try tree.dumpNode(some, level + delta, config, w); | 3190 | try tree.dumpNode(some, level + delta, term); |
| 3162 | } | 3191 | } |
| 3163 | }, | 3192 | }, |
| 3164 | .function => |function| { | 3193 | .function => |function| { |
| 3165 | try w.splatByteAll(' ', level + half); | 3194 | try w.splatByteAll(' ', level + half); |
| 3166 | 3195 | ||
| 3167 | try config.setColor(w, ATTRIBUTE); | 3196 | try term.setColor(ATTRIBUTE); |
| 3168 | if (function.static) try w.writeAll("static "); | 3197 | if (function.static) try w.writeAll("static "); |
| 3169 | if (function.@"inline") try w.writeAll("inline "); | 3198 | if (function.@"inline") try w.writeAll("inline "); |
| 3170 | 3199 | ||
| 3171 | try config.setColor(w, .reset); | 3200 | try term.setColor(.reset); |
| 3172 | try w.writeAll("name: "); | 3201 | try w.writeAll("name: "); |
| 3173 | try config.setColor(w, NAME); | 3202 | try term.setColor(NAME); |
| 3174 | try w.print("{s}\n", .{tree.tokSlice(function.name_tok)}); | 3203 | try w.print("{s}\n", .{tree.tokSlice(function.name_tok)}); |
| 3175 | try config.setColor(w, .reset); | 3204 | try term.setColor(.reset); |
| 3176 | 3205 | ||
| 3177 | if (function.body) |body| { | 3206 | if (function.body) |body| { |
| 3178 | try w.splatByteAll(' ', level + half); | 3207 | try w.splatByteAll(' ', level + half); |
| 3179 | try w.writeAll("body:\n"); | 3208 | try w.writeAll("body:\n"); |
| 3180 | try tree.dumpNode(body, level + delta, config, w); | 3209 | try tree.dumpNode(body, level + delta, term); |
| 3181 | } | 3210 | } |
| 3182 | if (function.definition) |definition| { | 3211 | if (function.definition) |definition| { |
| 3183 | try w.splatByteAll(' ', level + half); | 3212 | try w.splatByteAll(' ', level + half); |
| 3184 | try w.writeAll("definition: "); | 3213 | try w.writeAll("definition: "); |
| 3185 | try config.setColor(w, NAME); | 3214 | try term.setColor(NAME); |
| 3186 | try w.print("0x{X}\n", .{@intFromEnum(definition)}); | 3215 | try w.print("0x{X}\n", .{@intFromEnum(definition)}); |
| 3187 | try config.setColor(w, .reset); | 3216 | try term.setColor(.reset); |
| 3188 | } | 3217 | } |
| 3189 | }, | 3218 | }, |
| 3190 | .typedef => |typedef| { | 3219 | .typedef => |typedef| { |
| 3191 | try w.splatByteAll(' ', level + half); | 3220 | try w.splatByteAll(' ', level + half); |
| 3192 | try w.writeAll("name: "); | 3221 | try w.writeAll("name: "); |
| 3193 | try config.setColor(w, NAME); | 3222 | try term.setColor(NAME); |
| 3194 | try w.print("{s}\n", .{tree.tokSlice(typedef.name_tok)}); | 3223 | try w.print("{s}\n", .{tree.tokSlice(typedef.name_tok)}); |
| 3195 | try config.setColor(w, .reset); | 3224 | try term.setColor(.reset); |
| 3196 | }, | 3225 | }, |
| 3197 | .param => |param| { | 3226 | .param => |param| { |
| 3198 | try w.splatByteAll(' ', level + half); | 3227 | try w.splatByteAll(' ', level + half); |
| ... | @@ -3200,21 +3229,21 @@ fn dumpNode( | ... | @@ -3200,21 +3229,21 @@ fn dumpNode( |
| 3200 | switch (param.storage_class) { | 3229 | switch (param.storage_class) { |
| 3201 | .auto => {}, | 3230 | .auto => {}, |
| 3202 | .register => { | 3231 | .register => { |
| 3203 | try config.setColor(w, ATTRIBUTE); | 3232 | try term.setColor(ATTRIBUTE); |
| 3204 | try w.writeAll("register "); | 3233 | try w.writeAll("register "); |
| 3205 | try config.setColor(w, .reset); | 3234 | try term.setColor(.reset); |
| 3206 | }, | 3235 | }, |
| 3207 | } | 3236 | } |
| 3208 | 3237 | ||
| 3209 | try w.writeAll("name: "); | 3238 | try w.writeAll("name: "); |
| 3210 | try config.setColor(w, NAME); | 3239 | try term.setColor(NAME); |
| 3211 | try w.print("{s}\n", .{tree.tokSlice(param.name_tok)}); | 3240 | try w.print("{s}\n", .{tree.tokSlice(param.name_tok)}); |
| 3212 | try config.setColor(w, .reset); | 3241 | try term.setColor(.reset); |
| 3213 | }, | 3242 | }, |
| 3214 | .variable => |variable| { | 3243 | .variable => |variable| { |
| 3215 | try w.splatByteAll(' ', level + half); | 3244 | try w.splatByteAll(' ', level + half); |
| 3216 | 3245 | ||
| 3217 | try config.setColor(w, ATTRIBUTE); | 3246 | try term.setColor(ATTRIBUTE); |
| 3218 | switch (variable.storage_class) { | 3247 | switch (variable.storage_class) { |
| 3219 | .auto => {}, | 3248 | .auto => {}, |
| 3220 | .static => try w.writeAll("static "), | 3249 | .static => try w.writeAll("static "), |
| ... | @@ -3222,37 +3251,37 @@ fn dumpNode( | ... | @@ -3222,37 +3251,37 @@ fn dumpNode( |
| 3222 | .register => try w.writeAll("register "), | 3251 | .register => try w.writeAll("register "), |
| 3223 | } | 3252 | } |
| 3224 | if (variable.thread_local) try w.writeAll("thread_local "); | 3253 | if (variable.thread_local) try w.writeAll("thread_local "); |
| 3225 | try config.setColor(w, .reset); | 3254 | try term.setColor(.reset); |
| 3226 | 3255 | ||
| 3227 | try w.writeAll("name: "); | 3256 | try w.writeAll("name: "); |
| 3228 | try config.setColor(w, NAME); | 3257 | try term.setColor(NAME); |
| 3229 | try w.print("{s}\n", .{tree.tokSlice(variable.name_tok)}); | 3258 | try w.print("{s}\n", .{tree.tokSlice(variable.name_tok)}); |
| 3230 | try config.setColor(w, .reset); | 3259 | try term.setColor(.reset); |
| 3231 | 3260 | ||
| 3232 | if (variable.initializer) |some| { | 3261 | if (variable.initializer) |some| { |
| 3233 | try config.setColor(w, .reset); | 3262 | try term.setColor(.reset); |
| 3234 | try w.splatByteAll(' ', level + half); | 3263 | try w.splatByteAll(' ', level + half); |
| 3235 | try w.writeAll("init:\n"); | 3264 | try w.writeAll("init:\n"); |
| 3236 | try tree.dumpNode(some, level + delta, config, w); | 3265 | try tree.dumpNode(some, level + delta, term); |
| 3237 | } | 3266 | } |
| 3238 | if (variable.definition) |definition| { | 3267 | if (variable.definition) |definition| { |
| 3239 | try w.splatByteAll(' ', level + half); | 3268 | try w.splatByteAll(' ', level + half); |
| 3240 | try w.writeAll("definition: "); | 3269 | try w.writeAll("definition: "); |
| 3241 | try config.setColor(w, NAME); | 3270 | try term.setColor(NAME); |
| 3242 | try w.print("0x{X}\n", .{@intFromEnum(definition)}); | 3271 | try w.print("0x{X}\n", .{@intFromEnum(definition)}); |
| 3243 | try config.setColor(w, .reset); | 3272 | try term.setColor(.reset); |
| 3244 | } | 3273 | } |
| 3245 | }, | 3274 | }, |
| 3246 | .enum_field => |field| { | 3275 | .enum_field => |field| { |
| 3247 | try w.splatByteAll(' ', level + half); | 3276 | try w.splatByteAll(' ', level + half); |
| 3248 | try w.writeAll("name: "); | 3277 | try w.writeAll("name: "); |
| 3249 | try config.setColor(w, NAME); | 3278 | try term.setColor(NAME); |
| 3250 | try w.print("{s}\n", .{tree.tokSlice(field.name_tok)}); | 3279 | try w.print("{s}\n", .{tree.tokSlice(field.name_tok)}); |
| 3251 | try config.setColor(w, .reset); | 3280 | try term.setColor(.reset); |
| 3252 | if (field.init) |some| { | 3281 | if (field.init) |some| { |
| 3253 | try w.splatByteAll(' ', level + half); | 3282 | try w.splatByteAll(' ', level + half); |
| 3254 | try w.writeAll("init:\n"); | 3283 | try w.writeAll("init:\n"); |
| 3255 | try tree.dumpNode(some, level + delta, config, w); | 3284 | try tree.dumpNode(some, level + delta, term); |
| 3256 | } | 3285 | } |
| 3257 | }, | 3286 | }, |
| 3258 | .record_field => |field| { | 3287 | .record_field => |field| { |
| ... | @@ -3260,26 +3289,26 @@ fn dumpNode( | ... | @@ -3260,26 +3289,26 @@ fn dumpNode( |
| 3260 | if (name_tok_id == .identifier or name_tok_id == .extended_identifier) { | 3289 | if (name_tok_id == .identifier or name_tok_id == .extended_identifier) { |
| 3261 | try w.splatByteAll(' ', level + half); | 3290 | try w.splatByteAll(' ', level + half); |
| 3262 | try w.writeAll("name: "); | 3291 | try w.writeAll("name: "); |
| 3263 | try config.setColor(w, NAME); | 3292 | try term.setColor(NAME); |
| 3264 | try w.print("{s}\n", .{tree.tokSlice(field.name_or_first_tok)}); | 3293 | try w.print("{s}\n", .{tree.tokSlice(field.name_or_first_tok)}); |
| 3265 | try config.setColor(w, .reset); | 3294 | try term.setColor(.reset); |
| 3266 | } | 3295 | } |
| 3267 | if (field.bit_width) |some| { | 3296 | if (field.bit_width) |some| { |
| 3268 | try w.splatByteAll(' ', level + half); | 3297 | try w.splatByteAll(' ', level + half); |
| 3269 | try w.writeAll("bits:\n"); | 3298 | try w.writeAll("bits:\n"); |
| 3270 | try tree.dumpNode(some, level + delta, config, w); | 3299 | try tree.dumpNode(some, level + delta, term); |
| 3271 | } | 3300 | } |
| 3272 | }, | 3301 | }, |
| 3273 | .compound_stmt => |compound| { | 3302 | .compound_stmt => |compound| { |
| 3274 | for (compound.body, 0..) |stmt, i| { | 3303 | for (compound.body, 0..) |stmt, i| { |
| 3275 | if (i != 0) try w.writeByte('\n'); | 3304 | if (i != 0) try w.writeByte('\n'); |
| 3276 | try tree.dumpNode(stmt, level + delta, config, w); | 3305 | try tree.dumpNode(stmt, level + delta, term); |
| 3277 | } | 3306 | } |
| 3278 | }, | 3307 | }, |
| 3279 | .enum_decl => |decl| { | 3308 | .enum_decl => |decl| { |
| 3280 | for (decl.fields, 0..) |field, i| { | 3309 | for (decl.fields, 0..) |field, i| { |
| 3281 | if (i != 0) try w.writeByte('\n'); | 3310 | if (i != 0) try w.writeByte('\n'); |
| 3282 | try tree.dumpNode(field, level + delta, config, w); | 3311 | try tree.dumpNode(field, level + delta, term); |
| 3283 | } | 3312 | } |
| 3284 | }, | 3313 | }, |
| 3285 | .struct_decl, .union_decl => |decl| { | 3314 | .struct_decl, .union_decl => |decl| { |
| ... | @@ -3291,7 +3320,7 @@ fn dumpNode( | ... | @@ -3291,7 +3320,7 @@ fn dumpNode( |
| 3291 | var field_i: u32 = 0; | 3320 | var field_i: u32 = 0; |
| 3292 | for (decl.fields, 0..) |field_node, i| { | 3321 | for (decl.fields, 0..) |field_node, i| { |
| 3293 | if (i != 0) try w.writeByte('\n'); | 3322 | if (i != 0) try w.writeByte('\n'); |
| 3294 | try tree.dumpNode(field_node, level + delta, config, w); | 3323 | try tree.dumpNode(field_node, level + delta, term); |
| 3295 | 3324 | ||
| 3296 | if (field_node.get(tree) != .record_field) continue; | 3325 | if (field_node.get(tree) != .record_field) continue; |
| 3297 | if (fields.len == 0) continue; | 3326 | if (fields.len == 0) continue; |
| ... | @@ -3301,32 +3330,32 @@ fn dumpNode( | ... | @@ -3301,32 +3330,32 @@ fn dumpNode( |
| 3301 | 3330 | ||
| 3302 | if (field_attributes.len == 0) continue; | 3331 | if (field_attributes.len == 0) continue; |
| 3303 | 3332 | ||
| 3304 | try config.setColor(w, ATTRIBUTE); | 3333 | try term.setColor(ATTRIBUTE); |
| 3305 | try tree.dumpFieldAttributes(field_attributes, level + delta + half, w); | 3334 | try tree.dumpFieldAttributes(field_attributes, level + delta + half, w); |
| 3306 | try config.setColor(w, .reset); | 3335 | try term.setColor(.reset); |
| 3307 | } | 3336 | } |
| 3308 | }, | 3337 | }, |
| 3309 | .array_init_expr, .struct_init_expr => |init| { | 3338 | .array_init_expr, .struct_init_expr => |init| { |
| 3310 | for (init.items, 0..) |item, i| { | 3339 | for (init.items, 0..) |item, i| { |
| 3311 | if (i != 0) try w.writeByte('\n'); | 3340 | if (i != 0) try w.writeByte('\n'); |
| 3312 | try tree.dumpNode(item, level + delta, config, w); | 3341 | try tree.dumpNode(item, level + delta, term); |
| 3313 | } | 3342 | } |
| 3314 | }, | 3343 | }, |
| 3315 | .union_init_expr => |init| { | 3344 | .union_init_expr => |init| { |
| 3316 | try w.splatByteAll(' ', level + half); | 3345 | try w.splatByteAll(' ', level + half); |
| 3317 | try w.writeAll("field index: "); | 3346 | try w.writeAll("field index: "); |
| 3318 | try config.setColor(w, LITERAL); | 3347 | try term.setColor(LITERAL); |
| 3319 | try w.print("{d}\n", .{init.field_index}); | 3348 | try w.print("{d}\n", .{init.field_index}); |
| 3320 | try config.setColor(w, .reset); | 3349 | try term.setColor(.reset); |
| 3321 | if (init.initializer) |some| { | 3350 | if (init.initializer) |some| { |
| 3322 | try tree.dumpNode(some, level + delta, config, w); | 3351 | try tree.dumpNode(some, level + delta, term); |
| 3323 | } | 3352 | } |
| 3324 | }, | 3353 | }, |
| 3325 | .compound_literal_expr => |literal| { | 3354 | .compound_literal_expr => |literal| { |
| 3326 | if (literal.storage_class != .auto or literal.thread_local) { | 3355 | if (literal.storage_class != .auto or literal.thread_local) { |
| 3327 | try w.splatByteAll(' ', level + half - 1); | 3356 | try w.splatByteAll(' ', level + half - 1); |
| 3328 | 3357 | ||
| 3329 | try config.setColor(w, ATTRIBUTE); | 3358 | try term.setColor(ATTRIBUTE); |
| 3330 | switch (literal.storage_class) { | 3359 | switch (literal.storage_class) { |
| 3331 | .auto => {}, | 3360 | .auto => {}, |
| 3332 | .static => try w.writeAll(" static"), | 3361 | .static => try w.writeAll(" static"), |
| ... | @@ -3334,137 +3363,138 @@ fn dumpNode( | ... | @@ -3334,137 +3363,138 @@ fn dumpNode( |
| 3334 | } | 3363 | } |
| 3335 | if (literal.thread_local) try w.writeAll(" thread_local"); | 3364 | if (literal.thread_local) try w.writeAll(" thread_local"); |
| 3336 | try w.writeByte('\n'); | 3365 | try w.writeByte('\n'); |
| 3337 | try config.setColor(w, .reset); | 3366 | try term.setColor(.reset); |
| 3338 | } | 3367 | } |
| 3339 | 3368 | ||
| 3340 | try tree.dumpNode(literal.initializer, level + half, config, w); | 3369 | try tree.dumpNode(literal.initializer, level + half, term); |
| 3341 | }, | 3370 | }, |
| 3342 | .labeled_stmt => |labeled| { | 3371 | .labeled_stmt => |labeled| { |
| 3343 | try w.splatByteAll(' ', level + half); | 3372 | try w.splatByteAll(' ', level + half); |
| 3344 | try w.writeAll("label: "); | 3373 | try w.writeAll("label: "); |
| 3345 | try config.setColor(w, LITERAL); | 3374 | try term.setColor(LITERAL); |
| 3346 | try w.print("{s}\n", .{tree.tokSlice(labeled.label_tok)}); | 3375 | try w.print("{s}\n", .{tree.tokSlice(labeled.label_tok)}); |
| 3347 | 3376 | ||
| 3348 | try config.setColor(w, .reset); | 3377 | try term.setColor(.reset); |
| 3349 | try w.splatByteAll(' ', level + half); | 3378 | try w.splatByteAll(' ', level + half); |
| 3350 | try w.writeAll("stmt:\n"); | 3379 | try w.writeAll("stmt:\n"); |
| 3351 | try tree.dumpNode(labeled.body, level + delta, config, w); | 3380 | try tree.dumpNode(labeled.body, level + delta, term); |
| 3352 | }, | 3381 | }, |
| 3353 | .case_stmt => |case| { | 3382 | .case_stmt => |case| { |
| 3354 | try w.splatByteAll(' ', level + half); | 3383 | try w.splatByteAll(' ', level + half); |
| 3355 | 3384 | ||
| 3356 | if (case.end) |some| { | 3385 | if (case.end) |some| { |
| 3357 | try w.writeAll("range start:\n"); | 3386 | try w.writeAll("range start:\n"); |
| 3358 | try tree.dumpNode(case.start, level + delta, config, w); | 3387 | try tree.dumpNode(case.start, level + delta, term); |
| 3359 | 3388 | ||
| 3360 | try w.splatByteAll(' ', level + half); | 3389 | try w.splatByteAll(' ', level + half); |
| 3361 | try w.writeAll("range end:\n"); | 3390 | try w.writeAll("range end:\n"); |
| 3362 | try tree.dumpNode(some, level + delta, config, w); | 3391 | try tree.dumpNode(some, level + delta, term); |
| 3363 | } else { | 3392 | } else { |
| 3364 | try w.writeAll("value:\n"); | 3393 | try w.writeAll("value:\n"); |
| 3365 | try tree.dumpNode(case.start, level + delta, config, w); | 3394 | try tree.dumpNode(case.start, level + delta, term); |
| 3366 | } | 3395 | } |
| 3367 | 3396 | ||
| 3368 | try w.splatByteAll(' ', level + half); | 3397 | try w.splatByteAll(' ', level + half); |
| 3369 | try w.writeAll("stmt:\n"); | 3398 | try w.writeAll("stmt:\n"); |
| 3370 | try tree.dumpNode(case.body, level + delta, config, w); | 3399 | try tree.dumpNode(case.body, level + delta, term); |
| 3371 | }, | 3400 | }, |
| 3372 | .default_stmt => |default| { | 3401 | .default_stmt => |default| { |
| 3373 | try w.splatByteAll(' ', level + half); | 3402 | try w.splatByteAll(' ', level + half); |
| 3374 | try w.writeAll("stmt:\n"); | 3403 | try w.writeAll("stmt:\n"); |
| 3375 | try tree.dumpNode(default.body, level + delta, config, w); | 3404 | try tree.dumpNode(default.body, level + delta, term); |
| 3376 | }, | 3405 | }, |
| 3377 | .binary_cond_expr, .cond_expr, .builtin_choose_expr => |conditional| { | 3406 | .binary_cond_expr, .cond_expr, .builtin_choose_expr => |conditional| { |
| 3378 | try w.splatByteAll(' ', level + half); | 3407 | try w.splatByteAll(' ', level + half); |
| 3379 | try w.writeAll("cond:\n"); | 3408 | try w.writeAll("cond:\n"); |
| 3380 | try tree.dumpNode(conditional.cond, level + delta, config, w); | 3409 | try tree.dumpNode(conditional.cond, level + delta, term); |
| 3381 | 3410 | ||
| 3382 | try w.splatByteAll(' ', level + half); | 3411 | try w.splatByteAll(' ', level + half); |
| 3383 | try w.writeAll("then:\n"); | 3412 | try w.writeAll("then:\n"); |
| 3384 | try tree.dumpNode(conditional.then_expr, level + delta, config, w); | 3413 | try tree.dumpNode(conditional.then_expr, level + delta, term); |
| 3385 | 3414 | ||
| 3386 | try w.splatByteAll(' ', level + half); | 3415 | try w.splatByteAll(' ', level + half); |
| 3387 | try w.writeAll("else:\n"); | 3416 | try w.writeAll("else:\n"); |
| 3388 | try tree.dumpNode(conditional.else_expr, level + delta, config, w); | 3417 | try tree.dumpNode(conditional.else_expr, level + delta, term); |
| 3389 | }, | 3418 | }, |
| 3390 | .builtin_types_compatible_p => |call| { | 3419 | .builtin_types_compatible_p => |call| { |
| 3391 | try w.splatByteAll(' ', level + half); | 3420 | try w.splatByteAll(' ', level + half); |
| 3392 | try w.writeAll("lhs: "); | 3421 | try w.writeAll("lhs: "); |
| 3393 | try config.setColor(w, TYPE); | 3422 | try term.setColor(TYPE); |
| 3394 | try call.lhs.dump(tree.comp, w); | 3423 | try call.lhs.dump(tree.comp, w); |
| 3395 | try w.writeByte('\n'); | 3424 | try w.writeByte('\n'); |
| 3396 | try config.setColor(w, .reset); | 3425 | try term.setColor(.reset); |
| 3397 | 3426 | ||
| 3398 | try w.splatByteAll(' ', level + half); | 3427 | try w.splatByteAll(' ', level + half); |
| 3399 | try w.writeAll("rhs: "); | 3428 | try w.writeAll("rhs: "); |
| 3400 | try config.setColor(w, TYPE); | 3429 | try term.setColor(TYPE); |
| 3401 | try call.rhs.dump(tree.comp, w); | 3430 | try call.rhs.dump(tree.comp, w); |
| 3402 | try w.writeByte('\n'); | 3431 | try w.writeByte('\n'); |
| 3403 | try config.setColor(w, .reset); | 3432 | try term.setColor(.reset); |
| 3404 | }, | 3433 | }, |
| 3405 | .builtin_convertvector => |convert| { | 3434 | .builtin_convertvector => |convert| { |
| 3406 | try w.splatByteAll(' ', level + half); | 3435 | try w.splatByteAll(' ', level + half); |
| 3407 | try w.writeAll("operand:\n"); | 3436 | try w.writeAll("operand:\n"); |
| 3408 | try tree.dumpNode(convert.operand, level + delta, config, w); | 3437 | try tree.dumpNode(convert.operand, level + delta, term); |
| 3409 | }, | 3438 | }, |
| 3410 | .builtin_shufflevector => |shuffle| { | 3439 | .builtin_shufflevector => |shuffle| { |
| 3411 | try w.splatByteAll(' ', level + half); | 3440 | try w.splatByteAll(' ', level + half); |
| 3412 | try w.writeAll("lhs:\n"); | 3441 | try w.writeAll("lhs:\n"); |
| 3413 | try tree.dumpNode(shuffle.lhs, level + delta, config, w); | 3442 | try tree.dumpNode(shuffle.lhs, level + delta, term); |
| 3414 | 3443 | ||
| 3415 | try w.splatByteAll(' ', level + half); | 3444 | try w.splatByteAll(' ', level + half); |
| 3416 | try w.writeAll("rhs:\n"); | 3445 | try w.writeAll("rhs:\n"); |
| 3417 | try tree.dumpNode(shuffle.rhs, level + delta, config, w); | 3446 | try tree.dumpNode(shuffle.rhs, level + delta, term); |
| 3418 | 3447 | ||
| 3419 | if (shuffle.indexes.len > 0) { | 3448 | if (shuffle.indexes.len > 0) { |
| 3420 | try w.splatByteAll(' ', level + half); | 3449 | try w.splatByteAll(' ', level + half); |
| 3421 | try w.writeAll("indexes:\n"); | 3450 | try w.writeAll("indexes:\n"); |
| 3422 | for (shuffle.indexes) |index| { | 3451 | for (shuffle.indexes) |index| { |
| 3423 | try tree.dumpNode(index, level + delta, config, w); | 3452 | try tree.dumpNode(index, level + delta, term); |
| 3424 | } | 3453 | } |
| 3425 | } | 3454 | } |
| 3426 | }, | 3455 | }, |
| 3456 | .builtin_va_arg_pack, .builtin_va_arg_pack_len => {}, | ||
| 3427 | .if_stmt => |@"if"| { | 3457 | .if_stmt => |@"if"| { |
| 3428 | try w.splatByteAll(' ', level + half); | 3458 | try w.splatByteAll(' ', level + half); |
| 3429 | try w.writeAll("cond:\n"); | 3459 | try w.writeAll("cond:\n"); |
| 3430 | try tree.dumpNode(@"if".cond, level + delta, config, w); | 3460 | try tree.dumpNode(@"if".cond, level + delta, term); |
| 3431 | 3461 | ||
| 3432 | try w.splatByteAll(' ', level + half); | 3462 | try w.splatByteAll(' ', level + half); |
| 3433 | try w.writeAll("then:\n"); | 3463 | try w.writeAll("then:\n"); |
| 3434 | try tree.dumpNode(@"if".then_body, level + delta, config, w); | 3464 | try tree.dumpNode(@"if".then_body, level + delta, term); |
| 3435 | 3465 | ||
| 3436 | if (@"if".else_body) |some| { | 3466 | if (@"if".else_body) |some| { |
| 3437 | try w.splatByteAll(' ', level + half); | 3467 | try w.splatByteAll(' ', level + half); |
| 3438 | try w.writeAll("else:\n"); | 3468 | try w.writeAll("else:\n"); |
| 3439 | try tree.dumpNode(some, level + delta, config, w); | 3469 | try tree.dumpNode(some, level + delta, term); |
| 3440 | } | 3470 | } |
| 3441 | }, | 3471 | }, |
| 3442 | .switch_stmt => |@"switch"| { | 3472 | .switch_stmt => |@"switch"| { |
| 3443 | try w.splatByteAll(' ', level + half); | 3473 | try w.splatByteAll(' ', level + half); |
| 3444 | try w.writeAll("cond:\n"); | 3474 | try w.writeAll("cond:\n"); |
| 3445 | try tree.dumpNode(@"switch".cond, level + delta, config, w); | 3475 | try tree.dumpNode(@"switch".cond, level + delta, term); |
| 3446 | 3476 | ||
| 3447 | try w.splatByteAll(' ', level + half); | 3477 | try w.splatByteAll(' ', level + half); |
| 3448 | try w.writeAll("body:\n"); | 3478 | try w.writeAll("body:\n"); |
| 3449 | try tree.dumpNode(@"switch".body, level + delta, config, w); | 3479 | try tree.dumpNode(@"switch".body, level + delta, term); |
| 3450 | }, | 3480 | }, |
| 3451 | .while_stmt => |@"while"| { | 3481 | .while_stmt => |@"while"| { |
| 3452 | try w.splatByteAll(' ', level + half); | 3482 | try w.splatByteAll(' ', level + half); |
| 3453 | try w.writeAll("cond:\n"); | 3483 | try w.writeAll("cond:\n"); |
| 3454 | try tree.dumpNode(@"while".cond, level + delta, config, w); | 3484 | try tree.dumpNode(@"while".cond, level + delta, term); |
| 3455 | 3485 | ||
| 3456 | try w.splatByteAll(' ', level + half); | 3486 | try w.splatByteAll(' ', level + half); |
| 3457 | try w.writeAll("body:\n"); | 3487 | try w.writeAll("body:\n"); |
| 3458 | try tree.dumpNode(@"while".body, level + delta, config, w); | 3488 | try tree.dumpNode(@"while".body, level + delta, term); |
| 3459 | }, | 3489 | }, |
| 3460 | .do_while_stmt => |do| { | 3490 | .do_while_stmt => |do| { |
| 3461 | try w.splatByteAll(' ', level + half); | 3491 | try w.splatByteAll(' ', level + half); |
| 3462 | try w.writeAll("cond:\n"); | 3492 | try w.writeAll("cond:\n"); |
| 3463 | try tree.dumpNode(do.cond, level + delta, config, w); | 3493 | try tree.dumpNode(do.cond, level + delta, term); |
| 3464 | 3494 | ||
| 3465 | try w.splatByteAll(' ', level + half); | 3495 | try w.splatByteAll(' ', level + half); |
| 3466 | try w.writeAll("body:\n"); | 3496 | try w.writeAll("body:\n"); |
| 3467 | try tree.dumpNode(do.body, level + delta, config, w); | 3497 | try tree.dumpNode(do.body, level + delta, term); |
| 3468 | }, | 3498 | }, |
| 3469 | .for_stmt => |@"for"| { | 3499 | .for_stmt => |@"for"| { |
| 3470 | switch (@"for".init) { | 3500 | switch (@"for".init) { |
| ... | @@ -3472,48 +3502,48 @@ fn dumpNode( | ... | @@ -3472,48 +3502,48 @@ fn dumpNode( |
| 3472 | try w.splatByteAll(' ', level + half); | 3502 | try w.splatByteAll(' ', level + half); |
| 3473 | try w.writeAll("decl:\n"); | 3503 | try w.writeAll("decl:\n"); |
| 3474 | for (decls) |decl| { | 3504 | for (decls) |decl| { |
| 3475 | try tree.dumpNode(decl, level + delta, config, w); | 3505 | try tree.dumpNode(decl, level + delta, term); |
| 3476 | try w.writeByte('\n'); | 3506 | try w.writeByte('\n'); |
| 3477 | } | 3507 | } |
| 3478 | }, | 3508 | }, |
| 3479 | .expr => |expr| if (expr) |some| { | 3509 | .expr => |expr| if (expr) |some| { |
| 3480 | try w.splatByteAll(' ', level + half); | 3510 | try w.splatByteAll(' ', level + half); |
| 3481 | try w.writeAll("init:\n"); | 3511 | try w.writeAll("init:\n"); |
| 3482 | try tree.dumpNode(some, level + delta, config, w); | 3512 | try tree.dumpNode(some, level + delta, term); |
| 3483 | }, | 3513 | }, |
| 3484 | } | 3514 | } |
| 3485 | if (@"for".cond) |some| { | 3515 | if (@"for".cond) |some| { |
| 3486 | try w.splatByteAll(' ', level + half); | 3516 | try w.splatByteAll(' ', level + half); |
| 3487 | try w.writeAll("cond:\n"); | 3517 | try w.writeAll("cond:\n"); |
| 3488 | try tree.dumpNode(some, level + delta, config, w); | 3518 | try tree.dumpNode(some, level + delta, term); |
| 3489 | } | 3519 | } |
| 3490 | if (@"for".incr) |some| { | 3520 | if (@"for".incr) |some| { |
| 3491 | try w.splatByteAll(' ', level + half); | 3521 | try w.splatByteAll(' ', level + half); |
| 3492 | try w.writeAll("incr:\n"); | 3522 | try w.writeAll("incr:\n"); |
| 3493 | try tree.dumpNode(some, level + delta, config, w); | 3523 | try tree.dumpNode(some, level + delta, term); |
| 3494 | } | 3524 | } |
| 3495 | try w.splatByteAll(' ', level + half); | 3525 | try w.splatByteAll(' ', level + half); |
| 3496 | try w.writeAll("body:\n"); | 3526 | try w.writeAll("body:\n"); |
| 3497 | try tree.dumpNode(@"for".body, level + delta, config, w); | 3527 | try tree.dumpNode(@"for".body, level + delta, term); |
| 3498 | }, | 3528 | }, |
| 3499 | .addr_of_label => |addr| { | 3529 | .addr_of_label => |addr| { |
| 3500 | try w.splatByteAll(' ', level + half); | 3530 | try w.splatByteAll(' ', level + half); |
| 3501 | try w.writeAll("label: "); | 3531 | try w.writeAll("label: "); |
| 3502 | try config.setColor(w, LITERAL); | 3532 | try term.setColor(LITERAL); |
| 3503 | try w.print("{s}\n", .{tree.tokSlice(addr.label_tok)}); | 3533 | try w.print("{s}\n", .{tree.tokSlice(addr.label_tok)}); |
| 3504 | try config.setColor(w, .reset); | 3534 | try term.setColor(.reset); |
| 3505 | }, | 3535 | }, |
| 3506 | .goto_stmt => |goto| { | 3536 | .goto_stmt => |goto| { |
| 3507 | try w.splatByteAll(' ', level + half); | 3537 | try w.splatByteAll(' ', level + half); |
| 3508 | try w.writeAll("label: "); | 3538 | try w.writeAll("label: "); |
| 3509 | try config.setColor(w, LITERAL); | 3539 | try term.setColor(LITERAL); |
| 3510 | try w.print("{s}\n", .{tree.tokSlice(goto.label_tok)}); | 3540 | try w.print("{s}\n", .{tree.tokSlice(goto.label_tok)}); |
| 3511 | try config.setColor(w, .reset); | 3541 | try term.setColor(.reset); |
| 3512 | }, | 3542 | }, |
| 3513 | .computed_goto_stmt => |goto| { | 3543 | .computed_goto_stmt => |goto| { |
| 3514 | try w.splatByteAll(' ', level + half); | 3544 | try w.splatByteAll(' ', level + half); |
| 3515 | try w.writeAll("expr:\n"); | 3545 | try w.writeAll("expr:\n"); |
| 3516 | try tree.dumpNode(goto.expr, level + delta, config, w); | 3546 | try tree.dumpNode(goto.expr, level + delta, term); |
| 3517 | }, | 3547 | }, |
| 3518 | .continue_stmt, .break_stmt, .null_stmt => {}, | 3548 | .continue_stmt, .break_stmt, .null_stmt => {}, |
| 3519 | .return_stmt => |ret| { | 3549 | .return_stmt => |ret| { |
| ... | @@ -3521,43 +3551,43 @@ fn dumpNode( | ... | @@ -3521,43 +3551,43 @@ fn dumpNode( |
| 3521 | .expr => |expr| { | 3551 | .expr => |expr| { |
| 3522 | try w.splatByteAll(' ', level + half); | 3552 | try w.splatByteAll(' ', level + half); |
| 3523 | try w.writeAll("expr:\n"); | 3553 | try w.writeAll("expr:\n"); |
| 3524 | try tree.dumpNode(expr, level + delta, config, w); | 3554 | try tree.dumpNode(expr, level + delta, term); |
| 3525 | }, | 3555 | }, |
| 3526 | .implicit => {}, | 3556 | .implicit => {}, |
| 3527 | .none => {}, | 3557 | .none => {}, |
| 3528 | } | 3558 | } |
| 3529 | }, | 3559 | }, |
| 3530 | .asm_stmt => |@"asm"| { | 3560 | .asm_stmt => |@"asm"| { |
| 3531 | try tree.dumpNode(@"asm".asm_str, level + delta, config, w); | 3561 | try tree.dumpNode(@"asm".asm_str, level + delta, term); |
| 3532 | 3562 | ||
| 3533 | const write_operand = struct { | 3563 | const write_operand = struct { |
| 3534 | fn write_operand( | 3564 | fn write_operand( |
| 3535 | _w: *std.Io.Writer, | ||
| 3536 | _level: u32, | 3565 | _level: u32, |
| 3537 | _config: std.Io.tty.Config, | 3566 | _term: std.Io.Terminal, |
| 3538 | _tree: *const Tree, | 3567 | _tree: *const Tree, |
| 3539 | operands: []const Node.AsmStmt.Operand, | 3568 | operands: []const Node.AsmStmt.Operand, |
| 3540 | ) std.Io.tty.Config.SetColorError!void { | 3569 | ) std.Io.Terminal.SetColorError!void { |
| 3570 | const _w = _term.writer; | ||
| 3541 | for (operands) |operand| { | 3571 | for (operands) |operand| { |
| 3542 | if (operand.name != 0) { | 3572 | if (operand.name != 0) { |
| 3543 | try _w.splatByteAll(' ', _level + delta); | 3573 | try _w.splatByteAll(' ', _level + delta); |
| 3544 | try _w.writeAll("asm name: "); | 3574 | try _w.writeAll("asm name: "); |
| 3545 | try _config.setColor(_w, NAME); | 3575 | try _term.setColor(NAME); |
| 3546 | try _w.writeAll(_tree.tokSlice(operand.name)); | 3576 | try _w.writeAll(_tree.tokSlice(operand.name)); |
| 3547 | try _w.writeByte('\n'); | 3577 | try _w.writeByte('\n'); |
| 3548 | try _config.setColor(_w, .reset); | 3578 | try _term.setColor(.reset); |
| 3549 | } | 3579 | } |
| 3550 | 3580 | ||
| 3551 | try _w.splatByteAll(' ', _level + delta); | 3581 | try _w.splatByteAll(' ', _level + delta); |
| 3552 | try _w.writeAll("constraint: "); | 3582 | try _w.writeAll("constraint: "); |
| 3553 | const constraint_val = _tree.value_map.get(operand.constraint).?; | 3583 | const constraint_val = _tree.value_map.get(operand.constraint).?; |
| 3554 | try _config.setColor(_w, LITERAL); | 3584 | try _term.setColor(LITERAL); |
| 3555 | _ = try constraint_val.print(operand.constraint.qt(_tree), _tree.comp, _w); | 3585 | _ = try constraint_val.print(operand.constraint.qt(_tree), _tree.comp, _w); |
| 3556 | try _w.writeByte('\n'); | 3586 | try _w.writeByte('\n'); |
| 3557 | 3587 | ||
| 3558 | try _tree.dumpNode(operand.expr, _level + delta, _config, _w); | 3588 | try _tree.dumpNode(operand.expr, _level + delta, _term); |
| 3559 | } | 3589 | } |
| 3560 | try _config.setColor(_w, .reset); | 3590 | try _term.setColor(.reset); |
| 3561 | } | 3591 | } |
| 3562 | }.write_operand; | 3592 | }.write_operand; |
| 3563 | 3593 | ||
| ... | @@ -3565,18 +3595,18 @@ fn dumpNode( | ... | @@ -3565,18 +3595,18 @@ fn dumpNode( |
| 3565 | try w.splatByteAll(' ', level + half); | 3595 | try w.splatByteAll(' ', level + half); |
| 3566 | try w.writeAll("ouputs:\n"); | 3596 | try w.writeAll("ouputs:\n"); |
| 3567 | 3597 | ||
| 3568 | try write_operand(w, level, config, tree, @"asm".outputs); | 3598 | try write_operand(level, term, tree, @"asm".outputs); |
| 3569 | } | 3599 | } |
| 3570 | if (@"asm".inputs.len > 0) { | 3600 | if (@"asm".inputs.len > 0) { |
| 3571 | try w.splatByteAll(' ', level + half); | 3601 | try w.splatByteAll(' ', level + half); |
| 3572 | try w.writeAll("inputs:\n"); | 3602 | try w.writeAll("inputs:\n"); |
| 3573 | 3603 | ||
| 3574 | try write_operand(w, level, config, tree, @"asm".inputs); | 3604 | try write_operand(level, term, tree, @"asm".inputs); |
| 3575 | } | 3605 | } |
| 3576 | if (@"asm".clobbers.len > 0) { | 3606 | if (@"asm".clobbers.len > 0) { |
| 3577 | try w.splatByteAll(' ', level + half); | 3607 | try w.splatByteAll(' ', level + half); |
| 3578 | try w.writeAll("clobbers:\n"); | 3608 | try w.writeAll("clobbers:\n"); |
| 3579 | try config.setColor(w, LITERAL); | 3609 | try term.setColor(LITERAL); |
| 3580 | for (@"asm".clobbers) |clobber| { | 3610 | for (@"asm".clobbers) |clobber| { |
| 3581 | const clobber_val = tree.value_map.get(clobber).?; | 3611 | const clobber_val = tree.value_map.get(clobber).?; |
| 3582 | 3612 | ||
| ... | @@ -3584,41 +3614,41 @@ fn dumpNode( | ... | @@ -3584,41 +3614,41 @@ fn dumpNode( |
| 3584 | _ = try clobber_val.print(clobber.qt(tree), tree.comp, w); | 3614 | _ = try clobber_val.print(clobber.qt(tree), tree.comp, w); |
| 3585 | try w.writeByte('\n'); | 3615 | try w.writeByte('\n'); |
| 3586 | } | 3616 | } |
| 3587 | try config.setColor(w, .reset); | 3617 | try term.setColor(.reset); |
| 3588 | } | 3618 | } |
| 3589 | if (@"asm".labels.len > 0) { | 3619 | if (@"asm".labels.len > 0) { |
| 3590 | try w.splatByteAll(' ', level + half); | 3620 | try w.splatByteAll(' ', level + half); |
| 3591 | try w.writeAll("labels:\n"); | 3621 | try w.writeAll("labels:\n"); |
| 3592 | for (@"asm".labels) |label| { | 3622 | for (@"asm".labels) |label| { |
| 3593 | try tree.dumpNode(label, level + delta, config, w); | 3623 | try tree.dumpNode(label, level + delta, term); |
| 3594 | } | 3624 | } |
| 3595 | } | 3625 | } |
| 3596 | }, | 3626 | }, |
| 3597 | .call_expr => |call| { | 3627 | .call_expr => |call| { |
| 3598 | try w.splatByteAll(' ', level + half); | 3628 | try w.splatByteAll(' ', level + half); |
| 3599 | try w.writeAll("callee:\n"); | 3629 | try w.writeAll("callee:\n"); |
| 3600 | try tree.dumpNode(call.callee, level + delta, config, w); | 3630 | try tree.dumpNode(call.callee, level + delta, term); |
| 3601 | 3631 | ||
| 3602 | if (call.args.len > 0) { | 3632 | if (call.args.len > 0) { |
| 3603 | try w.splatByteAll(' ', level + half); | 3633 | try w.splatByteAll(' ', level + half); |
| 3604 | try w.writeAll("args:\n"); | 3634 | try w.writeAll("args:\n"); |
| 3605 | for (call.args) |arg| { | 3635 | for (call.args) |arg| { |
| 3606 | try tree.dumpNode(arg, level + delta, config, w); | 3636 | try tree.dumpNode(arg, level + delta, term); |
| 3607 | } | 3637 | } |
| 3608 | } | 3638 | } |
| 3609 | }, | 3639 | }, |
| 3610 | .builtin_call_expr => |call| { | 3640 | .builtin_call_expr => |call| { |
| 3611 | try w.splatByteAll(' ', level + half); | 3641 | try w.splatByteAll(' ', level + half); |
| 3612 | try w.writeAll("name: "); | 3642 | try w.writeAll("name: "); |
| 3613 | try config.setColor(w, NAME); | 3643 | try term.setColor(NAME); |
| 3614 | try w.print("{s}\n", .{tree.tokSlice(call.builtin_tok)}); | 3644 | try w.print("{s}\n", .{tree.tokSlice(call.builtin_tok)}); |
| 3615 | try config.setColor(w, .reset); | 3645 | try term.setColor(.reset); |
| 3616 | 3646 | ||
| 3617 | if (call.args.len > 0) { | 3647 | if (call.args.len > 0) { |
| 3618 | try w.splatByteAll(' ', level + half); | 3648 | try w.splatByteAll(' ', level + half); |
| 3619 | try w.writeAll("args:\n"); | 3649 | try w.writeAll("args:\n"); |
| 3620 | for (call.args) |arg| { | 3650 | for (call.args) |arg| { |
| 3621 | try tree.dumpNode(arg, level + delta, config, w); | 3651 | try tree.dumpNode(arg, level + delta, term); |
| 3622 | } | 3652 | } |
| 3623 | } | 3653 | } |
| 3624 | }, | 3654 | }, |
| ... | @@ -3655,13 +3685,13 @@ fn dumpNode( | ... | @@ -3655,13 +3685,13 @@ fn dumpNode( |
| 3655 | => |bin| { | 3685 | => |bin| { |
| 3656 | try w.splatByteAll(' ', level + 1); | 3686 | try w.splatByteAll(' ', level + 1); |
| 3657 | try w.writeAll("lhs:\n"); | 3687 | try w.writeAll("lhs:\n"); |
| 3658 | try tree.dumpNode(bin.lhs, level + delta, config, w); | 3688 | try tree.dumpNode(bin.lhs, level + delta, term); |
| 3659 | 3689 | ||
| 3660 | try w.splatByteAll(' ', level + 1); | 3690 | try w.splatByteAll(' ', level + 1); |
| 3661 | try w.writeAll("rhs:\n"); | 3691 | try w.writeAll("rhs:\n"); |
| 3662 | try tree.dumpNode(bin.rhs, level + delta, config, w); | 3692 | try tree.dumpNode(bin.rhs, level + delta, term); |
| 3663 | }, | 3693 | }, |
| 3664 | .cast => |cast| try tree.dumpNode(cast.operand, level + delta, config, w), | 3694 | .cast => |cast| try tree.dumpNode(cast.operand, level + delta, term), |
| 3665 | .addr_of_expr, | 3695 | .addr_of_expr, |
| 3666 | .deref_expr, | 3696 | .deref_expr, |
| 3667 | .plus_expr, | 3697 | .plus_expr, |
| ... | @@ -3680,21 +3710,21 @@ fn dumpNode( | ... | @@ -3680,21 +3710,21 @@ fn dumpNode( |
| 3680 | => |un| { | 3710 | => |un| { |
| 3681 | try w.splatByteAll(' ', level + 1); | 3711 | try w.splatByteAll(' ', level + 1); |
| 3682 | try w.writeAll("operand:\n"); | 3712 | try w.writeAll("operand:\n"); |
| 3683 | try tree.dumpNode(un.operand, level + delta, config, w); | 3713 | try tree.dumpNode(un.operand, level + delta, term); |
| 3684 | }, | 3714 | }, |
| 3685 | .decl_ref_expr, .enumeration_ref => |dr| { | 3715 | .decl_ref_expr, .enumeration_ref => |dr| { |
| 3686 | try w.splatByteAll(' ', level + 1); | 3716 | try w.splatByteAll(' ', level + 1); |
| 3687 | try w.writeAll("name: "); | 3717 | try w.writeAll("name: "); |
| 3688 | try config.setColor(w, NAME); | 3718 | try term.setColor(NAME); |
| 3689 | try w.print("{s}\n", .{tree.tokSlice(dr.name_tok)}); | 3719 | try w.print("{s}\n", .{tree.tokSlice(dr.name_tok)}); |
| 3690 | try config.setColor(w, .reset); | 3720 | try term.setColor(.reset); |
| 3691 | }, | 3721 | }, |
| 3692 | .builtin_ref => |dr| { | 3722 | .builtin_ref => |dr| { |
| 3693 | try w.splatByteAll(' ', level + 1); | 3723 | try w.splatByteAll(' ', level + 1); |
| 3694 | try w.writeAll("name: "); | 3724 | try w.writeAll("name: "); |
| 3695 | try config.setColor(w, NAME); | 3725 | try term.setColor(NAME); |
| 3696 | try w.print("{s}\n", .{tree.tokSlice(dr.name_tok)}); | 3726 | try w.print("{s}\n", .{tree.tokSlice(dr.name_tok)}); |
| 3697 | try config.setColor(w, .reset); | 3727 | try term.setColor(.reset); |
| 3698 | }, | 3728 | }, |
| 3699 | .bool_literal, | 3729 | .bool_literal, |
| 3700 | .nullptr_literal, | 3730 | .nullptr_literal, |
| ... | @@ -3706,7 +3736,7 @@ fn dumpNode( | ... | @@ -3706,7 +3736,7 @@ fn dumpNode( |
| 3706 | .member_access_expr, .member_access_ptr_expr => |access| { | 3736 | .member_access_expr, .member_access_ptr_expr => |access| { |
| 3707 | try w.splatByteAll(' ', level + 1); | 3737 | try w.splatByteAll(' ', level + 1); |
| 3708 | try w.writeAll("lhs:\n"); | 3738 | try w.writeAll("lhs:\n"); |
| 3709 | try tree.dumpNode(access.base, level + delta, config, w); | 3739 | try tree.dumpNode(access.base, level + delta, term); |
| 3710 | 3740 | ||
| 3711 | var base_qt = access.base.qt(tree); | 3741 | var base_qt = access.base.qt(tree); |
| 3712 | if (base_qt.get(tree.comp, .pointer)) |some| base_qt = some.child; | 3742 | if (base_qt.get(tree.comp, .pointer)) |some| base_qt = some.child; |
| ... | @@ -3714,61 +3744,61 @@ fn dumpNode( | ... | @@ -3714,61 +3744,61 @@ fn dumpNode( |
| 3714 | 3744 | ||
| 3715 | try w.splatByteAll(' ', level + 1); | 3745 | try w.splatByteAll(' ', level + 1); |
| 3716 | try w.writeAll("name: "); | 3746 | try w.writeAll("name: "); |
| 3717 | try config.setColor(w, NAME); | 3747 | try term.setColor(NAME); |
| 3718 | try w.print("{s}\n", .{fields[access.member_index].name.lookup(tree.comp)}); | 3748 | try w.print("{s}\n", .{fields[access.member_index].name.lookup(tree.comp)}); |
| 3719 | try config.setColor(w, .reset); | 3749 | try term.setColor(.reset); |
| 3720 | }, | 3750 | }, |
| 3721 | .array_access_expr => |access| { | 3751 | .array_access_expr => |access| { |
| 3722 | try w.splatByteAll(' ', level + 1); | 3752 | try w.splatByteAll(' ', level + 1); |
| 3723 | try w.writeAll("base:\n"); | 3753 | try w.writeAll("base:\n"); |
| 3724 | try tree.dumpNode(access.base, level + delta, config, w); | 3754 | try tree.dumpNode(access.base, level + delta, term); |
| 3725 | 3755 | ||
| 3726 | try w.splatByteAll(' ', level + 1); | 3756 | try w.splatByteAll(' ', level + 1); |
| 3727 | try w.writeAll("index:\n"); | 3757 | try w.writeAll("index:\n"); |
| 3728 | try tree.dumpNode(access.index, level + delta, config, w); | 3758 | try tree.dumpNode(access.index, level + delta, term); |
| 3729 | }, | 3759 | }, |
| 3730 | .sizeof_expr, .alignof_expr => |type_info| { | 3760 | .sizeof_expr, .alignof_expr => |type_info| { |
| 3731 | if (type_info.expr) |some| { | 3761 | if (type_info.expr) |some| { |
| 3732 | try w.splatByteAll(' ', level + 1); | 3762 | try w.splatByteAll(' ', level + 1); |
| 3733 | try w.writeAll("expr:\n"); | 3763 | try w.writeAll("expr:\n"); |
| 3734 | try tree.dumpNode(some, level + delta, config, w); | 3764 | try tree.dumpNode(some, level + delta, term); |
| 3735 | } else { | 3765 | } else { |
| 3736 | try w.splatByteAll(' ', level + half); | 3766 | try w.splatByteAll(' ', level + half); |
| 3737 | try w.writeAll("operand type: "); | 3767 | try w.writeAll("operand type: "); |
| 3738 | try config.setColor(w, TYPE); | 3768 | try term.setColor(TYPE); |
| 3739 | try type_info.operand_qt.dump(tree.comp, w); | 3769 | try type_info.operand_qt.dump(tree.comp, w); |
| 3740 | try w.writeByte('\n'); | 3770 | try w.writeByte('\n'); |
| 3741 | try config.setColor(w, .reset); | 3771 | try term.setColor(.reset); |
| 3742 | } | 3772 | } |
| 3743 | }, | 3773 | }, |
| 3744 | .generic_expr => |generic| { | 3774 | .generic_expr => |generic| { |
| 3745 | try w.splatByteAll(' ', level + 1); | 3775 | try w.splatByteAll(' ', level + 1); |
| 3746 | try w.writeAll("controlling:\n"); | 3776 | try w.writeAll("controlling:\n"); |
| 3747 | try tree.dumpNode(generic.controlling, level + delta, config, w); | 3777 | try tree.dumpNode(generic.controlling, level + delta, term); |
| 3748 | try w.splatByteAll(' ', level + 1); | 3778 | try w.splatByteAll(' ', level + 1); |
| 3749 | try w.writeAll("chosen:\n"); | 3779 | try w.writeAll("chosen:\n"); |
| 3750 | try tree.dumpNode(generic.chosen, level + delta, config, w); | 3780 | try tree.dumpNode(generic.chosen, level + delta, term); |
| 3751 | 3781 | ||
| 3752 | if (generic.rest.len > 0) { | 3782 | if (generic.rest.len > 0) { |
| 3753 | try w.splatByteAll(' ', level + 1); | 3783 | try w.splatByteAll(' ', level + 1); |
| 3754 | try w.writeAll("rest:\n"); | 3784 | try w.writeAll("rest:\n"); |
| 3755 | for (generic.rest) |expr| { | 3785 | for (generic.rest) |expr| { |
| 3756 | try tree.dumpNode(expr, level + delta, config, w); | 3786 | try tree.dumpNode(expr, level + delta, term); |
| 3757 | } | 3787 | } |
| 3758 | } | 3788 | } |
| 3759 | }, | 3789 | }, |
| 3760 | .generic_association_expr => |assoc| { | 3790 | .generic_association_expr => |assoc| { |
| 3761 | try tree.dumpNode(assoc.expr, level + delta, config, w); | 3791 | try tree.dumpNode(assoc.expr, level + delta, term); |
| 3762 | }, | 3792 | }, |
| 3763 | .generic_default_expr => |default| { | 3793 | .generic_default_expr => |default| { |
| 3764 | try tree.dumpNode(default.expr, level + delta, config, w); | 3794 | try tree.dumpNode(default.expr, level + delta, term); |
| 3765 | }, | 3795 | }, |
| 3766 | .array_filler_expr => |filler| { | 3796 | .array_filler_expr => |filler| { |
| 3767 | try w.splatByteAll(' ', level + 1); | 3797 | try w.splatByteAll(' ', level + 1); |
| 3768 | try w.writeAll("count: "); | 3798 | try w.writeAll("count: "); |
| 3769 | try config.setColor(w, LITERAL); | 3799 | try term.setColor(LITERAL); |
| 3770 | try w.print("{d}\n", .{filler.count}); | 3800 | try w.print("{d}\n", .{filler.count}); |
| 3771 | try config.setColor(w, .reset); | 3801 | try term.setColor(.reset); |
| 3772 | }, | 3802 | }, |
| 3773 | .struct_forward_decl, | 3803 | .struct_forward_decl, |
| 3774 | .union_forward_decl, | 3804 | .union_forward_decl, |
lib/compiler/aro/aro/TypeStore.zig+82-24| ... | @@ -219,9 +219,9 @@ pub const QualType = packed struct(u32) { | ... | @@ -219,9 +219,9 @@ pub const QualType = packed struct(u32) { |
| 219 | .float_dfloat64 => return .{ .float = .dfloat64 }, | 219 | .float_dfloat64 => return .{ .float = .dfloat64 }, |
| 220 | .float_dfloat128 => return .{ .float = .dfloat128 }, | 220 | .float_dfloat128 => return .{ .float = .dfloat128 }, |
| 221 | .float_dfloat64x => return .{ .float = .dfloat64x }, | 221 | .float_dfloat64x => return .{ .float = .dfloat64x }, |
| 222 | .void_pointer => return .{ .pointer = .{ .child = .void, .decayed = null } }, | 222 | .void_pointer => return .{ .pointer = .{ .child = .void } }, |
| 223 | .char_pointer => return .{ .pointer = .{ .child = .char, .decayed = null } }, | 223 | .char_pointer => return .{ .pointer = .{ .child = .char } }, |
| 224 | .int_pointer => return .{ .pointer = .{ .child = .int, .decayed = null } }, | 224 | .int_pointer => return .{ .pointer = .{ .child = .int } }, |
| 225 | 225 | ||
| 226 | else => {}, | 226 | else => {}, |
| 227 | } | 227 | } |
| ... | @@ -280,7 +280,7 @@ pub const QualType = packed struct(u32) { | ... | @@ -280,7 +280,7 @@ pub const QualType = packed struct(u32) { |
| 280 | }, | 280 | }, |
| 281 | .pointer => .{ .pointer = .{ | 281 | .pointer => .{ .pointer = .{ |
| 282 | .child = @bitCast(repr.data[0]), | 282 | .child = @bitCast(repr.data[0]), |
| 283 | .decayed = null, | 283 | .bounds = @enumFromInt(repr.data[1]), |
| 284 | } }, | 284 | } }, |
| 285 | .pointer_decayed => .{ .pointer = .{ | 285 | .pointer_decayed => .{ .pointer = .{ |
| 286 | .child = @bitCast(repr.data[0]), | 286 | .child = @bitCast(repr.data[0]), |
| ... | @@ -800,7 +800,6 @@ pub const QualType = packed struct(u32) { | ... | @@ -800,7 +800,6 @@ pub const QualType = packed struct(u32) { |
| 800 | 800 | ||
| 801 | return comp.type_store.put(comp.gpa, .{ .pointer = .{ | 801 | return comp.type_store.put(comp.gpa, .{ .pointer = .{ |
| 802 | .child = qt, | 802 | .child = qt, |
| 803 | .decayed = null, | ||
| 804 | } }); | 803 | } }); |
| 805 | }, | 804 | }, |
| 806 | else => return qt, | 805 | else => return qt, |
| ... | @@ -1013,6 +1012,15 @@ pub const QualType = packed struct(u32) { | ... | @@ -1013,6 +1012,15 @@ pub const QualType = packed struct(u32) { |
| 1013 | return qt.scalarKind(comp).isPointer(); | 1012 | return qt.scalarKind(comp).isPointer(); |
| 1014 | } | 1013 | } |
| 1015 | 1014 | ||
| 1015 | /// Function or function pointer | ||
| 1016 | pub fn isCallable(qt: QualType, comp: *const Compilation) bool { | ||
| 1017 | return switch (qt.base(comp).type) { | ||
| 1018 | .func => true, | ||
| 1019 | .pointer => |ptr| ptr.child.is(comp, .func), | ||
| 1020 | else => false, | ||
| 1021 | }; | ||
| 1022 | } | ||
| 1023 | |||
| 1016 | pub fn eqlQualified(a_qt: QualType, b_qt: QualType, comp: *const Compilation) bool { | 1024 | pub fn eqlQualified(a_qt: QualType, b_qt: QualType, comp: *const Compilation) bool { |
| 1017 | if (a_qt.@"const" != b_qt.@"const") return false; | 1025 | if (a_qt.@"const" != b_qt.@"const") return false; |
| 1018 | if (a_qt.@"volatile" != b_qt.@"volatile") return false; | 1026 | if (a_qt.@"volatile" != b_qt.@"volatile") return false; |
| ... | @@ -1632,7 +1640,25 @@ pub const Type = union(enum) { | ... | @@ -1632,7 +1640,25 @@ pub const Type = union(enum) { |
| 1632 | 1640 | ||
| 1633 | pub const Pointer = struct { | 1641 | pub const Pointer = struct { |
| 1634 | child: QualType, | 1642 | child: QualType, |
| 1635 | decayed: ?QualType, | 1643 | decayed: ?QualType = null, |
| 1644 | bounds: Bounds = .c, | ||
| 1645 | |||
| 1646 | pub const Bounds = enum { | ||
| 1647 | /// C pointer with no bounds attribute | ||
| 1648 | c, | ||
| 1649 | /// No pointer arithmetic or non-zero indexing | ||
| 1650 | single, | ||
| 1651 | /// Explicitly specified as a traditional C pointer | ||
| 1652 | unsafe_indexable, | ||
| 1653 | |||
| 1654 | pub fn fromTag(tag: Attribute.Tag) Bounds { | ||
| 1655 | return switch (tag) { | ||
| 1656 | .single => .single, | ||
| 1657 | .unsafe_indexable => .unsafe_indexable, | ||
| 1658 | else => unreachable, | ||
| 1659 | }; | ||
| 1660 | } | ||
| 1661 | }; | ||
| 1636 | }; | 1662 | }; |
| 1637 | 1663 | ||
| 1638 | pub const Array = struct { | 1664 | pub const Array = struct { |
| ... | @@ -1784,6 +1810,7 @@ attributes: std.ArrayList(Attribute) = .empty, | ... | @@ -1784,6 +1810,7 @@ attributes: std.ArrayList(Attribute) = .empty, |
| 1784 | anon_name_arena: std.heap.ArenaAllocator.State = .{}, | 1810 | anon_name_arena: std.heap.ArenaAllocator.State = .{}, |
| 1785 | 1811 | ||
| 1786 | wchar: QualType = .invalid, | 1812 | wchar: QualType = .invalid, |
| 1813 | wint: QualType = .invalid, | ||
| 1787 | uint_least16_t: QualType = .invalid, | 1814 | uint_least16_t: QualType = .invalid, |
| 1788 | uint_least32_t: QualType = .invalid, | 1815 | uint_least32_t: QualType = .invalid, |
| 1789 | ptrdiff: QualType = .invalid, | 1816 | ptrdiff: QualType = .invalid, |
| ... | @@ -1918,10 +1945,12 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void | ... | @@ -1918,10 +1945,12 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void |
| 1918 | .pointer => |pointer| { | 1945 | .pointer => |pointer| { |
| 1919 | repr.data[0] = @bitCast(pointer.child); | 1946 | repr.data[0] = @bitCast(pointer.child); |
| 1920 | if (pointer.decayed) |array| { | 1947 | if (pointer.decayed) |array| { |
| 1948 | std.debug.assert(pointer.bounds == .c); | ||
| 1921 | repr.tag = .pointer_decayed; | 1949 | repr.tag = .pointer_decayed; |
| 1922 | repr.data[1] = @bitCast(array); | 1950 | repr.data[1] = @bitCast(array); |
| 1923 | } else { | 1951 | } else { |
| 1924 | repr.tag = .pointer; | 1952 | repr.tag = .pointer; |
| 1953 | repr.data[1] = @intFromEnum(pointer.bounds); | ||
| 1925 | } | 1954 | } |
| 1926 | }, | 1955 | }, |
| 1927 | .array => |array| { | 1956 | .array => |array| { |
| ... | @@ -2070,17 +2099,44 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void | ... | @@ -2070,17 +2099,44 @@ pub fn set(ts: *TypeStore, gpa: std.mem.Allocator, ty: Type, index: usize) !void |
| 2070 | 2099 | ||
| 2071 | pub fn initNamedTypes(ts: *TypeStore, comp: *Compilation) !void { | 2100 | pub fn initNamedTypes(ts: *TypeStore, comp: *Compilation) !void { |
| 2072 | const os = comp.target.os.tag; | 2101 | const os = comp.target.os.tag; |
| 2073 | ts.wchar = switch (comp.target.cpu.arch) { | 2102 | const arch = comp.target.cpu.arch; |
| 2074 | .xcore => .uchar, | 2103 | ts.wchar = switch (os) { |
| 2075 | .ve, .msp430 => .uint, | 2104 | .openbsd, .netbsd => .int, |
| 2076 | .arm, .armeb, .thumb, .thumbeb => if (os != .windows and os != .netbsd and os != .openbsd) .uint else .int, | 2105 | .ps4, .ps5 => .ushort, |
| 2077 | .aarch64, .aarch64_be => if (!os.isDarwin() and os != .netbsd) .uint else .int, | 2106 | .uefi => .ushort, |
| 2078 | .x86_64, .x86 => if (os == .windows) .ushort else .int, | 2107 | .windows => .ushort, |
| 2079 | else => .int, | 2108 | .driverkit, .ios, .maccatalyst, .macos, .tvos, .visionos, .watchos => .int, |
| 2109 | else => switch (arch) { | ||
| 2110 | .aarch64, .aarch64_be => .uint, | ||
| 2111 | .arm, .armeb, .thumb, .thumbeb => .uint, | ||
| 2112 | .ve, .msp430 => .uint, | ||
| 2113 | .x86_64, .x86 => .int, | ||
| 2114 | .xcore => .uchar, | ||
| 2115 | else => .int, | ||
| 2116 | }, | ||
| 2117 | }; | ||
| 2118 | |||
| 2119 | ts.wint = switch (os) { | ||
| 2120 | .fuchsia => .uint, | ||
| 2121 | .linux => .uint, | ||
| 2122 | .openbsd => .int, | ||
| 2123 | .uefi => .ushort, | ||
| 2124 | .windows => .ushort, | ||
| 2125 | else => switch (arch) { | ||
| 2126 | .csky => .uint, | ||
| 2127 | .loongarch32, .loongarch64 => .uint, | ||
| 2128 | .riscv32, .riscv32be, .riscv64, .riscv64be => .uint, | ||
| 2129 | .ve => .uint, | ||
| 2130 | .xcore => .uint, | ||
| 2131 | .xtensa, .xtensaeb => .uint, | ||
| 2132 | else => .int, | ||
| 2133 | }, | ||
| 2080 | }; | 2134 | }; |
| 2081 | 2135 | ||
| 2082 | const ptr_width = comp.target.ptrBitWidth(); | 2136 | const ptr_width = comp.target.ptrBitWidth(); |
| 2083 | ts.ptrdiff = if (os == .windows and ptr_width == 64) | 2137 | ts.ptrdiff = if (arch == .wasm32) |
| 2138 | .long | ||
| 2139 | else if (os == .windows and ptr_width == 64) | ||
| 2084 | .long_long | 2140 | .long_long |
| 2085 | else switch (ptr_width) { | 2141 | else switch (ptr_width) { |
| 2086 | 16 => .int, | 2142 | 16 => .int, |
| ... | @@ -2089,7 +2145,9 @@ pub fn initNamedTypes(ts: *TypeStore, comp: *Compilation) !void { | ... | @@ -2089,7 +2145,9 @@ pub fn initNamedTypes(ts: *TypeStore, comp: *Compilation) !void { |
| 2089 | else => unreachable, | 2145 | else => unreachable, |
| 2090 | }; | 2146 | }; |
| 2091 | 2147 | ||
| 2092 | ts.size = if (os == .windows and ptr_width == 64) | 2148 | ts.size = if (arch == .wasm32) |
| 2149 | .ulong | ||
| 2150 | else if (os == .windows and ptr_width == 64) | ||
| 2093 | .ulong_long | 2151 | .ulong_long |
| 2094 | else switch (ptr_width) { | 2152 | else switch (ptr_width) { |
| 2095 | 16 => .uint, | 2153 | 16 => .uint, |
| ... | @@ -2206,9 +2264,9 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType { | ... | @@ -2206,9 +2264,9 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType { |
| 2206 | }; | 2264 | }; |
| 2207 | 2265 | ||
| 2208 | const struct_qt = switch (kind) { | 2266 | const struct_qt = switch (kind) { |
| 2209 | .aarch64_va_list => blk: { | 2267 | .aarch64_va_list => { |
| 2210 | var record: Type.Record = .{ | 2268 | var record: Type.Record = .{ |
| 2211 | .name = try comp.internString("__va_list_tag"), | 2269 | .name = try comp.internString("__va_list"), |
| 2212 | .decl_node = undefined, // TODO | 2270 | .decl_node = undefined, // TODO |
| 2213 | .layout = null, | 2271 | .layout = null, |
| 2214 | .fields = &.{}, | 2272 | .fields = &.{}, |
| ... | @@ -2226,11 +2284,11 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType { | ... | @@ -2226,11 +2284,11 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType { |
| 2226 | record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable; | 2284 | record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable; |
| 2227 | try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index)); | 2285 | try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index)); |
| 2228 | 2286 | ||
| 2229 | break :blk qt; | 2287 | return qt; |
| 2230 | }, | 2288 | }, |
| 2231 | .arm_va_list => blk: { | 2289 | .arm_va_list => { |
| 2232 | var record: Type.Record = .{ | 2290 | var record: Type.Record = .{ |
| 2233 | .name = try comp.internString("__va_list_tag"), | 2291 | .name = try comp.internString("__va_list"), |
| 2234 | .decl_node = undefined, // TODO | 2292 | .decl_node = undefined, // TODO |
| 2235 | .layout = null, | 2293 | .layout = null, |
| 2236 | .fields = &.{}, | 2294 | .fields = &.{}, |
| ... | @@ -2244,7 +2302,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType { | ... | @@ -2244,7 +2302,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType { |
| 2244 | record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable; | 2302 | record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable; |
| 2245 | try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index)); | 2303 | try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index)); |
| 2246 | 2304 | ||
| 2247 | break :blk qt; | 2305 | return qt; |
| 2248 | }, | 2306 | }, |
| 2249 | .hexagon_va_list => blk: { | 2307 | .hexagon_va_list => blk: { |
| 2250 | var record: Type.Record = .{ | 2308 | var record: Type.Record = .{ |
| ... | @@ -2330,7 +2388,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType { | ... | @@ -2330,7 +2388,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType { |
| 2330 | 2388 | ||
| 2331 | break :blk qt; | 2389 | break :blk qt; |
| 2332 | }, | 2390 | }, |
| 2333 | .xtensa_va_list => blk: { | 2391 | .xtensa_va_list => { |
| 2334 | var record: Type.Record = .{ | 2392 | var record: Type.Record = .{ |
| 2335 | .name = try comp.internString("__va_list_tag"), | 2393 | .name = try comp.internString("__va_list_tag"), |
| 2336 | .decl_node = undefined, // TODO | 2394 | .decl_node = undefined, // TODO |
| ... | @@ -2348,7 +2406,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType { | ... | @@ -2348,7 +2406,7 @@ fn generateVaListType(ts: *TypeStore, comp: *Compilation) !QualType { |
| 2348 | record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable; | 2406 | record.layout = record_layout.compute(&fields, qt, comp, null) catch unreachable; |
| 2349 | try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index)); | 2407 | try ts.set(comp.gpa, .{ .@"struct" = record }, @intFromEnum(qt._index)); |
| 2350 | 2408 | ||
| 2351 | break :blk qt; | 2409 | return qt; |
| 2352 | }, | 2410 | }, |
| 2353 | }; | 2411 | }; |
| 2354 | 2412 | ||
| ... | @@ -2830,7 +2888,7 @@ pub const Builder = struct { | ... | @@ -2830,7 +2888,7 @@ pub const Builder = struct { |
| 2830 | } | 2888 | } |
| 2831 | 2889 | ||
| 2832 | fn duplicateSpec(b: *Builder, source_tok: TokenIndex, spec: []const u8) !void { | 2890 | fn duplicateSpec(b: *Builder, source_tok: TokenIndex, spec: []const u8) !void { |
| 2833 | if (b.parser.comp.langopts.emulate != .clang) return b.cannotCombine(source_tok); | 2891 | if (b.parser.comp.langopts.emulate == .gcc) return b.cannotCombine(source_tok); |
| 2834 | try b.parser.err(b.parser.tok_i, .duplicate_decl_spec, .{spec}); | 2892 | try b.parser.err(b.parser.tok_i, .duplicate_decl_spec, .{spec}); |
| 2835 | } | 2893 | } |
| 2836 | 2894 |
lib/compiler/aro/aro/Value.zig+13-17| ... | @@ -1,5 +1,4 @@ | ... | @@ -1,5 +1,4 @@ |
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const Io = std.Io; | ||
| 3 | const assert = std.debug.assert; | 2 | const assert = std.debug.assert; |
| 4 | const BigIntConst = std.math.big.int.Const; | 3 | const BigIntConst = std.math.big.int.Const; |
| 5 | const BigIntMutable = std.math.big.int.Mutable; | 4 | const BigIntMutable = std.math.big.int.Mutable; |
| ... | @@ -9,8 +8,8 @@ const BigIntSpace = Interner.Tag.Int.BigIntSpace; | ... | @@ -9,8 +8,8 @@ const BigIntSpace = Interner.Tag.Int.BigIntSpace; |
| 9 | 8 | ||
| 10 | const annex_g = @import("annex_g.zig"); | 9 | const annex_g = @import("annex_g.zig"); |
| 11 | const Compilation = @import("Compilation.zig"); | 10 | const Compilation = @import("Compilation.zig"); |
| 12 | const Target = @import("Target.zig"); | ||
| 13 | const QualType = @import("TypeStore.zig").QualType; | 11 | const QualType = @import("TypeStore.zig").QualType; |
| 12 | const Target = @import("Target.zig"); | ||
| 14 | 13 | ||
| 15 | const Value = @This(); | 14 | const Value = @This(); |
| 16 | 15 | ||
| ... | @@ -77,11 +76,7 @@ test "minUnsignedBits" { | ... | @@ -77,11 +76,7 @@ test "minUnsignedBits" { |
| 77 | } | 76 | } |
| 78 | }; | 77 | }; |
| 79 | 78 | ||
| 80 | var arena_state: std.heap.ArenaAllocator = .init(std.testing.allocator); | 79 | var comp = try Compilation.init(.testing); |
| 81 | defer arena_state.deinit(); | ||
| 82 | const arena = arena_state.allocator(); | ||
| 83 | |||
| 84 | var comp = Compilation.init(std.testing.allocator, arena, std.testing.io, undefined, Io.Dir.cwd()); | ||
| 85 | defer comp.deinit(); | 80 | defer comp.deinit(); |
| 86 | const target_query = try std.Target.Query.parse(.{ .arch_os_abi = "x86_64-linux-gnu" }); | 81 | const target_query = try std.Target.Query.parse(.{ .arch_os_abi = "x86_64-linux-gnu" }); |
| 87 | comp.target = .fromZigTarget(try std.zig.system.resolveTargetQuery(std.testing.io, target_query)); | 82 | comp.target = .fromZigTarget(try std.zig.system.resolveTargetQuery(std.testing.io, target_query)); |
| ... | @@ -116,11 +111,7 @@ test "minSignedBits" { | ... | @@ -116,11 +111,7 @@ test "minSignedBits" { |
| 116 | } | 111 | } |
| 117 | }; | 112 | }; |
| 118 | 113 | ||
| 119 | var arena_state: std.heap.ArenaAllocator = .init(std.testing.allocator); | 114 | var comp = try Compilation.init(.testing); |
| 120 | defer arena_state.deinit(); | ||
| 121 | const arena = arena_state.allocator(); | ||
| 122 | |||
| 123 | var comp = Compilation.init(std.testing.allocator, arena, std.testing.io, undefined, Io.Dir.cwd()); | ||
| 124 | defer comp.deinit(); | 115 | defer comp.deinit(); |
| 125 | const target_query = try std.Target.Query.parse(.{ .arch_os_abi = "x86_64-linux-gnu" }); | 116 | const target_query = try std.Target.Query.parse(.{ .arch_os_abi = "x86_64-linux-gnu" }); |
| 126 | comp.target = .fromZigTarget(try std.zig.system.resolveTargetQuery(std.testing.io, target_query)); | 117 | 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 { | ... | @@ -465,6 +456,11 @@ pub fn isNan(v: Value, comp: *const Compilation) bool { |
| 465 | }; | 456 | }; |
| 466 | } | 457 | } |
| 467 | 458 | ||
| 459 | pub fn isPointer(v: Value, comp: *const Compilation) bool { | ||
| 460 | if (v.opt_ref == .none) return false; | ||
| 461 | return comp.interner.get(v.ref()) == .pointer; | ||
| 462 | } | ||
| 463 | |||
| 468 | /// Converts value to zero or one; | 464 | /// Converts value to zero or one; |
| 469 | /// `.none` value remains unchanged. | 465 | /// `.none` value remains unchanged. |
| 470 | pub fn boolCast(v: *Value, comp: *const Compilation) void { | 466 | pub fn boolCast(v: *Value, comp: *const Compilation) void { |
| ... | @@ -1044,9 +1040,9 @@ fn twosCompIntLimit(limit: std.math.big.int.TwosCompIntLimit, qt: QualType, comp | ... | @@ -1044,9 +1040,9 @@ fn twosCompIntLimit(limit: std.math.big.int.TwosCompIntLimit, qt: QualType, comp |
| 1044 | const mag_bits: usize = @intCast(qt.bitSizeof(comp)); | 1040 | const mag_bits: usize = @intCast(qt.bitSizeof(comp)); |
| 1045 | switch (mag_bits) { | 1041 | switch (mag_bits) { |
| 1046 | inline 8, 16, 32, 64 => |bits| { | 1042 | inline 8, 16, 32, 64 => |bits| { |
| 1047 | if (limit == .min) return Value.int(@as(i64, std.math.minInt(std.meta.Int(.signed, bits))), comp); | 1043 | if (limit == .min) return Value.int(@as(i64, std.math.minInt(@Int(.signed, bits))), comp); |
| 1048 | return switch (signedness) { | 1044 | return switch (signedness) { |
| 1049 | inline else => |sign| Value.int(std.math.maxInt(std.meta.Int(sign, bits)), comp), | 1045 | inline else => |sign| Value.int(std.math.maxInt(@Int(sign, bits)), comp), |
| 1050 | }; | 1046 | }; |
| 1051 | }, | 1047 | }, |
| 1052 | else => {}, | 1048 | else => {}, |
| ... | @@ -1081,7 +1077,7 @@ const NestedPrint = union(enum) { | ... | @@ -1081,7 +1077,7 @@ const NestedPrint = union(enum) { |
| 1081 | }, | 1077 | }, |
| 1082 | }; | 1078 | }; |
| 1083 | 1079 | ||
| 1084 | pub fn printPointer(offset: Value, base: []const u8, comp: *const Compilation, w: *Io.Writer) Io.Writer.Error!void { | 1080 | pub fn printPointer(offset: Value, base: []const u8, comp: *const Compilation, w: *std.Io.Writer) std.Io.Writer.Error!void { |
| 1085 | try w.writeByte('&'); | 1081 | try w.writeByte('&'); |
| 1086 | try w.writeAll(base); | 1082 | try w.writeAll(base); |
| 1087 | if (!offset.isZero(comp)) { | 1083 | if (!offset.isZero(comp)) { |
| ... | @@ -1090,7 +1086,7 @@ pub fn printPointer(offset: Value, base: []const u8, comp: *const Compilation, w | ... | @@ -1090,7 +1086,7 @@ pub fn printPointer(offset: Value, base: []const u8, comp: *const Compilation, w |
| 1090 | } | 1086 | } |
| 1091 | } | 1087 | } |
| 1092 | 1088 | ||
| 1093 | pub fn print(v: Value, qt: QualType, comp: *const Compilation, w: *Io.Writer) Io.Writer.Error!?NestedPrint { | 1089 | pub fn print(v: Value, qt: QualType, comp: *const Compilation, w: *std.Io.Writer) std.Io.Writer.Error!?NestedPrint { |
| 1094 | if (qt.is(comp, .bool)) { | 1090 | if (qt.is(comp, .bool)) { |
| 1095 | try w.writeAll(if (v.isZero(comp)) "false" else "true"); | 1091 | try w.writeAll(if (v.isZero(comp)) "false" else "true"); |
| 1096 | return null; | 1092 | return null; |
| ... | @@ -1117,7 +1113,7 @@ pub fn print(v: Value, qt: QualType, comp: *const Compilation, w: *Io.Writer) Io | ... | @@ -1117,7 +1113,7 @@ pub fn print(v: Value, qt: QualType, comp: *const Compilation, w: *Io.Writer) Io |
| 1117 | return null; | 1113 | return null; |
| 1118 | } | 1114 | } |
| 1119 | 1115 | ||
| 1120 | pub fn printString(bytes: []const u8, qt: QualType, comp: *const Compilation, w: *Io.Writer) Io.Writer.Error!void { | 1116 | pub fn printString(bytes: []const u8, qt: QualType, comp: *const Compilation, w: *std.Io.Writer) std.Io.Writer.Error!void { |
| 1121 | const size: Compilation.CharUnitSize = @enumFromInt(qt.childType(comp).sizeof(comp)); | 1117 | const size: Compilation.CharUnitSize = @enumFromInt(qt.childType(comp).sizeof(comp)); |
| 1122 | const without_null = bytes[0 .. bytes.len - @intFromEnum(size)]; | 1118 | const without_null = bytes[0 .. bytes.len - @intFromEnum(size)]; |
| 1123 | try w.writeByte('"'); | 1119 | try w.writeByte('"'); |
lib/compiler/aro/aro/features.zig+1| ... | @@ -44,6 +44,7 @@ pub fn hasFeature(comp: *Compilation, ext: []const u8) bool { | ... | @@ -44,6 +44,7 @@ pub fn hasFeature(comp: *Compilation, ext: []const u8) bool { |
| 44 | .c_generic_selections = comp.langopts.standard.atLeast(.c11), | 44 | .c_generic_selections = comp.langopts.standard.atLeast(.c11), |
| 45 | .c_static_assert = comp.langopts.standard.atLeast(.c11), | 45 | .c_static_assert = comp.langopts.standard.atLeast(.c11), |
| 46 | .c_thread_local = comp.langopts.standard.atLeast(.c11) and comp.target.isTlsSupported(), | 46 | .c_thread_local = comp.langopts.standard.atLeast(.c11) and comp.target.isTlsSupported(), |
| 47 | .bounds_attributes = comp.langopts.bounds_safety == .clang, | ||
| 47 | }; | 48 | }; |
| 48 | inline for (@typeInfo(@TypeOf(list)).@"struct".fields) |f| { | 49 | inline for (@typeInfo(@TypeOf(list)).@"struct".fields) |f| { |
| 49 | if (std.mem.eql(u8, f.name, ext)) return @field(list, f.name); | 50 | if (std.mem.eql(u8, f.name, ext)) return @field(list, f.name); |
lib/compiler/aro/aro/pragmas/once.zig-1| ... | @@ -35,7 +35,6 @@ fn deinit(pragma: *Pragma, comp: *Compilation) void { | ... | @@ -35,7 +35,6 @@ fn deinit(pragma: *Pragma, comp: *Compilation) void { |
| 35 | var self: *Once = @fieldParentPtr("pragma", pragma); | 35 | var self: *Once = @fieldParentPtr("pragma", pragma); |
| 36 | self.pragma_once.deinit(comp.gpa); | 36 | self.pragma_once.deinit(comp.gpa); |
| 37 | comp.gpa.destroy(self); | 37 | comp.gpa.destroy(self); |
| 38 | pragma.* = undefined; | ||
| 39 | } | 38 | } |
| 40 | 39 | ||
| 41 | fn preprocessorHandler(pragma: *Pragma, pp: *Preprocessor, start_idx: TokenIndex) Pragma.Error!void { | 40 | fn preprocessorHandler(pragma: *Pragma, pp: *Preprocessor, start_idx: TokenIndex) Pragma.Error!void { |
lib/compiler/aro/aro/record_layout.zig+3-3| ... | @@ -332,7 +332,7 @@ const SysVContext = struct { | ... | @@ -332,7 +332,7 @@ const SysVContext = struct { |
| 332 | } | 332 | } |
| 333 | } | 333 | } |
| 334 | } else { | 334 | } else { |
| 335 | std.debug.assert(self.comp.langopts.emulate == .clang); | 335 | std.debug.assert(self.comp.langopts.emulate == .no or self.comp.langopts.emulate == .clang); |
| 336 | 336 | ||
| 337 | // On Clang, the alignment requested by annotations is not respected if it is | 337 | // On Clang, the alignment requested by annotations is not respected if it is |
| 338 | // larger than the value of #pragma pack. See test case 0083. | 338 | // larger than the value of #pragma pack. See test case 0083. |
| ... | @@ -569,7 +569,7 @@ const MsvcContext = struct { | ... | @@ -569,7 +569,7 @@ const MsvcContext = struct { |
| 569 | 569 | ||
| 570 | pub fn compute(fields: []Type.Record.Field, qt: QualType, comp: *const Compilation, pragma_pack: ?u8) Error!Type.Record.Layout { | 570 | pub fn compute(fields: []Type.Record.Field, qt: QualType, comp: *const Compilation, pragma_pack: ?u8) Error!Type.Record.Layout { |
| 571 | switch (comp.langopts.emulate) { | 571 | switch (comp.langopts.emulate) { |
| 572 | .gcc, .clang => { | 572 | .no, .gcc, .clang => { |
| 573 | var context = SysVContext.init(qt, comp, pragma_pack); | 573 | var context = SysVContext.init(qt, comp, pragma_pack); |
| 574 | 574 | ||
| 575 | try context.layoutFields(fields); | 575 | try context.layoutFields(fields); |
| ... | @@ -620,7 +620,7 @@ fn computeLayout(qt: QualType, comp: *const Compilation) RecordLayout { | ... | @@ -620,7 +620,7 @@ fn computeLayout(qt: QualType, comp: *const Compilation) RecordLayout { |
| 620 | else => { | 620 | else => { |
| 621 | const type_align = qt.alignof(comp) * BITS_PER_BYTE; | 621 | const type_align = qt.alignof(comp) * BITS_PER_BYTE; |
| 622 | return .{ | 622 | return .{ |
| 623 | .size_bits = qt.bitSizeofOrNull(comp) orelse 0, | 623 | .size_bits = BITS_PER_BYTE * (qt.sizeofOrNull(comp) orelse 0), |
| 624 | .pointer_alignment_bits = type_align, | 624 | .pointer_alignment_bits = type_align, |
| 625 | .field_alignment_bits = type_align, | 625 | .field_alignment_bits = type_align, |
| 626 | .required_alignment_bits = BITS_PER_BYTE, | 626 | .required_alignment_bits = BITS_PER_BYTE, |
lib/compiler/aro/assembly_backend/x86_64.zig+3-4| ... | @@ -5,15 +5,14 @@ const assert = std.debug.assert; | ... | @@ -5,15 +5,14 @@ const assert = std.debug.assert; |
| 5 | const aro = @import("aro"); | 5 | const aro = @import("aro"); |
| 6 | const Assembly = aro.Assembly; | 6 | const Assembly = aro.Assembly; |
| 7 | const Compilation = aro.Compilation; | 7 | const Compilation = aro.Compilation; |
| 8 | const Node = Tree.Node; | ||
| 9 | const Source = aro.Source; | 8 | const Source = aro.Source; |
| 10 | const Tree = aro.Tree; | 9 | const Tree = aro.Tree; |
| 11 | const QualType = aro.QualType; | 10 | const QualType = aro.QualType; |
| 12 | const Value = aro.Value; | 11 | const Value = aro.Value; |
| 13 | |||
| 14 | const AsmCodeGen = @This(); | ||
| 15 | const Error = aro.Compilation.Error; | 12 | const Error = aro.Compilation.Error; |
| 13 | const Node = Tree.Node; | ||
| 16 | 14 | ||
| 15 | const AsmCodeGen = @This(); | ||
| 17 | tree: *const Tree, | 16 | tree: *const Tree, |
| 18 | comp: *Compilation, | 17 | comp: *Compilation, |
| 19 | text: *std.Io.Writer, | 18 | text: *std.Io.Writer, |
| ... | @@ -58,7 +57,7 @@ fn serializeFloat(comptime T: type, value: T, w: *std.Io.Writer) !void { | ... | @@ -58,7 +57,7 @@ fn serializeFloat(comptime T: type, value: T, w: *std.Io.Writer) !void { |
| 58 | }, | 57 | }, |
| 59 | else => { | 58 | else => { |
| 60 | const size = @bitSizeOf(T); | 59 | const size = @bitSizeOf(T); |
| 61 | const storage_unit = std.enums.fromInt(StorageUnit, size).?; | 60 | const storage_unit = std.enums.fromInt(StorageUnit, size) orelse unreachable; |
| 62 | const IntTy = @Int(.unsigned, size); | 61 | const IntTy = @Int(.unsigned, size); |
| 63 | const int_val: IntTy = @bitCast(value); | 62 | const int_val: IntTy = @bitCast(value); |
| 64 | return serializeInt(int_val, storage_unit, w); | 63 | return serializeInt(int_val, storage_unit, w); |
lib/compiler/aro/backend/Assembly.zig+1-2| ... | @@ -1,5 +1,4 @@ | ... | @@ -1,5 +1,4 @@ |
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const Io = std.Io; | ||
| 3 | const Allocator = std.mem.Allocator; | 2 | const Allocator = std.mem.Allocator; |
| 4 | 3 | ||
| 5 | data: []const u8, | 4 | data: []const u8, |
| ... | @@ -12,7 +11,7 @@ pub fn deinit(self: *const Assembly, gpa: Allocator) void { | ... | @@ -12,7 +11,7 @@ pub fn deinit(self: *const Assembly, gpa: Allocator) void { |
| 12 | gpa.free(self.text); | 11 | gpa.free(self.text); |
| 13 | } | 12 | } |
| 14 | 13 | ||
| 15 | pub fn writeToFile(self: Assembly, io: Io, file: Io.File) !void { | 14 | pub fn writeToFile(self: Assembly, io: std.Io, file: std.Io.File) !void { |
| 16 | var file_writer = file.writer(io, &.{}); | 15 | var file_writer = file.writer(io, &.{}); |
| 17 | 16 | ||
| 18 | var buffers = [_][]const u8{ self.data, self.text }; | 17 | var buffers = [_][]const u8{ self.data, self.text }; |
lib/compiler/aro/backend/Interner.zig+2-2| ... | @@ -102,13 +102,13 @@ pub const Key = union(enum) { | ... | @@ -102,13 +102,13 @@ pub const Key = union(enum) { |
| 102 | .float => |repr| switch (repr) { | 102 | .float => |repr| switch (repr) { |
| 103 | inline else => |data| std.hash.autoHash( | 103 | inline else => |data| std.hash.autoHash( |
| 104 | &hasher, | 104 | &hasher, |
| 105 | @as(std.meta.Int(.unsigned, @bitSizeOf(@TypeOf(data))), @bitCast(data)), | 105 | @as(@Int(.unsigned, @bitSizeOf(@TypeOf(data))), @bitCast(data)), |
| 106 | ), | 106 | ), |
| 107 | }, | 107 | }, |
| 108 | .complex => |repr| switch (repr) { | 108 | .complex => |repr| switch (repr) { |
| 109 | inline else => |data| std.hash.autoHash( | 109 | inline else => |data| std.hash.autoHash( |
| 110 | &hasher, | 110 | &hasher, |
| 111 | @as(std.meta.Int(.unsigned, @bitSizeOf(@TypeOf(data))), @bitCast(data)), | 111 | @as(@Int(.unsigned, @bitSizeOf(@TypeOf(data))), @bitCast(data)), |
| 112 | ), | 112 | ), |
| 113 | }, | 113 | }, |
| 114 | .int => |repr| { | 114 | .int => |repr| { |
lib/compiler/aro/backend/Ir.zig+100-92| ... | @@ -374,24 +374,27 @@ pub fn deinit(ir: *Ir, gpa: std.mem.Allocator) void { | ... | @@ -374,24 +374,27 @@ pub fn deinit(ir: *Ir, gpa: std.mem.Allocator) void { |
| 374 | ir.* = undefined; | 374 | ir.* = undefined; |
| 375 | } | 375 | } |
| 376 | 376 | ||
| 377 | const TYPE = std.Io.tty.Color.bright_magenta; | 377 | const TYPE = std.Io.Terminal.Color.bright_magenta; |
| 378 | const INST = std.Io.tty.Color.bright_cyan; | 378 | const INST = std.Io.Terminal.Color.bright_cyan; |
| 379 | const REF = std.Io.tty.Color.bright_blue; | 379 | const REF = std.Io.Terminal.Color.bright_blue; |
| 380 | const LITERAL = std.Io.tty.Color.bright_green; | 380 | const LITERAL = std.Io.Terminal.Color.bright_green; |
| 381 | const ATTRIBUTE = std.Io.tty.Color.bright_yellow; | 381 | const ATTRIBUTE = std.Io.Terminal.Color.bright_yellow; |
| 382 | 382 | ||
| 383 | const RefMap = std.AutoArrayHashMapUnmanaged(Ref, void); | 383 | const RefMap = std.AutoArrayHashMapUnmanaged(Ref, void); |
| 384 | 384 | ||
| 385 | pub fn dump(ir: *const Ir, gpa: Allocator, config: std.Io.tty.Config, w: *std.Io.Writer) !void { | 385 | pub const DumpError = std.Io.Terminal.SetColorError || std.mem.Allocator.Error; |
| 386 | |||
| 387 | pub fn dump(ir: *const Ir, gpa: Allocator, term: std.Io.Terminal) DumpError!void { | ||
| 386 | for (ir.decls.keys(), ir.decls.values()) |name, *decl| { | 388 | for (ir.decls.keys(), ir.decls.values()) |name, *decl| { |
| 387 | try ir.dumpDecl(decl, gpa, name, config, w); | 389 | try ir.dumpDecl(decl, gpa, name, term); |
| 388 | } | 390 | } |
| 389 | try w.flush(); | 391 | try term.writer.flush(); |
| 390 | } | 392 | } |
| 391 | 393 | ||
| 392 | fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, config: std.Io.tty.Config, w: *std.Io.Writer) !void { | 394 | fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, term: std.Io.Terminal) !void { |
| 393 | const tags = decl.instructions.items(.tag); | 395 | const tags = decl.instructions.items(.tag); |
| 394 | const data = decl.instructions.items(.data); | 396 | const data = decl.instructions.items(.data); |
| 397 | const w = term.writer; | ||
| 395 | 398 | ||
| 396 | var ref_map: RefMap = .empty; | 399 | var ref_map: RefMap = .empty; |
| 397 | defer ref_map.deinit(gpa); | 400 | defer ref_map.deinit(gpa); |
| ... | @@ -402,10 +405,10 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, | ... | @@ -402,10 +405,10 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, |
| 402 | const ret_inst = decl.body.items[decl.body.items.len - 1]; | 405 | const ret_inst = decl.body.items[decl.body.items.len - 1]; |
| 403 | const ret_operand = data[@intFromEnum(ret_inst)].un; | 406 | const ret_operand = data[@intFromEnum(ret_inst)].un; |
| 404 | const ret_ty = decl.instructions.items(.ty)[@intFromEnum(ret_operand)]; | 407 | const ret_ty = decl.instructions.items(.ty)[@intFromEnum(ret_operand)]; |
| 405 | try ir.writeType(ret_ty, config, w); | 408 | try ir.writeType(ret_ty, term); |
| 406 | try config.setColor(w, REF); | 409 | try term.setColor(REF); |
| 407 | try w.print(" @{s}", .{name}); | 410 | try w.print(" @{s}", .{name}); |
| 408 | try config.setColor(w, .reset); | 411 | try term.setColor(.reset); |
| 409 | try w.writeAll("("); | 412 | try w.writeAll("("); |
| 410 | 413 | ||
| 411 | var arg_count: u32 = 0; | 414 | var arg_count: u32 = 0; |
| ... | @@ -414,8 +417,8 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, | ... | @@ -414,8 +417,8 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, |
| 414 | if (tags[@intFromEnum(ref)] != .arg) break; | 417 | if (tags[@intFromEnum(ref)] != .arg) break; |
| 415 | if (arg_count != 0) try w.writeAll(", "); | 418 | if (arg_count != 0) try w.writeAll(", "); |
| 416 | try ref_map.put(gpa, ref, {}); | 419 | try ref_map.put(gpa, ref, {}); |
| 417 | try ir.writeRef(decl, &ref_map, ref, config, w); | 420 | try ir.writeRef(decl, &ref_map, ref, term); |
| 418 | try config.setColor(w, .reset); | 421 | try term.setColor(.reset); |
| 419 | } | 422 | } |
| 420 | try w.writeAll(") {\n"); | 423 | try w.writeAll(") {\n"); |
| 421 | for (decl.body.items[arg_count..]) |ref| { | 424 | for (decl.body.items[arg_count..]) |ref| { |
| ... | @@ -432,7 +435,7 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, | ... | @@ -432,7 +435,7 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, |
| 432 | .arg, .constant, .symbol => unreachable, | 435 | .arg, .constant, .symbol => unreachable, |
| 433 | .label => { | 436 | .label => { |
| 434 | const label_index = label_map.getIndex(ref).?; | 437 | const label_index = label_map.getIndex(ref).?; |
| 435 | try config.setColor(w, REF); | 438 | try term.setColor(REF); |
| 436 | try w.print("{s}.{d}:\n", .{ data[i].label, label_index }); | 439 | try w.print("{s}.{d}:\n", .{ data[i].label, label_index }); |
| 437 | }, | 440 | }, |
| 438 | // .label_val => { | 441 | // .label_val => { |
| ... | @@ -441,35 +444,35 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, | ... | @@ -441,35 +444,35 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, |
| 441 | // }, | 444 | // }, |
| 442 | .jmp => { | 445 | .jmp => { |
| 443 | const un = data[i].un; | 446 | const un = data[i].un; |
| 444 | try config.setColor(w, INST); | 447 | try term.setColor(INST); |
| 445 | try w.writeAll(" jmp "); | 448 | try w.writeAll(" jmp "); |
| 446 | try writeLabel(decl, &label_map, un, config, w); | 449 | try writeLabel(decl, &label_map, un, term); |
| 447 | try w.writeByte('\n'); | 450 | try w.writeByte('\n'); |
| 448 | }, | 451 | }, |
| 449 | .branch => { | 452 | .branch => { |
| 450 | const br = data[i].branch; | 453 | const br = data[i].branch; |
| 451 | try config.setColor(w, INST); | 454 | try term.setColor(INST); |
| 452 | try w.writeAll(" branch "); | 455 | try w.writeAll(" branch "); |
| 453 | try ir.writeRef(decl, &ref_map, br.cond, config, w); | 456 | try ir.writeRef(decl, &ref_map, br.cond, term); |
| 454 | try config.setColor(w, .reset); | 457 | try term.setColor(.reset); |
| 455 | try w.writeAll(", "); | 458 | try w.writeAll(", "); |
| 456 | try writeLabel(decl, &label_map, br.then, config, w); | 459 | try writeLabel(decl, &label_map, br.then, term); |
| 457 | try config.setColor(w, .reset); | 460 | try term.setColor(.reset); |
| 458 | try w.writeAll(", "); | 461 | try w.writeAll(", "); |
| 459 | try writeLabel(decl, &label_map, br.@"else", config, w); | 462 | try writeLabel(decl, &label_map, br.@"else", term); |
| 460 | try w.writeByte('\n'); | 463 | try w.writeByte('\n'); |
| 461 | }, | 464 | }, |
| 462 | .select => { | 465 | .select => { |
| 463 | const br = data[i].branch; | 466 | const br = data[i].branch; |
| 464 | try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w); | 467 | try ir.writeNewRef(gpa, decl, &ref_map, ref, term); |
| 465 | try w.writeAll("select "); | 468 | try w.writeAll("select "); |
| 466 | try ir.writeRef(decl, &ref_map, br.cond, config, w); | 469 | try ir.writeRef(decl, &ref_map, br.cond, term); |
| 467 | try config.setColor(w, .reset); | 470 | try term.setColor(.reset); |
| 468 | try w.writeAll(", "); | 471 | try w.writeAll(", "); |
| 469 | try ir.writeRef(decl, &ref_map, br.then, config, w); | 472 | try ir.writeRef(decl, &ref_map, br.then, term); |
| 470 | try config.setColor(w, .reset); | 473 | try term.setColor(.reset); |
| 471 | try w.writeAll(", "); | 474 | try w.writeAll(", "); |
| 472 | try ir.writeRef(decl, &ref_map, br.@"else", config, w); | 475 | try ir.writeRef(decl, &ref_map, br.@"else", term); |
| 473 | try w.writeByte('\n'); | 476 | try w.writeByte('\n'); |
| 474 | }, | 477 | }, |
| 475 | // .jmp_val => { | 478 | // .jmp_val => { |
| ... | @@ -478,91 +481,91 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, | ... | @@ -478,91 +481,91 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, |
| 478 | // }, | 481 | // }, |
| 479 | .@"switch" => { | 482 | .@"switch" => { |
| 480 | const @"switch" = data[i].@"switch"; | 483 | const @"switch" = data[i].@"switch"; |
| 481 | try config.setColor(w, INST); | 484 | try term.setColor(INST); |
| 482 | try w.writeAll(" switch "); | 485 | try w.writeAll(" switch "); |
| 483 | try ir.writeRef(decl, &ref_map, @"switch".target, config, w); | 486 | try ir.writeRef(decl, &ref_map, @"switch".target, term); |
| 484 | try config.setColor(w, .reset); | 487 | try term.setColor(.reset); |
| 485 | try w.writeAll(" {"); | 488 | try w.writeAll(" {"); |
| 486 | for (@"switch".case_vals[0..@"switch".cases_len], @"switch".case_labels) |val_ref, label_ref| { | 489 | for (@"switch".case_vals[0..@"switch".cases_len], @"switch".case_labels) |val_ref, label_ref| { |
| 487 | try w.writeAll("\n "); | 490 | try w.writeAll("\n "); |
| 488 | try ir.writeValue(val_ref, config, w); | 491 | try ir.writeValue(val_ref, term); |
| 489 | try config.setColor(w, .reset); | 492 | try term.setColor(.reset); |
| 490 | try w.writeAll(" => "); | 493 | try w.writeAll(" => "); |
| 491 | try writeLabel(decl, &label_map, label_ref, config, w); | 494 | try writeLabel(decl, &label_map, label_ref, term); |
| 492 | try config.setColor(w, .reset); | 495 | try term.setColor(.reset); |
| 493 | } | 496 | } |
| 494 | try config.setColor(w, LITERAL); | 497 | try term.setColor(LITERAL); |
| 495 | try w.writeAll("\n default "); | 498 | try w.writeAll("\n default "); |
| 496 | try config.setColor(w, .reset); | 499 | try term.setColor(.reset); |
| 497 | try w.writeAll("=> "); | 500 | try w.writeAll("=> "); |
| 498 | try writeLabel(decl, &label_map, @"switch".default, config, w); | 501 | try writeLabel(decl, &label_map, @"switch".default, term); |
| 499 | try config.setColor(w, .reset); | 502 | try term.setColor(.reset); |
| 500 | try w.writeAll("\n }\n"); | 503 | try w.writeAll("\n }\n"); |
| 501 | }, | 504 | }, |
| 502 | .call => { | 505 | .call => { |
| 503 | const call = data[i].call; | 506 | const call = data[i].call; |
| 504 | try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w); | 507 | try ir.writeNewRef(gpa, decl, &ref_map, ref, term); |
| 505 | try w.writeAll("call "); | 508 | try w.writeAll("call "); |
| 506 | try ir.writeRef(decl, &ref_map, call.func, config, w); | 509 | try ir.writeRef(decl, &ref_map, call.func, term); |
| 507 | try config.setColor(w, .reset); | 510 | try term.setColor(.reset); |
| 508 | try w.writeAll("("); | 511 | try w.writeAll("("); |
| 509 | for (call.args(), 0..) |arg, arg_i| { | 512 | for (call.args(), 0..) |arg, arg_i| { |
| 510 | if (arg_i != 0) try w.writeAll(", "); | 513 | if (arg_i != 0) try w.writeAll(", "); |
| 511 | try ir.writeRef(decl, &ref_map, arg, config, w); | 514 | try ir.writeRef(decl, &ref_map, arg, term); |
| 512 | try config.setColor(w, .reset); | 515 | try term.setColor(.reset); |
| 513 | } | 516 | } |
| 514 | try w.writeAll(")\n"); | 517 | try w.writeAll(")\n"); |
| 515 | }, | 518 | }, |
| 516 | .alloc => { | 519 | .alloc => { |
| 517 | const alloc = data[i].alloc; | 520 | const alloc = data[i].alloc; |
| 518 | try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w); | 521 | try ir.writeNewRef(gpa, decl, &ref_map, ref, term); |
| 519 | try w.writeAll("alloc "); | 522 | try w.writeAll("alloc "); |
| 520 | try config.setColor(w, ATTRIBUTE); | 523 | try term.setColor(ATTRIBUTE); |
| 521 | try w.writeAll("size "); | 524 | try w.writeAll("size "); |
| 522 | try config.setColor(w, LITERAL); | 525 | try term.setColor(LITERAL); |
| 523 | try w.print("{d}", .{alloc.size}); | 526 | try w.print("{d}", .{alloc.size}); |
| 524 | try config.setColor(w, ATTRIBUTE); | 527 | try term.setColor(ATTRIBUTE); |
| 525 | try w.writeAll(" align "); | 528 | try w.writeAll(" align "); |
| 526 | try config.setColor(w, LITERAL); | 529 | try term.setColor(LITERAL); |
| 527 | try w.print("{d}", .{alloc.@"align"}); | 530 | try w.print("{d}", .{alloc.@"align"}); |
| 528 | try w.writeByte('\n'); | 531 | try w.writeByte('\n'); |
| 529 | }, | 532 | }, |
| 530 | .phi => { | 533 | .phi => { |
| 531 | try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w); | 534 | try ir.writeNewRef(gpa, decl, &ref_map, ref, term); |
| 532 | try w.writeAll("phi"); | 535 | try w.writeAll("phi"); |
| 533 | try config.setColor(w, .reset); | 536 | try term.setColor(.reset); |
| 534 | try w.writeAll(" {"); | 537 | try w.writeAll(" {"); |
| 535 | for (data[i].phi.inputs()) |input| { | 538 | for (data[i].phi.inputs()) |input| { |
| 536 | try w.writeAll("\n "); | 539 | try w.writeAll("\n "); |
| 537 | try writeLabel(decl, &label_map, input.label, config, w); | 540 | try writeLabel(decl, &label_map, input.label, term); |
| 538 | try config.setColor(w, .reset); | 541 | try term.setColor(.reset); |
| 539 | try w.writeAll(" => "); | 542 | try w.writeAll(" => "); |
| 540 | try ir.writeRef(decl, &ref_map, input.value, config, w); | 543 | try ir.writeRef(decl, &ref_map, input.value, term); |
| 541 | try config.setColor(w, .reset); | 544 | try term.setColor(.reset); |
| 542 | } | 545 | } |
| 543 | try config.setColor(w, .reset); | 546 | try term.setColor(.reset); |
| 544 | try w.writeAll("\n }\n"); | 547 | try w.writeAll("\n }\n"); |
| 545 | }, | 548 | }, |
| 546 | .store => { | 549 | .store => { |
| 547 | const bin = data[i].bin; | 550 | const bin = data[i].bin; |
| 548 | try config.setColor(w, INST); | 551 | try term.setColor(INST); |
| 549 | try w.writeAll(" store "); | 552 | try w.writeAll(" store "); |
| 550 | try ir.writeRef(decl, &ref_map, bin.lhs, config, w); | 553 | try ir.writeRef(decl, &ref_map, bin.lhs, term); |
| 551 | try config.setColor(w, .reset); | 554 | try term.setColor(.reset); |
| 552 | try w.writeAll(", "); | 555 | try w.writeAll(", "); |
| 553 | try ir.writeRef(decl, &ref_map, bin.rhs, config, w); | 556 | try ir.writeRef(decl, &ref_map, bin.rhs, term); |
| 554 | try w.writeByte('\n'); | 557 | try w.writeByte('\n'); |
| 555 | }, | 558 | }, |
| 556 | .ret => { | 559 | .ret => { |
| 557 | try config.setColor(w, INST); | 560 | try term.setColor(INST); |
| 558 | try w.writeAll(" ret "); | 561 | try w.writeAll(" ret "); |
| 559 | if (data[i].un != .none) try ir.writeRef(decl, &ref_map, data[i].un, config, w); | 562 | if (data[i].un != .none) try ir.writeRef(decl, &ref_map, data[i].un, term); |
| 560 | try w.writeByte('\n'); | 563 | try w.writeByte('\n'); |
| 561 | }, | 564 | }, |
| 562 | .load => { | 565 | .load => { |
| 563 | try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w); | 566 | try ir.writeNewRef(gpa, decl, &ref_map, ref, term); |
| 564 | try w.writeAll("load "); | 567 | try w.writeAll("load "); |
| 565 | try ir.writeRef(decl, &ref_map, data[i].un, config, w); | 568 | try ir.writeRef(decl, &ref_map, data[i].un, term); |
| 566 | try w.writeByte('\n'); | 569 | try w.writeByte('\n'); |
| 567 | }, | 570 | }, |
| 568 | .bit_or, | 571 | .bit_or, |
| ... | @@ -583,12 +586,12 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, | ... | @@ -583,12 +586,12 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, |
| 583 | .mod, | 586 | .mod, |
| 584 | => { | 587 | => { |
| 585 | const bin = data[i].bin; | 588 | const bin = data[i].bin; |
| 586 | try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w); | 589 | try ir.writeNewRef(gpa, decl, &ref_map, ref, term); |
| 587 | try w.print("{s} ", .{@tagName(tag)}); | 590 | try w.print("{s} ", .{@tagName(tag)}); |
| 588 | try ir.writeRef(decl, &ref_map, bin.lhs, config, w); | 591 | try ir.writeRef(decl, &ref_map, bin.lhs, term); |
| 589 | try config.setColor(w, .reset); | 592 | try term.setColor(.reset); |
| 590 | try w.writeAll(", "); | 593 | try w.writeAll(", "); |
| 591 | try ir.writeRef(decl, &ref_map, bin.rhs, config, w); | 594 | try ir.writeRef(decl, &ref_map, bin.rhs, term); |
| 592 | try w.writeByte('\n'); | 595 | try w.writeByte('\n'); |
| 593 | }, | 596 | }, |
| 594 | .bit_not, | 597 | .bit_not, |
| ... | @@ -598,33 +601,34 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, | ... | @@ -598,33 +601,34 @@ fn dumpDecl(ir: *const Ir, decl: *const Decl, gpa: Allocator, name: []const u8, |
| 598 | .sext, | 601 | .sext, |
| 599 | => { | 602 | => { |
| 600 | const un = data[i].un; | 603 | const un = data[i].un; |
| 601 | try ir.writeNewRef(gpa, decl, &ref_map, ref, config, w); | 604 | try ir.writeNewRef(gpa, decl, &ref_map, ref, term); |
| 602 | try w.print("{s} ", .{@tagName(tag)}); | 605 | try w.print("{s} ", .{@tagName(tag)}); |
| 603 | try ir.writeRef(decl, &ref_map, un, config, w); | 606 | try ir.writeRef(decl, &ref_map, un, term); |
| 604 | try w.writeByte('\n'); | 607 | try w.writeByte('\n'); |
| 605 | }, | 608 | }, |
| 606 | .label_addr, .jmp_val => {}, | 609 | .label_addr, .jmp_val => {}, |
| 607 | } | 610 | } |
| 608 | } | 611 | } |
| 609 | try config.setColor(w, .reset); | 612 | try term.setColor(.reset); |
| 610 | try w.writeAll("}\n\n"); | 613 | try w.writeAll("}\n\n"); |
| 611 | } | 614 | } |
| 612 | 615 | ||
| 613 | fn writeType(ir: Ir, ty_ref: Interner.Ref, config: std.Io.tty.Config, w: *std.Io.Writer) !void { | 616 | fn writeType(ir: Ir, ty_ref: Interner.Ref, term: std.Io.Terminal) !void { |
| 617 | const w = term.writer; | ||
| 614 | const ty = ir.interner.get(ty_ref); | 618 | const ty = ir.interner.get(ty_ref); |
| 615 | try config.setColor(w, TYPE); | 619 | try term.setColor(TYPE); |
| 616 | switch (ty) { | 620 | switch (ty) { |
| 617 | .ptr_ty, .noreturn_ty, .void_ty, .func_ty => try w.writeAll(@tagName(ty)), | 621 | .ptr_ty, .noreturn_ty, .void_ty, .func_ty => try w.writeAll(@tagName(ty)), |
| 618 | .int_ty => |bits| try w.print("i{d}", .{bits}), | 622 | .int_ty => |bits| try w.print("i{d}", .{bits}), |
| 619 | .float_ty => |bits| try w.print("f{d}", .{bits}), | 623 | .float_ty => |bits| try w.print("f{d}", .{bits}), |
| 620 | .array_ty => |info| { | 624 | .array_ty => |info| { |
| 621 | try w.print("[{d} * ", .{info.len}); | 625 | try w.print("[{d} * ", .{info.len}); |
| 622 | try ir.writeType(info.child, .no_color, w); | 626 | try ir.writeType(info.child, .{ .mode = .no_color, .writer = w }); |
| 623 | try w.writeByte(']'); | 627 | try w.writeByte(']'); |
| 624 | }, | 628 | }, |
| 625 | .vector_ty => |info| { | 629 | .vector_ty => |info| { |
| 626 | try w.print("<{d} * ", .{info.len}); | 630 | try w.print("<{d} * ", .{info.len}); |
| 627 | try ir.writeType(info.child, .no_color, w); | 631 | try ir.writeType(info.child, .{ .mode = .no_color, .writer = w }); |
| 628 | try w.writeByte('>'); | 632 | try w.writeByte('>'); |
| 629 | }, | 633 | }, |
| 630 | .record_ty => |elems| { | 634 | .record_ty => |elems| { |
| ... | @@ -632,7 +636,7 @@ fn writeType(ir: Ir, ty_ref: Interner.Ref, config: std.Io.tty.Config, w: *std.Io | ... | @@ -632,7 +636,7 @@ fn writeType(ir: Ir, ty_ref: Interner.Ref, config: std.Io.tty.Config, w: *std.Io |
| 632 | try w.writeAll("{ "); | 636 | try w.writeAll("{ "); |
| 633 | for (elems, 0..) |elem, i| { | 637 | for (elems, 0..) |elem, i| { |
| 634 | if (i != 0) try w.writeAll(", "); | 638 | if (i != 0) try w.writeAll(", "); |
| 635 | try ir.writeType(elem, config, w); | 639 | try ir.writeType(elem, .{ .mode = .no_color, .writer = w }); |
| 636 | } | 640 | } |
| 637 | try w.writeAll(" }"); | 641 | try w.writeAll(" }"); |
| 638 | }, | 642 | }, |
| ... | @@ -640,8 +644,9 @@ fn writeType(ir: Ir, ty_ref: Interner.Ref, config: std.Io.tty.Config, w: *std.Io | ... | @@ -640,8 +644,9 @@ fn writeType(ir: Ir, ty_ref: Interner.Ref, config: std.Io.tty.Config, w: *std.Io |
| 640 | } | 644 | } |
| 641 | } | 645 | } |
| 642 | 646 | ||
| 643 | fn writeValue(ir: Ir, val: Interner.Ref, config: std.Io.tty.Config, w: *std.Io.Writer) !void { | 647 | fn writeValue(ir: Ir, val: Interner.Ref, term: std.Io.Terminal) !void { |
| 644 | try config.setColor(w, LITERAL); | 648 | const w = term.writer; |
| 649 | try term.setColor(LITERAL); | ||
| 645 | const key = ir.interner.get(val); | 650 | const key = ir.interner.get(val); |
| 646 | switch (key) { | 651 | switch (key) { |
| 647 | .null => return w.writeAll("nullptr_t"), | 652 | .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 | ... | @@ -656,43 +661,46 @@ fn writeValue(ir: Ir, val: Interner.Ref, config: std.Io.tty.Config, w: *std.Io.W |
| 656 | } | 661 | } |
| 657 | } | 662 | } |
| 658 | 663 | ||
| 659 | fn writeRef(ir: Ir, decl: *const Decl, ref_map: *RefMap, ref: Ref, config: std.Io.tty.Config, w: *std.Io.Writer) !void { | 664 | fn writeRef(ir: Ir, decl: *const Decl, ref_map: *RefMap, ref: Ref, term: std.Io.Terminal) !void { |
| 665 | const w = term.writer; | ||
| 660 | assert(ref != .none); | 666 | assert(ref != .none); |
| 661 | const index = @intFromEnum(ref); | 667 | const index = @intFromEnum(ref); |
| 662 | const ty_ref = decl.instructions.items(.ty)[index]; | 668 | const ty_ref = decl.instructions.items(.ty)[index]; |
| 663 | if (decl.instructions.items(.tag)[index] == .constant) { | 669 | if (decl.instructions.items(.tag)[index] == .constant) { |
| 664 | try ir.writeType(ty_ref, config, w); | 670 | try ir.writeType(ty_ref, term); |
| 665 | const v_ref = decl.instructions.items(.data)[index].constant; | 671 | const v_ref = decl.instructions.items(.data)[index].constant; |
| 666 | try w.writeByte(' '); | 672 | try w.writeByte(' '); |
| 667 | try ir.writeValue(v_ref, config, w); | 673 | try ir.writeValue(v_ref, term); |
| 668 | return; | 674 | return; |
| 669 | } else if (decl.instructions.items(.tag)[index] == .symbol) { | 675 | } else if (decl.instructions.items(.tag)[index] == .symbol) { |
| 670 | const name = decl.instructions.items(.data)[index].label; | 676 | const name = decl.instructions.items(.data)[index].label; |
| 671 | try ir.writeType(ty_ref, config, w); | 677 | try ir.writeType(ty_ref, term); |
| 672 | try config.setColor(w, REF); | 678 | try term.setColor(REF); |
| 673 | try w.print(" @{s}", .{name}); | 679 | try w.print(" @{s}", .{name}); |
| 674 | return; | 680 | return; |
| 675 | } | 681 | } |
| 676 | try ir.writeType(ty_ref, config, w); | 682 | try ir.writeType(ty_ref, term); |
| 677 | try config.setColor(w, REF); | 683 | try term.setColor(REF); |
| 678 | const ref_index = ref_map.getIndex(ref).?; | 684 | const ref_index = ref_map.getIndex(ref).?; |
| 679 | try w.print(" %{d}", .{ref_index}); | 685 | try w.print(" %{d}", .{ref_index}); |
| 680 | } | 686 | } |
| 681 | 687 | ||
| 682 | fn writeNewRef(ir: Ir, gpa: Allocator, decl: *const Decl, ref_map: *RefMap, ref: Ref, config: std.Io.tty.Config, w: *std.Io.Writer) !void { | 688 | fn writeNewRef(ir: Ir, gpa: Allocator, decl: *const Decl, ref_map: *RefMap, ref: Ref, term: std.Io.Terminal) !void { |
| 689 | const w = term.writer; | ||
| 683 | try ref_map.put(gpa, ref, {}); | 690 | try ref_map.put(gpa, ref, {}); |
| 684 | try w.writeAll(" "); | 691 | try w.writeAll(" "); |
| 685 | try ir.writeRef(decl, ref_map, ref, config, w); | 692 | try ir.writeRef(decl, ref_map, ref, term); |
| 686 | try config.setColor(w, .reset); | 693 | try term.setColor(.reset); |
| 687 | try w.writeAll(" = "); | 694 | try w.writeAll(" = "); |
| 688 | try config.setColor(w, INST); | 695 | try term.setColor(INST); |
| 689 | } | 696 | } |
| 690 | 697 | ||
| 691 | fn writeLabel(decl: *const Decl, label_map: *RefMap, ref: Ref, config: std.Io.tty.Config, w: *std.Io.Writer) !void { | 698 | fn writeLabel(decl: *const Decl, label_map: *RefMap, ref: Ref, term: std.Io.Terminal) !void { |
| 699 | const w = term.writer; | ||
| 692 | assert(ref != .none); | 700 | assert(ref != .none); |
| 693 | const index = @intFromEnum(ref); | 701 | const index = @intFromEnum(ref); |
| 694 | const label = decl.instructions.items(.data)[index].label; | 702 | const label = decl.instructions.items(.data)[index].label; |
| 695 | try config.setColor(w, REF); | 703 | try term.setColor(REF); |
| 696 | const label_index = label_map.getIndex(ref).?; | 704 | const label_index = label_map.getIndex(ref).?; |
| 697 | try w.print("{s}.{d}", .{ label, label_index }); | 705 | try w.print("{s}.{d}", .{ label, label_index }); |
| 698 | } | 706 | } |
lib/compiler/aro/backend/Ir/x86/Renderer.zig+3-3| ... | @@ -21,17 +21,17 @@ const RegisterManager = zig.RegisterManager(Renderer, Register, Ir.Ref, abi.allo | ... | @@ -21,17 +21,17 @@ const RegisterManager = zig.RegisterManager(Renderer, Register, Ir.Ref, abi.allo |
| 21 | const RegisterBitSet = RegisterManager.RegisterBitSet; | 21 | const RegisterBitSet = RegisterManager.RegisterBitSet; |
| 22 | const RegisterClass = struct { | 22 | const RegisterClass = struct { |
| 23 | const gp: RegisterBitSet = blk: { | 23 | const gp: RegisterBitSet = blk: { |
| 24 | var set = RegisterBitSet.empty; | 24 | var set = RegisterBitSet.initEmpty(); |
| 25 | for (abi.allocatable_regs, 0..) |reg, index| if (reg.class() == .general_purpose) set.set(index); | 25 | for (abi.allocatable_regs, 0..) |reg, index| if (reg.class() == .general_purpose) set.set(index); |
| 26 | break :blk set; | 26 | break :blk set; |
| 27 | }; | 27 | }; |
| 28 | const x87: RegisterBitSet = blk: { | 28 | const x87: RegisterBitSet = blk: { |
| 29 | var set = RegisterBitSet.empty; | 29 | var set = RegisterBitSet.initEmpty(); |
| 30 | for (abi.allocatable_regs, 0..) |reg, index| if (reg.class() == .x87) set.set(index); | 30 | for (abi.allocatable_regs, 0..) |reg, index| if (reg.class() == .x87) set.set(index); |
| 31 | break :blk set; | 31 | break :blk set; |
| 32 | }; | 32 | }; |
| 33 | const sse: RegisterBitSet = blk: { | 33 | const sse: RegisterBitSet = blk: { |
| 34 | var set = RegisterBitSet.empty; | 34 | var set = RegisterBitSet.initEmpty(); |
| 35 | for (abi.allocatable_regs, 0..) |reg, index| if (reg.class() == .sse) set.set(index); | 35 | for (abi.allocatable_regs, 0..) |reg, index| if (reg.class() == .sse) set.set(index); |
| 36 | break :blk set; | 36 | break :blk set; |
| 37 | }; | 37 | }; |
lib/compiler/aro/include/ptrcheck.h created+49| ... | @@ -0,0 +1,49 @@ | ||
| 1 | #pragma once | ||
| 2 | |||
| 3 | #if defined(__has_feature) && __has_feature(bounds_attributes) | ||
| 4 | #define __has_ptrcheck 1 | ||
| 5 | #else | ||
| 6 | #define __has_ptrcheck 0 | ||
| 7 | #endif | ||
| 8 | |||
| 9 | #if __has_ptrcheck | ||
| 10 | |||
| 11 | #define __single __attribute__((__single__)) | ||
| 12 | #define __unsafe_indexable __attribute__((__unsafe_indexable__)) | ||
| 13 | |||
| 14 | #else | ||
| 15 | |||
| 16 | #define __single | ||
| 17 | #define __unsafe_indexable | ||
| 18 | #define __counted_by(N) | ||
| 19 | #define __counted_by_or_null(N) | ||
| 20 | #define __sized_by(N) | ||
| 21 | #define __sized_by_or_null(N) | ||
| 22 | #define __ended_by(E) | ||
| 23 | |||
| 24 | #define __terminated_by(T) | ||
| 25 | #define __null_terminated | ||
| 26 | |||
| 27 | /* __ptrcheck_abi_assume_indexable and __ptrcheck_abi_assume_bidi_indexable intentionally not defined */ | ||
| 28 | #define __ptrcheck_abi_assume_single() | ||
| 29 | #define __ptrcheck_abi_assume_unsafe_indexable() | ||
| 30 | |||
| 31 | #define __unsafe_forge_bidi_indexable(T, P, S) ((T)(P)) | ||
| 32 | #define __unsafe_forge_single(T, P) ((T)(P)) | ||
| 33 | #define __unsafe_forge_terminated_by(T, P, E) ((T)(P)) | ||
| 34 | #define __unsafe_forge_null_terminated(T, P) ((T)(P)) | ||
| 35 | |||
| 36 | #define __terminated_by_to_indexable(P) (P) | ||
| 37 | #define __unsafe_terminated_by_to_indexable(P) (P) | ||
| 38 | #define __null_terminated_to_indexable(P) (P) | ||
| 39 | #define __unsafe_null_terminated_to_indexable(P) (P) | ||
| 40 | #define __unsafe_terminated_by_from_indexable(T, P, ...) (P) | ||
| 41 | #define __unsafe_null_terminated_from_indexable(P, ...) (P) | ||
| 42 | |||
| 43 | #define __array_decay_dicards_count_in_parameters | ||
| 44 | |||
| 45 | #define __ptrcheck_unavailable | ||
| 46 | #define __ptrcheck_unavailable_r(REPLACEMENT) | ||
| 47 | |||
| 48 | |||
| 49 | #endif | ||
lib/compiler/aro/main.zig+26-10| ... | @@ -1,8 +1,9 @@ | ... | @@ -1,8 +1,9 @@ |
| 1 | const std = @import("std"); | 1 | const std = @import("std"); |
| 2 | const Io = std.Io; | ||
| 3 | const Allocator = mem.Allocator; | ||
| 4 | const mem = std.mem; | 2 | const mem = std.mem; |
| 5 | const process = std.process; | 3 | const process = std.process; |
| 4 | const Allocator = mem.Allocator; | ||
| 5 | const build_options = @import("build_options"); | ||
| 6 | |||
| 6 | const aro = @import("aro"); | 7 | const aro = @import("aro"); |
| 7 | const Compilation = aro.Compilation; | 8 | const Compilation = aro.Compilation; |
| 8 | const Diagnostics = aro.Diagnostics; | 9 | const Diagnostics = aro.Diagnostics; |
| ... | @@ -11,14 +12,15 @@ const Toolchain = aro.Toolchain; | ... | @@ -11,14 +12,15 @@ const Toolchain = aro.Toolchain; |
| 11 | const assembly_backend = @import("assembly_backend"); | 12 | const assembly_backend = @import("assembly_backend"); |
| 12 | 13 | ||
| 13 | var debug_allocator: std.heap.DebugAllocator(.{ | 14 | var debug_allocator: std.heap.DebugAllocator(.{ |
| 14 | .stack_trace_frames = 0, | 15 | .stack_trace_frames = if (build_options.debug_allocations and std.debug.sys_can_stack_trace) 10 else 0, |
| 16 | .resize_stack_traces = build_options.debug_allocations, | ||
| 15 | // A unique value so that when a default-constructed | 17 | // A unique value so that when a default-constructed |
| 16 | // DebugAllocator is incorrectly passed to testing allocator, or | 18 | // GeneralPurposeAllocator is incorrectly passed to testing allocator, or |
| 17 | // vice versa, panic occurs. | 19 | // vice versa, panic occurs. |
| 18 | .canary = @truncate(0xc647026dc6875134), | 20 | .canary = @truncate(0xc647026dc6875134), |
| 19 | }) = .{}; | 21 | }) = .{}; |
| 20 | 22 | ||
| 21 | pub fn main(init: std.process.Init.Minimal) u8 { | 23 | pub fn main(init: process.Init.Minimal) u8 { |
| 22 | const gpa = if (@import("builtin").link_libc) | 24 | const gpa = if (@import("builtin").link_libc) |
| 23 | std.heap.c_allocator | 25 | std.heap.c_allocator |
| 24 | else | 26 | else |
| ... | @@ -31,7 +33,10 @@ pub fn main(init: std.process.Init.Minimal) u8 { | ... | @@ -31,7 +33,10 @@ pub fn main(init: std.process.Init.Minimal) u8 { |
| 31 | defer arena_instance.deinit(); | 33 | defer arena_instance.deinit(); |
| 32 | const arena = arena_instance.allocator(); | 34 | const arena = arena_instance.allocator(); |
| 33 | 35 | ||
| 34 | var threaded: std.Io.Threaded = .init(gpa, .{}); | 36 | var threaded: std.Io.Threaded = .init(gpa, .{ |
| 37 | .argv0 = .init(init.args), | ||
| 38 | .environ = init.environ, | ||
| 39 | }); | ||
| 35 | defer threaded.deinit(); | 40 | defer threaded.deinit(); |
| 36 | const io = threaded.io(); | 41 | const io = threaded.io(); |
| 37 | 42 | ||
| ... | @@ -43,7 +48,11 @@ pub fn main(init: std.process.Init.Minimal) u8 { | ... | @@ -43,7 +48,11 @@ pub fn main(init: std.process.Init.Minimal) u8 { |
| 43 | return 1; | 48 | return 1; |
| 44 | }; | 49 | }; |
| 45 | 50 | ||
| 46 | const aro_name = process.executablePathAlloc(io, gpa) catch { | 51 | var environ_map = std.process.Environ.createMap(init.environ, gpa) catch |err| |
| 52 | std.process.fatal("failed to parse environment variables: {t}", .{err}); | ||
| 53 | defer environ_map.deinit(); | ||
| 54 | |||
| 55 | const aro_name = std.process.executableDirPathAlloc(io, gpa) catch { | ||
| 47 | std.debug.print("unable to find Aro executable path\n", .{}); | 56 | std.debug.print("unable to find Aro executable path\n", .{}); |
| 48 | if (fast_exit) process.exit(1); | 57 | if (fast_exit) process.exit(1); |
| 49 | return 1; | 58 | return 1; |
| ... | @@ -51,15 +60,21 @@ pub fn main(init: std.process.Init.Minimal) u8 { | ... | @@ -51,15 +60,21 @@ pub fn main(init: std.process.Init.Minimal) u8 { |
| 51 | defer gpa.free(aro_name); | 60 | defer gpa.free(aro_name); |
| 52 | 61 | ||
| 53 | var stderr_buf: [1024]u8 = undefined; | 62 | var stderr_buf: [1024]u8 = undefined; |
| 54 | var stderr = Io.File.stderr().writer(&stderr_buf); | 63 | var stderr = std.Io.File.stderr().writer(io, &stderr_buf); |
| 55 | var diagnostics: Diagnostics = .{ | 64 | var diagnostics: Diagnostics = .{ |
| 56 | .output = .{ .to_writer = .{ | 65 | .output = .{ .to_writer = .{ |
| 57 | .color = .detect(stderr.file), | 66 | .mode = std.Io.Terminal.Mode.detect(io, stderr.file, false, false) catch .no_color, |
| 58 | .writer = &stderr.interface, | 67 | .writer = &stderr.interface, |
| 59 | } }, | 68 | } }, |
| 60 | }; | 69 | }; |
| 61 | 70 | ||
| 62 | var comp = Compilation.initDefault(gpa, arena, io, &diagnostics, Io.Dir.cwd()) catch |er| switch (er) { | 71 | var comp = Compilation.init(.{ |
| 72 | .gpa = gpa, | ||
| 73 | .arena = arena, | ||
| 74 | .io = io, | ||
| 75 | .diagnostics = &diagnostics, | ||
| 76 | .environ_map = &environ_map, | ||
| 77 | }) catch |er| switch (er) { | ||
| 63 | error.OutOfMemory => { | 78 | error.OutOfMemory => { |
| 64 | std.debug.print("out of memory\n", .{}); | 79 | std.debug.print("out of memory\n", .{}); |
| 65 | if (fast_exit) process.exit(1); | 80 | if (fast_exit) process.exit(1); |
| ... | @@ -85,6 +100,7 @@ pub fn main(init: std.process.Init.Minimal) u8 { | ... | @@ -85,6 +100,7 @@ pub fn main(init: std.process.Init.Minimal) u8 { |
| 85 | if (fast_exit) process.exit(1); | 100 | if (fast_exit) process.exit(1); |
| 86 | return 1; | 101 | return 1; |
| 87 | }, | 102 | }, |
| 103 | error.Canceled => unreachable, | ||
| 88 | }; | 104 | }; |
| 89 | if (fast_exit) process.exit(@intFromBool(comp.diagnostics.errors != 0)); | 105 | if (fast_exit) process.exit(@intFromBool(comp.diagnostics.errors != 0)); |
| 90 | return @intFromBool(diagnostics.errors != 0); | 106 | return @intFromBool(diagnostics.errors != 0); |