diff --git a/build.rs b/build.rs index 96707455d..1f44bdf4b 100644 --- a/build.rs +++ b/build.rs @@ -202,6 +202,11 @@ fn main() { src_dir: "vendor/tree-sitter-hack-src", extra_files: vec!["scanner.cc"], }, + TreeSitterParser { + name: "tree-sitter-hare", + src_dir: "vendor/tree-sitter-hare-src", + extra_files: vec![], + }, TreeSitterParser { name: "tree-sitter-haskell", src_dir: "vendor/tree-sitter-haskell-src", diff --git a/sample_files/compare.expected b/sample_files/compare.expected index 6ee45ccd6..20320432f 100644 --- a/sample_files/compare.expected +++ b/sample_files/compare.expected @@ -46,6 +46,9 @@ bfb410815de1fb0fd47fa078fbd8e329 - sample_files/hack_before.php sample_files/hack_after.php 50babcb945cf3b3ba12d5481a1bf8ccf - +sample_files/hare_before.ha sample_files/hare_after.ha +8edc2f3ae2eaeba7bcf328ed00398767 - + sample_files/haskell_before.hs sample_files/haskell_after.hs 324d1c9b2a04133a75b1975272ffb6ad - diff --git a/sample_files/hare_after.ha b/sample_files/hare_after.ha new file mode 100644 index 000000000..825bb24d2 --- /dev/null +++ b/sample_files/hare_after.ha @@ -0,0 +1,14 @@ +use fmt; + +export fn main() void = { + const greetings = [ + "Hello, world!", + "¡Hola Mundo!", + "Γειά σου Κόσμε!", + "Привет, мир!", + "こんにちは世界!", + ]; + for (let i = 0z; i < len(greetings); i += 1) { + fmt::println(greetings[i])!; + }; +}; diff --git a/sample_files/hare_before.ha b/sample_files/hare_before.ha new file mode 100644 index 000000000..4e405892b --- /dev/null +++ b/sample_files/hare_before.ha @@ -0,0 +1,5 @@ +use fmt; + +export fn main() void = { + fmt::println("Hello, world!"); +}; diff --git a/src/parse/guess_language.rs b/src/parse/guess_language.rs index 19fee1d03..23c3eec2c 100644 --- a/src/parse/guess_language.rs +++ b/src/parse/guess_language.rs @@ -34,6 +34,7 @@ pub enum Language { Gleam, Go, Hack, + Hare, Haskell, Hcl, Html, @@ -85,6 +86,7 @@ pub fn language_name(language: Language) -> &'static str { Gleam => "Gleam", Go => "Go", Hack => "Hack", + Hare => "Hare", Haskell => "Haskell", Hcl => "HCL", Html => "HTML", @@ -149,6 +151,7 @@ pub const LANG_EXTENSIONS: &'static [(Language, &[&str])] = &[ (Gleam, &["gleam"]), (Go, &["go"]), (Hack, &["hack", "hck", "hhi"]), + (Hare, &["ha"]), (Haskell, &["hs"]), (Hcl, &["hcl", "nomad", "tf", "tfvars", "workflow"]), (Html, &["html", "htm", "xhtml"]), diff --git a/src/parse/tree_sitter_parser.rs b/src/parse/tree_sitter_parser.rs index 92a49db1d..a6f493c4c 100644 --- a/src/parse/tree_sitter_parser.rs +++ b/src/parse/tree_sitter_parser.rs @@ -55,6 +55,7 @@ extern "C" { fn tree_sitter_elvish() -> ts::Language; fn tree_sitter_gleam() -> ts::Language; fn tree_sitter_go() -> ts::Language; + fn tree_sitter_hare() -> ts::Language; fn tree_sitter_hack() -> ts::Language; fn tree_sitter_haskell() -> ts::Language; fn tree_sitter_hcl() -> ts::Language; @@ -327,6 +328,19 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig { .unwrap(), } } + Hare => { + let language = unsafe { tree_sitter_hare() }; + TreeSitterConfig { + language, + atom_nodes: vec!["string_constant", "rune_constant"].into_iter().collect(), + delimiter_tokens: vec![("[", "]"), ("(", ")"), ("{", "}")], + highlight_query: ts::Query::new( + language, + include_str!("../../vendor/highlights/hare.scm"), + ) + .unwrap(), + } + } Haskell => { let language = unsafe { tree_sitter_haskell() }; TreeSitterConfig { diff --git a/vendor/highlights/hare.scm b/vendor/highlights/hare.scm new file mode 120000 index 000000000..c4cd781c3 --- /dev/null +++ b/vendor/highlights/hare.scm @@ -0,0 +1 @@ +../tree-sitter-hare/queries/highlights.scm \ No newline at end of file diff --git a/vendor/tree-sitter-hare-src b/vendor/tree-sitter-hare-src new file mode 120000 index 000000000..33b676a73 --- /dev/null +++ b/vendor/tree-sitter-hare-src @@ -0,0 +1 @@ +tree-sitter-hare/src/ \ No newline at end of file diff --git a/vendor/tree-sitter-hare/COPYING b/vendor/tree-sitter-hare/COPYING new file mode 100644 index 000000000..73dc198f9 --- /dev/null +++ b/vendor/tree-sitter-hare/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/vendor/tree-sitter-hare/Cargo.toml b/vendor/tree-sitter-hare/Cargo.toml new file mode 100644 index 000000000..cf1a4a463 --- /dev/null +++ b/vendor/tree-sitter-hare/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "tree-sitter-hare" +description = "hare grammar for the tree-sitter parsing library" +version = "0.0.1" +keywords = ["incremental", "parsing", "hare"] +categories = ["parsing", "text-editors"] +repository = "https://github.com/tree-sitter/tree-sitter-javascript" +edition = "2018" +license = "MIT" + +build = "bindings/rust/build.rs" +include = [ + "bindings/rust/*", + "grammar.js", + "queries/*", + "src/*", +] + +[lib] +path = "bindings/rust/lib.rs" + +[dependencies] +tree-sitter = "0.17" + +[build-dependencies] +cc = "1.0" diff --git a/vendor/tree-sitter-hare/README.md b/vendor/tree-sitter-hare/README.md new file mode 100644 index 000000000..4cfe8dc69 --- /dev/null +++ b/vendor/tree-sitter-hare/README.md @@ -0,0 +1,14 @@ +# tree-sitter-hare +[Hare](https://harelang.org/) grammar for the popular incremental parser generator [tree-sitter](https://tree-sitter.github.io/tree-sitter/). + +**status**: the majority of sources in `examples` (Hare stdlib) is recognized fine - sources containing +`\\` in strings fail, due to them getting parsed as comments +as a consequence to tree-sitter precedence rules. + +For a list of features offered by tree-sitter refer to their site. Summarily, +one of the main features is context-aware highlight (e.g. local variables are highlighted +differently than function parameters). + +This grammar can be used in a number of editors and different situations (github +uses it, for example) - at this stage it must be inserted manually into your editor. +See, for example, [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter#advanced-setup). diff --git a/vendor/tree-sitter-hare/binding.gyp b/vendor/tree-sitter-hare/binding.gyp new file mode 100644 index 000000000..027b4ae73 --- /dev/null +++ b/vendor/tree-sitter-hare/binding.gyp @@ -0,0 +1,19 @@ +{ + "targets": [ + { + "target_name": "tree_sitter_hare_binding", + "include_dirs": [ + " +#include "nan.h" + +using namespace v8; + +extern "C" TSLanguage * tree_sitter_hare(); + +namespace { + +NAN_METHOD(New) {} + +void Init(Local exports, Local module) { + Local tpl = Nan::New(New); + tpl->SetClassName(Nan::New("Language").ToLocalChecked()); + tpl->InstanceTemplate()->SetInternalFieldCount(1); + + Local constructor = Nan::GetFunction(tpl).ToLocalChecked(); + Local instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked(); + Nan::SetInternalFieldPointer(instance, 0, tree_sitter_hare()); + + Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("hare").ToLocalChecked()); + Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance); +} + +NODE_MODULE(tree_sitter_hare_binding, Init) + +} // namespace diff --git a/vendor/tree-sitter-hare/bindings/node/index.js b/vendor/tree-sitter-hare/bindings/node/index.js new file mode 100644 index 000000000..c8ec9f108 --- /dev/null +++ b/vendor/tree-sitter-hare/bindings/node/index.js @@ -0,0 +1,19 @@ +try { + module.exports = require("../../build/Release/tree_sitter_hare_binding"); +} catch (error1) { + if (error1.code !== 'MODULE_NOT_FOUND') { + throw error1; + } + try { + module.exports = require("../../build/Debug/tree_sitter_hare_binding"); + } catch (error2) { + if (error2.code !== 'MODULE_NOT_FOUND') { + throw error2; + } + throw error1 + } +} + +try { + module.exports.nodeTypeInfo = require("../../src/node-types.json"); +} catch (_) {} diff --git a/vendor/tree-sitter-hare/bindings/rust/build.rs b/vendor/tree-sitter-hare/bindings/rust/build.rs new file mode 100644 index 000000000..c6061f099 --- /dev/null +++ b/vendor/tree-sitter-hare/bindings/rust/build.rs @@ -0,0 +1,40 @@ +fn main() { + let src_dir = std::path::Path::new("src"); + + let mut c_config = cc::Build::new(); + c_config.include(&src_dir); + c_config + .flag_if_supported("-Wno-unused-parameter") + .flag_if_supported("-Wno-unused-but-set-variable") + .flag_if_supported("-Wno-trigraphs"); + let parser_path = src_dir.join("parser.c"); + c_config.file(&parser_path); + + // If your language uses an external scanner written in C, + // then include this block of code: + + /* + let scanner_path = src_dir.join("scanner.c"); + c_config.file(&scanner_path); + println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); + */ + + c_config.compile("parser"); + println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap()); + + // If your language uses an external scanner written in C++, + // then include this block of code: + + /* + let mut cpp_config = cc::Build::new(); + cpp_config.cpp(true); + cpp_config.include(&src_dir); + cpp_config + .flag_if_supported("-Wno-unused-parameter") + .flag_if_supported("-Wno-unused-but-set-variable"); + let scanner_path = src_dir.join("scanner.cc"); + cpp_config.file(&scanner_path); + cpp_config.compile("scanner"); + println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap()); + */ +} diff --git a/vendor/tree-sitter-hare/bindings/rust/lib.rs b/vendor/tree-sitter-hare/bindings/rust/lib.rs new file mode 100644 index 000000000..fe4458852 --- /dev/null +++ b/vendor/tree-sitter-hare/bindings/rust/lib.rs @@ -0,0 +1,52 @@ +//! This crate provides hare language support for the [tree-sitter][] parsing library. +//! +//! Typically, you will use the [language][language func] function to add this language to a +//! tree-sitter [Parser][], and then use the parser to parse some code: +//! +//! ``` +//! let code = ""; +//! let mut parser = tree_sitter::Parser::new(); +//! parser.set_language(tree_sitter_hare::language()).expect("Error loading hare grammar"); +//! let tree = parser.parse(code, None).unwrap(); +//! ``` +//! +//! [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html +//! [language func]: fn.language.html +//! [Parser]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Parser.html +//! [tree-sitter]: https://tree-sitter.github.io/ + +use tree_sitter::Language; + +extern "C" { + fn tree_sitter_hare() -> Language; +} + +/// Get the tree-sitter [Language][] for this grammar. +/// +/// [Language]: https://docs.rs/tree-sitter/*/tree_sitter/struct.Language.html +pub fn language() -> Language { + unsafe { tree_sitter_hare() } +} + +/// The content of the [`node-types.json`][] file for this grammar. +/// +/// [`node-types.json`]: https://tree-sitter.github.io/tree-sitter/using-parsers#static-node-types +pub const NODE_TYPES: &'static str = include_str!("../../src/node-types.json"); + +// Uncomment these to include any queries that this grammar contains + +// pub const HIGHLIGHTS_QUERY: &'static str = include_str!("../../queries/highlights.scm"); +// pub const INJECTIONS_QUERY: &'static str = include_str!("../../queries/injections.scm"); +// pub const LOCALS_QUERY: &'static str = include_str!("../../queries/locals.scm"); +// pub const TAGS_QUERY: &'static str = include_str!("../../queries/tags.scm"); + +#[cfg(test)] +mod tests { + #[test] + fn test_can_load_grammar() { + let mut parser = tree_sitter::Parser::new(); + parser + .set_language(super::language()) + .expect("Error loading hare language"); + } +} diff --git a/vendor/tree-sitter-hare/example/+aarch64.ha b/vendor/tree-sitter-hare/example/+aarch64.ha new file mode 100644 index 000000000..039c86fc2 --- /dev/null +++ b/vendor/tree-sitter-hare/example/+aarch64.ha @@ -0,0 +1,24 @@ +// Returns the new PID to the parent, void to the child, or errno if something +// goes wrong. +export fn clone( + stack: nullable *void, + flags: int, + parent_tid: nullable *int, + child_tid: nullable *int, + tls: u64, +) (int | void | errno) = { + return match (wrap_return(syscall5(SYS_clone, + flags: u64, + stack: uintptr: u64, + parent_tid: uintptr: u64, + tls, + child_tid: uintptr: u64))) { + u: u64 => switch (u) { + 0 => void, + * => u: int, + }, + err: errno => err, + }; +}; + +export def O_DIRECTORY: int = 0o40000; diff --git a/vendor/tree-sitter-hare/example/+linux.ha b/vendor/tree-sitter-hare/example/+linux.ha new file mode 100644 index 000000000..8d16e2cec --- /dev/null +++ b/vendor/tree-sitter-hare/example/+linux.ha @@ -0,0 +1,13 @@ +let start: timespec = timespec { ... }; + +fn time_start() void = { + clock_gettime(CLOCK_MONOTONIC, &start) as void; +}; + +// Returns elapsed time as (seconds, milliseconds) +fn time_stop() (size, size) = { + let end: timespec = timespec { ... }; + clock_gettime(CLOCK_MONOTONIC, &end) as void; + return ((end.tv_sec - start.tv_sec): size, + (end.tv_nsec - start.tv_nsec): size / 10000z); +}; diff --git a/vendor/tree-sitter-hare/example/+test.ha b/vendor/tree-sitter-hare/example/+test.ha new file mode 100644 index 000000000..90197c213 --- /dev/null +++ b/vendor/tree-sitter-hare/example/+test.ha @@ -0,0 +1,262 @@ +use bufio; +use fmt; +use io; +use io::{mode}; +use strings; + +@test fn unget() void = { + let buf = bufio::fixed(strings::toutf8("z"), mode::READ); + let lexer = init(buf, ""); + unget(&lexer, 'x'); + unget(&lexer, 'y'); + assert(next(&lexer) as rune == 'y'); + assert(next(&lexer) as rune == 'x'); + assert(next(&lexer) as rune == 'z'); + assert(next(&lexer) is io::EOF); + unget(&lexer, io::EOF); + assert(next(&lexer) is io::EOF); +}; + +@test fn unlex() void = { + let lexer = init(io::empty, ""); + unlex(&lexer, (btoken::IF, location { + path = "", + line = 1234, + col = 1234, + })); + let t = lex(&lexer) as (token, location); + assert(t.0 is btoken); + assert(t.0 as btoken == btoken::IF); + assert(t.1.path == ""); + assert(t.1.line == 1234 && t.1.col == 1234); +}; + +fn litassert(expected: literal, actual: literal) void = match (expected) { + e: u8 => assert(actual as u8 == e), + e: u16 => assert(actual as u16 == e), + e: u32 => assert(actual as u32 == e), + e: u64 => assert(actual as u64 == e), + e: uint => assert(actual as uint == e), + e: uintptr => assert(actual as uintptr == e), + e: i8 => assert(actual as i8 == e), + e: i16 => assert(actual as i16 == e), + e: i32 => assert(actual as i32 == e), + e: i64 => assert(actual as i64 == e), + e: int => assert(actual as int == e), + e: iconst => assert(actual as iconst == e), + e: f32 => assert(actual as f32 == e), + e: f64 => assert(actual as f64 == e), + e: fconst => assert(actual as fconst == e), + e: rune => assert(actual as rune == e), + e: str => assert(actual as str == e), +}; + +fn lextest(in: str, expected: [](uint, uint, token)) void = { + let buf = bufio::fixed(strings::toutf8(in), mode::READ); + let lexer = init(buf, ""); + for (let i = 0z; i < len(expected); i += 1) { + let eline = expected[i].0, ecol = expected[i].1, + etok = expected[i].2; + let tl = match (lex(&lexer)) { + tl: (token, location) => tl, + io::EOF => { + fmt::errorfln("unexpected EOF at {}", i); + abort(); + }, + err: error => { + fmt::errorfln("{}: {}", i, strerror(err)); + abort(); + }, + }; + let tok = tl.0, loc = tl.1; + match (tok) { + b: btoken => if (!(etok is btoken) || etok as btoken != b) { + fmt::errorfln("bad token at {}: got {}, wanted {}", + i, tokstr(tok), tokstr(etok)); + abort(); + }, + n: name => if (!(etok is name) || etok as name != n) { + fmt::errorfln("bad token at {}: got {}, wanted {}", + i, tokstr(tok), tokstr(etok)); + abort(); + }, + l: literal => if (!(etok is literal)) { + fmt::errorfln("bad token at {}: got {}, wanted {}", + i, tokstr(tok), tokstr(etok)); + abort(); + } else { + litassert(l, etok as literal); + }, + * => abort("TODO"), + }; + assert(loc.path == ""); + if (loc.line != eline || loc.col != ecol) { + fmt::errorfln("bad line/col at {}: got {},{}; wanted {},{}", + i, loc.line, loc.col, eline, ecol); + abort(); + }; + }; + assert(lex(&lexer) is io::EOF); +}; + +@test fn lex1() void = { + const in = "~,{[(}]);"; + const expected: [_](uint, uint, token) = [ + (1, 1, btoken::BNOT), + (1, 2, btoken::COMMA), + (1, 3, btoken::LBRACE), + (1, 4, btoken::LBRACKET), + (1, 5, btoken::LPAREN), + (1, 6, btoken::RBRACE), + (1, 7, btoken::RBRACKET), + (1, 8, btoken::RPAREN), + (1, 9, btoken::SEMICOLON), + ]; + lextest(in, expected); +}; + +@test fn lex2() void = { + // Ends with = to test =, EOF + const in = "^ ^^ ^= * *= % %= + += - -= : :: & && &= | || |= = == / /= ="; + const expected: [_](uint, uint, token) = [ + (1, 1, btoken::BXOR), + (1, 3, btoken::LXOR), + (1, 6, btoken::BXOREQ), + (1, 9, btoken::TIMES), + (1, 11, btoken::TIMESEQ), + (1, 14, btoken::MODULO), + (1, 16, btoken::MODEQ), + (1, 19, btoken::PLUS), + (1, 21, btoken::PLUSEQ), + (1, 24, btoken::MINUS), + (1, 26, btoken::MINUSEQ), + (1, 29, btoken::COLON), + (1, 31, btoken::DOUBLE_COLON), + (1, 34, btoken::BAND), + (1, 36, btoken::LAND), + (1, 39, btoken::ANDEQ), + (1, 42, btoken::BOR), + (1, 44, btoken::LOR), + (1, 47, btoken::OREQ), + (1, 50, btoken::EQUAL), + (1, 52, btoken::LEQUAL), + (1, 55, btoken::DIV), + (1, 57, btoken::DIVEQ), + (1, 60, btoken::EQUAL), + ]; + lextest(in, expected); +}; + +@test fn lex3() void = { + const in = ". .. ... < << <= <<= > >> >= >>= >>"; + const expected: [_](uint, uint, token) = [ + (1, 1, btoken::DOT), + (1, 3, btoken::SLICE), + (1, 6, btoken::ELLIPSIS), + (1, 10, btoken::LESS), + (1, 12, btoken::LSHIFT), + (1, 15, btoken::LESSEQ), + (1, 18, btoken::LSHIFTEQ), + (1, 22, btoken::GREATER), + (1, 24, btoken::RSHIFT), + (1, 27, btoken::GREATEREQ), + (1, 30, btoken::RSHIFTEQ), + (1, 34, btoken::RSHIFT), + ]; + lextest(in, expected); +}; + +@test fn lexname() void = { + const in = "hello world return void foobar"; + const expected: [_](uint, uint, token) = [ + (1, 1, "hello": name), + (1, 7, "world": name), + (1, 13, btoken::RETURN), + (1, 20, btoken::VOID), + (1, 25, "foobar": name), + ]; + lextest(in, expected); +}; + +@test fn keywords() void = { + let keywords = bmap[..btoken::LAST_KEYWORD+1]; + for (let i = 0z; i < len(keywords); i += 1) { + let lexer = init(bufio::fixed( + strings::toutf8(keywords[i]), mode::READ), + ""); + let tl = match (lex(&lexer)) { + tl: (token, location) => tl, + * => abort(), + }; + let tok = tl.0; + assert(tok is btoken); + assert(tok as btoken == i: btoken); + }; +}; + +@test fn comments() void = { + const in = "hello world // foo\nbar"; + const expected: [_](uint, uint, token) = [ + (1, 1, "hello": name), + (1, 7, "world": name), + (2, 1, "bar": name), + ]; + lextest(in, expected); +}; + +@test fn runes() void = { + const in = "'a' 'b' '\\a' '\\b' '\\f' '\\n' '\\r' '\\t' '\\v' '\\0' " + "'\\\\' '\\\'' '\\x0A' '\\u1234' '\\U12345678'"; + const expected: [_](uint, uint, token) = [ + (1, 1, 'a'), + (1, 5, 'b'), + (1, 9, '\a'), + (1, 14, '\b'), + (1, 19, '\f'), + (1, 24, '\n'), + (1, 29, '\r'), + (1, 34, '\t'), + (1, 39, '\v'), + (1, 44, '\0'), + (1, 49, '\\'), + (1, 54, '\''), + (1, 59, '\x0A'), + (1, 66, '\u1234'), + (1, 75, '\U12345678'), + ]; + lextest(in, expected); +}; + +@test fn strings() void = { + const in = "\"a\" \"b\" \"\\a\" \"\\b\" \"\\f\" \"\\n\" \"\\r\" " + "\"\\t\" \"\\v\" \"\\0\" \"\\\\\" \"\\\'\""; + const expected: [_](uint, uint, token) = [ + (1, 1, "a": literal), + (1, 5, "b": literal), + (1, 9, "\a": literal), + (1, 14, "\b": literal), + (1, 19, "\f": literal), + (1, 24, "\n": literal), + (1, 29, "\r": literal), + (1, 34, "\t": literal), + (1, 39, "\v": literal), + (1, 44, "\0": literal), + (1, 49, "\\": literal), + (1, 54, "\'": literal), + ]; + // TODO: test \x and \u and \U + lextest(in, expected); + const in = "\"ab\\a\\b\\f\\n\\r\\t\\v\\0\\\\\\'\""; + const expected: [_](uint, uint, token) = [ + (1, 1, "ab\a\b\f\n\r\t\v\0\\\'": literal), + ]; + lextest(in, expected); + const in = "\"hello world\" \"こんにちは\" \"return\" \"foo\""; + const expected: [_](uint, uint, token) = [ + (1, 1, "hello world": literal), + (1, 15, "こんにちは": literal), + (1, 23, "return": literal), + (1, 32, "foo": literal), + ]; + lextest(in, expected); +}; diff --git a/vendor/tree-sitter-hare/example/+x86_64.ha b/vendor/tree-sitter-hare/example/+x86_64.ha new file mode 100644 index 000000000..386aee7ec --- /dev/null +++ b/vendor/tree-sitter-hare/example/+x86_64.ha @@ -0,0 +1,24 @@ +// Returns the new PID to the parent, void to the child, or errno if something +// goes wrong. +export fn clone( + stack: nullable *void, + flags: int, + parent_tid: nullable *int, + child_tid: nullable *int, + tls: u64, +) (int | void | errno) = { + return match (wrap_return(syscall5(SYS_clone, + flags: u64, + stack: uintptr: u64, + parent_tid: uintptr: u64, + child_tid: uintptr: u64, + tls))) { + u: u64 => switch (u) { + 0 => void, + * => u: int, + }, + err: errno => err, + }; +}; + +export def O_DIRECTORY: int = 0o200000; diff --git a/vendor/tree-sitter-hare/example/abort+test.ha b/vendor/tree-sitter-hare/example/abort+test.ha new file mode 100644 index 000000000..947ff6b9a --- /dev/null +++ b/vendor/tree-sitter-hare/example/abort+test.ha @@ -0,0 +1,16 @@ +export @noreturn @symbol("rt.abort") fn _abort(msg: str) void = { + reason = abort_reason { loc = "", msg = msg }; + longjmp(&jmp, 1); +}; + +// See harec:include/gen.h +const reasons: [_]str = [ + "slice or array access out of bounds", // 0 + "type assertion failed", // 1 + "out of memory", // 2 +]; + +export @noreturn fn abort_fixed(loc: str, i: int) void = { + reason = abort_reason { loc = loc, msg = reasons[i] }; + longjmp(&jmp, 1); +}; diff --git a/vendor/tree-sitter-hare/example/abort.ha b/vendor/tree-sitter-hare/example/abort.ha new file mode 100644 index 000000000..7201b75bd --- /dev/null +++ b/vendor/tree-sitter-hare/example/abort.ha @@ -0,0 +1,8 @@ +fn platform_abort(msg: str) void = { + const prefix = "Abort: "; + const linefeed = "\n"; + write(2, *(&prefix: **void): *const char, len(prefix)); + write(2, *(&msg: **void): *const char, len(msg)); + write(2, *(&linefeed: **void): *const char, 1); + kill(getpid(), SIGABRT); +}; diff --git a/vendor/tree-sitter-hare/example/addr.ha b/vendor/tree-sitter-hare/example/addr.ha new file mode 100644 index 000000000..e782334e6 --- /dev/null +++ b/vendor/tree-sitter-hare/example/addr.ha @@ -0,0 +1,5 @@ +// A UNIX socket address. +export type addr = str; + +// Invalid UNIX socket path. +export type invalid = void!; diff --git a/vendor/tree-sitter-hare/example/adler32.ha b/vendor/tree-sitter-hare/example/adler32.ha new file mode 100644 index 000000000..5779f8977 --- /dev/null +++ b/vendor/tree-sitter-hare/example/adler32.ha @@ -0,0 +1,85 @@ +// Implements the Adler-32 checksum algorithm. It is a non-cryptographic +// checksum. + +use endian; +use hash; +use io; +use strings; + +type state = struct { + hash: hash::hash, + a: u32, + b: u32, +}; + +// Creates a [hash::hash] which computes the Adler-32 checksum algorithm. +export fn adler32() *hash::hash = alloc(state { + hash = hash::hash { + stream = io::stream { + writer = &write, + closer = &close, + ... + }, + sum = &sum, + reset = &reset, + sz = 4, + }, + a = 1, + b = 0, +}): *hash::hash; + +fn close(s: *io::stream) void = free(s); + +fn write(s: *io::stream, buf: const []u8) (size | io::error) = { + let s = s: *state; + for (let i = 0z; i < len(buf); i += 1) { + s.a = (s.a + buf[i]) % 65521; + s.b = (s.b + s.a) % 65521; + }; + return len(buf); +}; + +fn reset(h: *hash::hash) void = { + let h = h: *state; + h.a = 1; + h.b = 0; +}; + +fn sum(h: *hash::hash) []u8 = { + let h = h: *state; + let buf: [4]u8 = [0...]; + // RFC 1950 specifies that Adler-32 checksums are stored in network + // order. + endian::beputu32(buf, (h.b << 16) | h.a); + return alloc(buf); +}; + +export fn sum32(h: *hash::hash) u32 = { + assert(h.reset == &reset); + let h = h: *state; + return h.b << 16 | h.a; +}; + +@test fn adler32() void = { + const vectors: [](str, u32) = [ + ("", 1), + ("hello world", 436929629), + ("Hare is a cool language", 1578567727), + ("'UNIX was not designed to stop its users from doing stupid things, as that would also stop them from doing clever things' - Doug Gwyn", 2140876731), + ("'Life is too short to run proprietary software' - Bdale Garbee", 3135706652), + ("'The central enemy of reliability is complexity.' - Geer et al", 3170309588), + ("'A language that doesn’t have everything is actually easier to program in than some that do.' - Dennis Ritchie", 1148528899), + + ]; + let hash = adler32(); + defer hash::close(hash); + for (let i = 0z; i < len(vectors); i += 1) { + let vec = vectors[i]; + hash::reset(hash); + hash::write(hash, strings::toutf8(vec.0)); + let s = hash::sum(hash); + defer free(s); + assert(endian::begetu32(s) == vec.1); + assert(sum32(hash) == vec.1); + }; +}; diff --git a/vendor/tree-sitter-hare/example/arch+aarch64.ha b/vendor/tree-sitter-hare/example/arch+aarch64.ha new file mode 100644 index 000000000..f555dc0d9 --- /dev/null +++ b/vendor/tree-sitter-hare/example/arch+aarch64.ha @@ -0,0 +1,23 @@ +// Minimum value which can be stored in an int type. +export def INT_MIN: int = I32_MIN; + +// Maximum value which can be stored in an int type. +export def INT_MAX: int = I32_MAX; + +// Minimum value which can be stored in a uint type +export def UINT_MIN: uint = U32_MIN; + +// Maximum value which can be stored in a uint type. +export def UINT_MAX: uint = U32_MAX; + +// Minimum value which can be stored in a size type +export def SIZE_MIN: size = U64_MIN; + +// Maximum value which can be stored in a size type. +export def SIZE_MAX: size = U64_MAX; + +// Minimum value which can be stored in a uintptr type +export def UINTPTR_MIN: uintptr = U64_MIN: uintptr; + +// Maximum value which can be stored in a uintptr type. +export def UINTPTR_MAX: uintptr = U64_MAX: uintptr; diff --git a/vendor/tree-sitter-hare/example/arch+x86_64.ha b/vendor/tree-sitter-hare/example/arch+x86_64.ha new file mode 100644 index 000000000..f555dc0d9 --- /dev/null +++ b/vendor/tree-sitter-hare/example/arch+x86_64.ha @@ -0,0 +1,23 @@ +// Minimum value which can be stored in an int type. +export def INT_MIN: int = I32_MIN; + +// Maximum value which can be stored in an int type. +export def INT_MAX: int = I32_MAX; + +// Minimum value which can be stored in a uint type +export def UINT_MIN: uint = U32_MIN; + +// Maximum value which can be stored in a uint type. +export def UINT_MAX: uint = U32_MAX; + +// Minimum value which can be stored in a size type +export def SIZE_MIN: size = U64_MIN; + +// Maximum value which can be stored in a size type. +export def SIZE_MAX: size = U64_MAX; + +// Minimum value which can be stored in a uintptr type +export def UINTPTR_MIN: uintptr = U64_MIN: uintptr; + +// Maximum value which can be stored in a uintptr type. +export def UINTPTR_MAX: uintptr = U64_MAX: uintptr; diff --git a/vendor/tree-sitter-hare/example/big.ha b/vendor/tree-sitter-hare/example/big.ha new file mode 100644 index 000000000..f1eec0b45 --- /dev/null +++ b/vendor/tree-sitter-hare/example/big.ha @@ -0,0 +1,73 @@ +// Reads a u16 from a buffer in big-endian order. +export fn begetu16(buf: []u8) u16 = { + return + (buf[0] << 8u16) | + (buf[1] << 0); +}; + +// Writes a u16 into a buffer in big-endian order. +export fn beputu16(buf: []u8, in: u16) void = { + buf[1] = (in >> 0): u8; + buf[0] = (in >> 8): u8; +}; + +// Reads a u32 from a buffer in big-endian order. +export fn begetu32(buf: []u8) u32 = { + return + (buf[0] << 24u32) | + (buf[1] << 16u32) | + (buf[2] << 8u32) | + (buf[3] << 0); +}; + +// Writes a u32 into a buffer in big-endian order. +export fn beputu32(buf: []u8, in: u32) void = { + buf[3] = (in >> 0): u8; + buf[2] = (in >> 8): u8; + buf[1] = (in >> 16): u8; + buf[0] = (in >> 24): u8; +}; + +// Reads a u64 from a buffer in big-endian order. +export fn begetu64(buf: []u8) u64 = { + return + (buf[0] << 56u64) | + (buf[1] << 48u64) | + (buf[2] << 40u64) | + (buf[3] << 32u64) | + (buf[4] << 24u64) | + (buf[5] << 16u64) | + (buf[6] << 8u64) | + (buf[7] << 0); +}; + +// Writes a u64 into a buffer in big-endian order. +export fn beputu64(buf: []u8, in: u64) void = { + buf[7] = (in >> 0): u8; + buf[6] = (in >> 8): u8; + buf[5] = (in >> 16): u8; + buf[4] = (in >> 24): u8; + buf[3] = (in >> 32): u8; + buf[2] = (in >> 40): u8; + buf[1] = (in >> 48): u8; + buf[0] = (in >> 56): u8; +}; + +@test fn big() void = { + let buf: [8]u8 = [0...]; + beputu16(buf, 0x1234); + assert(buf[0] == 0x12 && buf[1] == 0x34); + assert(begetu16(buf) == 0x1234); + + beputu32(buf, 0x12345678); + assert(buf[0] == 0x12 && buf[1] == 0x34 + && buf[2] == 0x56 && buf[3] == 0x78); + assert(begetu32(buf) == 0x12345678); + + beputu64(buf, 0x1234567887654321); + assert(buf[0] == 0x12 && buf[1] == 0x34 + && buf[2] == 0x56 && buf[3] == 0x78 + && buf[4] == 0x87 && buf[5] == 0x65 + && buf[6] == 0x43 && buf[7] == 0x21); + assert(begetu64(buf) == 0x1234567887654321); +}; diff --git a/vendor/tree-sitter-hare/example/bits.ha b/vendor/tree-sitter-hare/example/bits.ha new file mode 100644 index 000000000..eaa7c9a38 --- /dev/null +++ b/vendor/tree-sitter-hare/example/bits.ha @@ -0,0 +1,48 @@ +// crypto::math provides constant-time mathematical operations useful for +// cryptographic algorithms. + +// Rotates a 32-bit unsigned integer left by k bits. k may be negative to rotate +// right instead, or see [rotr32]. +export fn rotl32(x: u32, k: int) u32 = { + const n = 32u32; + const s = k: u32 & (n - 1); + return x << s | x >> (n - s); +}; + +// Rotates a 32-bit unsigned integer right by k bits. k may be negative to +// rotate left instead, or see [rotl32]. +export fn rotr32(x: u32, k: int) u32 = rotl32(x, -k); + +@test fn lrot32() void = { + let a = 0b11110000111100001111000011110000u32; + assert(rotl32(a, 2) == 0b11000011110000111100001111000011u32); + assert(rotl32(a, -2) == 0b00111100001111000011110000111100u32); + assert(rotl32(a, 32) == 0b11110000111100001111000011110000u32); + assert(rotl32(a, 64) == 0b11110000111100001111000011110000u32); +}; + +// Rotates a 64-bit unsigned integer left by k bits. k may be negative to rotate +// right instead, or see [rotr64]. +export fn rotl64(x: u64, k: int) u64 = { + const n = 64u64; + const s = k: u64 & (n - 1); + return x << s | x >> (n - s); +}; + +// Rotates a 64-bit unsigned integer right by k bits. k may be negative to rotate +// left instead, or see [rotl64]. +export fn rotr64(x: u64, k: int) u64 = rotl64(x, -k); + +@test fn lrot64() void = { + let a = 1u64; + assert(rotl64(a, 1) == 0b10); + assert(rotl64(a, -1) == 0b1000000000000000000000000000000000000000000000000000000000000000); + assert(rotl64(a, 39) == (1u64 << 39)); + + let a = 0b1111000011110000111100001111000011110000111100001111000011110000u64; + assert(rotl64(a, 64) == a); + assert(rotl64(a, 0) == a); + assert(rotl64(a, 2) == 0b1100001111000011110000111100001111000011110000111100001111000011u64); + assert(rotl64(a, -2) == 0b0011110000111100001111000011110000111100001111000011110000111100u64); + +}; diff --git a/vendor/tree-sitter-hare/example/buffered.ha b/vendor/tree-sitter-hare/example/buffered.ha new file mode 100644 index 000000000..2baceea29 --- /dev/null +++ b/vendor/tree-sitter-hare/example/buffered.ha @@ -0,0 +1,294 @@ +use bytes; +use encoding::utf8; +use errors; +use io; +use strings; + +export type bufstream = struct { + stream: io::stream, + source: *io::stream, + rbuffer: []u8, + wbuffer: []u8, + ravail: size, + wavail: size, + flush: []u8, + unread: []u8, +}; + +export fn static_buffered( + src: *io::stream, + rbuf: []u8, + wbuf: []u8, + s: *bufstream, +) *io::stream = { + static let flush_default = ['\n': u32: u8]; + *s = bufstream { + stream = io::stream { + name = src.name, + closer = &buffered_close_static, + unwrap = &buffered_unwrap, + }, + source = src, + rbuffer = rbuf, + wbuffer = wbuf, + flush = flush_default, + ... + }; + if (len(rbuf) != 0) { + s.stream.reader = &buffered_read; + }; + if (len(wbuf) != 0) { + s.stream.writer = &buffered_write; + }; + if (len(rbuf) != 0 && len(wbuf) != 0) { + assert(rbuf: *[*]u8 != wbuf: *[*]u8, + "Cannot use bufio::buffered with same buffer for reads and writes"); + }; + return &s.stream; +}; + +// Creates a stream which buffers reads and writes for the underlying stream. +// This is generally used to improve performance of small reads/writes for +// sources where I/O operations are costly, such as if they invoke a syscall or +// take place over the network. +// +// The caller should supply one or both of a read and write buffer as a slice of +// the desired buffer, or empty slices if read or write functionality is +// disabled. The same buffer may not be used for both reads and writes. +// +// The caller is responsible for closing the underlying stream and freeing the +// provided buffers after the buffered stream is closed. +export fn buffered( + src: *io::stream, + rbuf: []u8, + wbuf: []u8, +) *io::stream = { + let s = alloc(bufstream { ... }); + let st = static_buffered(src, rbuf, wbuf, s); + st.closer = &buffered_close; + return st; +}; + +// Flushes pending writes to the underlying stream. +export fn flush(s: *io::stream) (io::error | void) = { + assert(s.writer == &buffered_write, + "bufio::flushed used on non-buffered stream"); + let s = s: *bufstream; + io::write(s.source, s.wbuffer[..s.wavail])?; + s.wavail = 0; + return; +}; + +// Sets the list of bytes which will cause the stream to flush when written. By +// default, the stream will flush when a newline (\n) is written. +export fn setflush(s: *io::stream, b: []u8) void = { + assert(s.writer == &buffered_write, + "bufio: setflush used on non-buffered stream"); + let s = s: *bufstream; + s.flush = b; +}; + +// Returns true if this is a buffered stream. +export fn isbuffered(s: *io::stream) bool = { + return s.reader == &buffered_read || s.writer == &buffered_write; +}; + +// Returns true if this stream or any underlying streams are buffered. +export fn any_isbuffered(s: *io::stream) bool = { + for (!isbuffered(s)) { + s = match (io::source(s)) { + errors::unsupported => return false, + s: *io::stream => s, + }; + }; + return true; +}; + +// Unreads a slice of bytes. The next read calls on this buffer will consume the +// un-read data before consuming further data from the underlying source, or any +// buffered data. +export fn unread(s: *io::stream, buf: []u8) void = { + assert(isbuffered(s), "bufio: unread used on non-buffered stream"); + let s = s: *bufstream; + append(s.unread, ...buf); +}; + +// Unreads a rune; see [unread]. +export fn unreadrune(s: *io::stream, rn: rune) void = { + assert(isbuffered(s), "bufio: unread used on non-buffered stream"); + let s = s: *bufstream; + append(s.unread, ...utf8::encoderune(rn)); +}; + +fn buffered_close(s: *io::stream) void = { + assert(s.closer == &buffered_close); + if (s.writer != null) { + flush(s); + }; + free(s); +}; + +fn buffered_close_static(s: *io::stream) void = { + assert(s.closer == &buffered_close_static); + if (s.writer != null) { + flush(s); + }; + free(s); +}; + +fn buffered_unwrap(s: *io::stream) *io::stream = { + assert(s.unwrap == &buffered_unwrap); + let s = s: *bufstream; + return s.source; +}; + +fn buffered_read(s: *io::stream, buf: []u8) (size | io::EOF | io::error) = { + assert(s.reader == &buffered_read); + let s = s: *bufstream; + if (len(s.unread) != 0) { + let n = if (len(buf) < len(s.unread)) len(buf) else len(s.unread); + buf[..n] = s.unread[..n]; + delete(s.unread[..n]); + return n; + }; + + let n = if (len(buf) < len(s.rbuffer)) len(buf) else len(s.rbuffer); + if (n > s.ravail) { + let z = match (io::read(s.source, s.rbuffer[s.ravail..])) { + err: io::error => return err, + io::EOF => { + if (s.ravail == 0) { + return io::EOF; + }; + 0z; + }, + z: size => z, + }; + s.ravail += z; + n = if (n > s.ravail) s.ravail else n; + assert(n != 0); + }; + + buf[..n] = s.rbuffer[..n]; + s.rbuffer[..len(s.rbuffer) - n] = s.rbuffer[n..]; + s.ravail -= n; + return n; +}; + +fn buffered_write(s: *io::stream, buf: const []u8) (size | io::error) = { + assert(s.writer == &buffered_write); + let s = s: *bufstream; + let buf = buf; + + let doflush = false; + for (let i = 0z; i < len(buf); i += 1) { + for (let j = 0z; j < len(s.flush); j += 1) { + if (buf[i] == s.flush[j]) { + doflush = true; + break; + }; + }; + }; + + let z = 0z; + for (len(buf) > 0) { + let avail = len(s.wbuffer) - s.wavail; + if (avail == 0) { + flush(&s.stream)?; + avail = len(s.wbuffer); + }; + + const n = if (avail < len(buf)) avail else len(buf); + s.wbuffer[s.wavail..s.wavail + n] = buf[..n]; + buf = buf[n..]; + s.wavail += n; + z += n; + }; + + if (doflush) { + flush(&s.stream)?; + }; + + return z; +}; + +@test fn buffered_read() void = { + let sourcebuf: []u8 = [1, 3, 3, 7]; + let source = fixed(sourcebuf, io::mode::READ); + let fb = source: *fixed_stream; + defer io::close(source); + + let rbuf: [1024]u8 = [0...]; + let f = buffered(source, rbuf, []); + defer io::close(f); + + let buf: [1024]u8 = [0...]; + assert(io::read(f, buf[..2]) as size == 2); + assert(len(fb.buf) == 0, "fixed stream was not fully consumed"); + assert(bytes::equal(buf[..2], [1, 3])); + + assert(io::read(f, buf[2..]) as size == 2); + assert(bytes::equal(buf[..4], [1, 3, 3, 7])); + assert(io::read(f, buf) is io::EOF); + + let sourcebuf: [32]u8 = [1, 3, 3, 7, 0...]; + sourcebuf[32..36] = [7, 3, 3, 1]; + let source = fixed(sourcebuf, io::mode::READ); + let fb = source: *fixed_stream; + defer io::close(source); + + let rbuf: [16]u8 = [0...]; + let f = buffered(source, rbuf, []); + defer io::close(f); + + let buf: [32]u8 = [0...]; + assert(io::read(f, buf) as size == 16); + assert(len(fb.buf) == 16); + + assert(io::read(f, buf[16..]) as size == 16); + assert(bytes::equal(buf, sourcebuf)); + assert(io::read(f, buf) is io::EOF); + assert(len(fb.buf) == 0); +}; + +@test fn buffered_write() void = { + // Normal case + let sink = dynamic(io::mode::WRITE); + defer io::close(sink); + + let wbuf: [1024]u8 = [0...]; + let f = buffered(sink, [], wbuf); + defer io::close(f); + + assert(io::write(f, [1, 3, 3, 7]) as size == 4); + assert(len(buffer(sink)) == 0); + assert(io::write(f, [1, 3, 3, 7]) as size == 4); + assert(flush(f) is void); + assert(bytes::equal(buffer(sink), [1, 3, 3, 7, 1, 3, 3, 7])); + + // Test flushing via buffer exhaustion + let sink = dynamic(io::mode::WRITE); + defer io::close(sink); + + let wbuf: [4]u8 = [0...]; + let f = buffered(sink, [], wbuf); + + assert(io::write(f, [1, 3, 3, 7]) as size == 4); + assert(len(buffer(sink)) == 0); + assert(io::write(f, [1, 3, 3, 7]) as size == 4); + assert(bytes::equal(buffer(sink), [1, 3, 3, 7])); + io::close(f); // Should flush + assert(bytes::equal(buffer(sink), [1, 3, 3, 7, 1, 3, 3, 7])); + + // Test flushing via flush characters + let sink = dynamic(io::mode::WRITE); + defer io::close(sink); + + let wbuf: [1024]u8 = [0...]; + let f = buffered(sink, [], wbuf); + + assert(io::write(f, strings::toutf8("hello")) as size == 5); + assert(len(buffer(sink)) == 0); + assert(io::write(f, strings::toutf8(" world!\n")) as size == 8); + assert(bytes::equal(buffer(sink), strings::toutf8("hello world!\n"))); +}; diff --git a/vendor/tree-sitter-hare/example/chars.ha b/vendor/tree-sitter-hare/example/chars.ha new file mode 100644 index 000000000..3662c7850 --- /dev/null +++ b/vendor/tree-sitter-hare/example/chars.ha @@ -0,0 +1,30 @@ +use ascii; + +fn isnamestart(rn: rune) bool = { + if (rn == ':' || rn == '_' || ascii::isalpha(rn)) return true; + let rn = rn: u32; + return + (rn >= 0xC0 && rn <= 0xD6) || + (rn >= 0xD8 && rn <= 0xF6) || + (rn >= 0xF8 && rn <= 0x2FF) || + (rn >= 0x370 && rn <= 0x37D) || + (rn >= 0x37F && rn <= 0x1FFF) || + (rn >= 0x200C && rn <= 0x200D) || + (rn >= 0x2070 && rn <= 0x218F) || + (rn >= 0x2C00 && rn <= 0x2FEF) || + (rn >= 0x3001 && rn <= 0xD7FF) || + (rn >= 0xF900 && rn <= 0xFDCF) || + (rn >= 0xFDF0 && rn <= 0xFFFD) || + (rn >= 0x10000 && rn <= 0xEFFFF); +}; + +fn isname(rn: rune) bool = { + if (isnamestart(rn) || rn == '-' || rn == '.' || ascii::isdigit(rn)) { + return true; + }; + let rn = rn: u32; + return + (rn == 0xB7) || + (rn >= 0x300 && rn <= 0x36F) || + (rn >= 0x203F && rn <= 0x2040); +}; diff --git a/vendor/tree-sitter-hare/example/classes.ha b/vendor/tree-sitter-hare/example/classes.ha new file mode 100644 index 000000000..d1541af95 --- /dev/null +++ b/vendor/tree-sitter-hare/example/classes.ha @@ -0,0 +1,42 @@ +// A tagged union of all signed integer types. +export type signed = (i8 | i16 | i32 | i64 | int); + +// A tagged union of all unsigned integer types, excluding uintptr. +export type unsigned = (u8 | u16 | u32 | u64 | uint | size); + +// A tagged union of all integer types. +export type integer = (...signed | ...unsigned); + +// A tagged union of all floating point numeric types. +export type floating = (f32 | f64); + +// A tagged union of all numeric types. +export type numeric = (...integer | ...floating); + +// A type representing the internal structure of strings, useful for low-level +// string manipulation. +export type string = struct { + // UTF-8 encoded octets, plus a NUL terminator. + data: nullable *[*]u8, + + // The length capacity, in octets of UTF-8 data, not including the NUL + // terminator. + length: size, + + // The allocated capacity, in octets of UTF-8 data, not including the + // NUL terminator. + capacity: size, +}; + +// A type representing the internal structure of slices, useful for low-level +// slice manipulation. +export type slice = struct { + // The slice contents. + data: nullable *void, + + // The number of members of the slice. + length: size, + + // The allocated capacity (in members) of data. + capacity: size, +}; diff --git a/vendor/tree-sitter-hare/example/cmd.ha b/vendor/tree-sitter-hare/example/cmd.ha new file mode 100644 index 000000000..e8a45010c --- /dev/null +++ b/vendor/tree-sitter-hare/example/cmd.ha @@ -0,0 +1,120 @@ +use ascii; +use errors; +use os; +use strings; + +// Prepares a [command] based on its name and a list of arguments. The argument +// list should not start with the command name; it will be added for you. The +// argument list is borrowed from the strings you pass into this command. +// +// If 'name' does not contain a '/', the $PATH will be consulted to find the +// correct executable. If path resolution fails, nocmd is returned. +// +// let cmd = exec::cmd("echo", "hello world"); +// let proc = exec::start(&cmd); +// let status = exec::wait(&proc); +// assert(exec::status(status) == 0); +// +// By default, the new command will inherit the current process's environment. +export fn cmd(name: str, args: str...) (command | error) = { + let env = os::getenvs(); + let cmd = command { + platform: platform_cmd = + if (strings::contains(name, '/')) match (open(name)) { + err: errors::opaque => return nocmd, + p: platform_cmd => p, + } else match (lookup(name)) { + void => return nocmd, + p: platform_cmd => p, + }, + argv = alloc([], len(args) + 1z), + env = alloc([], len(env)), + ... + }; + append(cmd.argv, name, ...args); + append(cmd.env, ...env); + return cmd; +}; + +// Sets the 0th value of argv for this command. It is uncommon to need this. +export fn setname(cmd: *command, name: str) void = { + free(cmd.argv[0]); + cmd.argv[0] = name; +}; + +// Frees state associated with a command. You only need to call this if you do +// not execute the command with [exec] or [start]; in those cases the state is +// cleaned up for you. +export fn finish(cmd: *command) void = { + platform_finish(cmd); + free(cmd.argv); +}; + +// Executes a prepared command in the current address space, overwriting the +// running process with the new command. +export @noreturn fn exec(cmd: *command) void = { + defer finish(cmd); // Note: doesn't happen if exec succeeds + platform_exec(cmd); + abort("os::exec::exec failed"); +}; + +// Starts a prepared command in a new process. +export fn start(cmd: *command) (error | process) = { + defer finish(cmd); + return match (platform_start(cmd)) { + err: errors::opaque => err, + proc: process => proc, + }; +}; + +// Empties the environment variables for the command. By default, the command +// inherits the environment of the parent process. +export fn clearenv(cmd: *command) void = { + cmd.env = []; +}; + +// Adds or sets a variable in the command environment. This does not affect the +// current process environment. The 'key' must be a valid environment variable +// name per POSIX definition 3.235. This includes underscores and alphanumeric +// ASCII characters, and cannot begin with a number. +export fn setenv(cmd: *command, key: str, value: str) void = { + let iter = strings::iter(key); + for (let i = 0z; true; i += 1) match (strings::next(&iter)) { + void => break, + r: rune => if (i == 0) assert(r == '_' || ascii::isalpha(r), + "Invalid environment variable") + else assert(r == '_' || ascii::isalnum(r), + "Invalid environment variable"), + }; + + // XXX: This can be a binary search + let fullkey = strings::concat(key, "="); + defer free(fullkey); + for (let i = 0z; i < len(cmd.env); i += 1) { + if (strings::has_prefix(cmd.env[i], fullkey)) { + delete(cmd.env[i]); + break; + }; + }; + append(cmd.env, strings::concat(fullkey, value)); +}; + +fn lookup(name: str) (platform_cmd | void) = { + const path = match (os::getenv("PATH")) { + void => return, + s: str => s, + }; + let tok = strings::tokenize(path, ":"); + for (true) { + const item = match (strings::next_token(&tok)) { + void => break, + s: str => s, + }; + let path = strings::concat(item, "/", name); + defer free(path); + match (open(path)) { + err: errors::opaque => continue, + p: platform_cmd => return p, + }; + }; +}; diff --git a/vendor/tree-sitter-hare/example/common.ha b/vendor/tree-sitter-hare/example/common.ha new file mode 100644 index 000000000..1700f6c65 --- /dev/null +++ b/vendor/tree-sitter-hare/example/common.ha @@ -0,0 +1,32 @@ +// The requested resource is not available. +export type busy = void!; + +// An attempt was made to create a resource which already exists. +export type exists = void!; + +// An function was called with an invalid combination of arguments. +export type invalid = void!; + +// The user does not have permission to use this resource. +export type noaccess = void!; + +// An entry was requested which does not exist. +export type noentry = void; + +// The requested operation caused a numeric overflow condition. +export type overflow = void!; + +// The requested operation is not supported. +export type unsupported = void!; + +// A tagged union of all error types. +export type error = ( + busy | + exists | + invalid | + noaccess | + noentry | + overflow | + unsupported | + opaque +); diff --git a/vendor/tree-sitter-hare/example/concat.ha b/vendor/tree-sitter-hare/example/concat.ha new file mode 100644 index 000000000..14e6be57e --- /dev/null +++ b/vendor/tree-sitter-hare/example/concat.ha @@ -0,0 +1,34 @@ +// Concatenates two or more strings. The caller must free the return value. +export fn concat(strs: str...) str = { + let z = 0z; + for (let i = 0z; i < len(strs); i += 1) { + z += len(strs[i]); + }; + let new: []u8 = alloc([], z); + for (let i = 0z; i < len(strs); i += 1) { + append(new, ...toutf8(strs[i])); + }; + return fromutf8_unsafe(new[..z]); +}; + +@test fn concat() void = { + let s = concat("hello ", "world"); + assert(s == "hello world"); + free(s); + + s = concat("hello", " ", "world"); + assert(s == "hello world"); + free(s); + + s = concat("hello", "", "world"); + assert(s == "helloworld"); + free(s); + + s = concat("", ""); + assert(s == ""); + free(s); + + s = concat(); + assert(s == ""); + free(s); +}; diff --git a/vendor/tree-sitter-hare/example/contains.ha b/vendor/tree-sitter-hare/example/contains.ha new file mode 100644 index 000000000..47dc4df57 --- /dev/null +++ b/vendor/tree-sitter-hare/example/contains.ha @@ -0,0 +1,15 @@ +use bytes; +use encoding::utf8; + +// Returns true if a string contains a rune or a sub-string. +export fn contains(haystack: str, needle: (str | rune)) bool = match (needle) { + s: str => bytes::contains(toutf8(haystack), toutf8(s)), + r: rune => bytes::contains(toutf8(haystack), utf8::encoderune(r)), +}; + +@test fn contains() void = { + assert(contains("hello world", "hello")); + assert(contains("hello world", "world")); + assert(contains("hello world", "")); + assert(!contains("hello world", "foobar")); +}; diff --git a/vendor/tree-sitter-hare/example/context.ha b/vendor/tree-sitter-hare/example/context.ha new file mode 100644 index 000000000..9903631e0 --- /dev/null +++ b/vendor/tree-sitter-hare/example/context.ha @@ -0,0 +1,109 @@ +use dirs; +use fmt; +use fs; +use hare::ast; +use os; +use path; +use strings; +use strio; + +export type context = struct { + // Filesystem to use for the cache and source files. + fs: *fs::fs, + // List of paths to search, generally populated from HAREPATH plus some + // baked-in default. + paths: []str, + // Path to the Hare cache, generally populated from HARECACHE and + // defaulting to $XDG_CACHE_HOME/hare. + cache: str, + // Build tags to apply to this context. + tags: []tag, + // List of -D arguments passed to harec + defines: []str, +}; + +// Initializes a new context with the system default configuration. The tag list +// and list of defines (arguments passed with harec -D) is borrowed from the +// caller. The harepath parameter is not borrowed, but it is ignored if HAREPATH +// is set in the process environment. +export fn context_init(tags: []tag, defs: []str, harepath: str) context = { + let ctx = context { + fs = os::cwd, + tags = tags, + defines = defs, + paths: []str = match (os::getenv("HAREPATH")) { + void => { + let path: []str = alloc([ + strings::dup(harepath), + dirs::data("hare"), + ]); + path; + }, + s: str => { + let sl = strings::split(s, ":"); + let path: []str = alloc([], len(sl) + 1); + for (let i = 0z; i < len(sl); i += 1) { + append(path, strings::dup(sl[i])); + }; + append(path, strings::dup(".")); + free(sl); + path; + }, + }, + cache: str = match (os::getenv("HARECACHE")) { + void => dirs::cache("hare"), + s: str => strings::dup(s), + }, + ... + }; + return ctx; +}; + +// Frees resources associated with this context. +export fn context_finish(ctx: *context) void = { + for (let i = 0z; i < len(ctx.paths); i += 1) { + free(ctx.paths[i]); + }; + free(ctx.paths); + free(ctx.cache); +}; + +// Converts an identifier to a partial path (e.g. foo::bar becomes foo/bar). The +// return value must be freed by the caller. +export fn identpath(name: ast::ident) str = { + let p = path::join(name[0]); + for (let i = 1z; i < len(name); i += 1) { + let q = path::join(p, name[i]); + free(p); + p = q; + }; + return p; +}; + +@test fn identpath() void = { + let ident: ast::ident = ["foo", "bar", "baz"]; + let p = identpath(ident); + defer free(p); + assert(p == "foo/bar/baz"); +}; + +// Joins an ident string with underscores instead of double colons. The return +// value must be freed by the caller. +// +// This is used for module names in environment variables and some file names. +export fn identuscore(ident: ast::ident) str = { + let buf = strio::dynamic(); + for (let i = 0z; i < len(ident); i += 1) { + fmt::fprintf(buf, "{}{}", ident[i], + if (i + 1 < len(ident)) "_" + else "") as size; + }; + return strio::finish(buf); +}; + +@test fn identuscore() void = { + let ident: ast::ident = ["foo", "bar", "baz"]; + let p = identuscore(ident); + defer free(p); + assert(p == "foo_bar_baz"); +}; diff --git a/vendor/tree-sitter-hare/example/copy.ha b/vendor/tree-sitter-hare/example/copy.ha new file mode 100644 index 000000000..114a6a446 --- /dev/null +++ b/vendor/tree-sitter-hare/example/copy.ha @@ -0,0 +1,30 @@ +use errors; + +// Copies data from one stream into another. Note that this function will never +// return if the source stream is infinite. +export fn copy(dest: *stream, src: *stream) (error | size) = { + match (dest.copier) { + null => void, + c: *copier => match (c(dest, src)) { + err: error => match (err) { + errors::unsupported => void, // Use fallback + * => return err, + }, + s: size => return s, + }, + }; + + let w = 0z; + static let buf: [4096]u8 = [0...]; + for (true) { + match (read(src, buf[..])?) { + n: size => for (let i = 0z; i < n) { + let r = write(dest, buf[i..n])?; + w += r; + i += r; + }, + EOF => break, + }; + }; + return w; +}; diff --git a/vendor/tree-sitter-hare/example/cstring.ha b/vendor/tree-sitter-hare/example/cstring.ha new file mode 100644 index 000000000..ca8409450 --- /dev/null +++ b/vendor/tree-sitter-hare/example/cstring.ha @@ -0,0 +1,16 @@ +fn c_strlen(cstr: *const char) size = { + const ptr = cstr: *[*]u8; + let ln = 0z; + for (ptr[ln] != 0; ln += 1) void; + return ln; +}; + +fn from_c_unsafe(cstr: *const char) const str = { + const l = c_strlen(cstr); + const s = struct { + data: *[*]u8 = cstr: *[*]u8, + length: size = l, + capacity: size = l, + }; + return *(&s: *const str); +}; diff --git a/vendor/tree-sitter-hare/example/cstrings.ha b/vendor/tree-sitter-hare/example/cstrings.ha new file mode 100644 index 000000000..4ecd04550 --- /dev/null +++ b/vendor/tree-sitter-hare/example/cstrings.ha @@ -0,0 +1,51 @@ +use encoding::utf8; +use types; +use rt; + +let emptybuf: [1]u8 = [0]; + +// A C-compatible empty string. Empty Hare strings have a null pointer instead +// of containing only '\0', so a special string is needed for this case. +export let c_empty: *const char = &emptybuf: *[*]u8: *const char; + +// Computes the length of a NUL-terminated C string, in octets, in O(n). The +// computed length does not include the NUL terminator. +export fn cstrlen(cstr: *const char) size = { + const ptr = cstr: *[*]u8; + let ln = 0z; + for (ptr[ln] != 0; ln += 1) void; + return ln; +}; + +// Converts a C string to a Hare string in O(n), and does not check if it's +// valid UTF-8. +export fn fromc_unsafe(cstr: *const char) const str = { + const l = cstrlen(cstr); + const s = types::string { + data = cstr: *[*]u8, + length = l, + capacity = l, + }; + return *(&s: *const str); +}; + +// Converts a C string to a Hare string in O(n). If the string is not valid +// UTF-8, abort. +export fn fromc(cstr: *const char) const str = { + let s = fromc_unsafe(cstr); + assert(utf8::valid(s)); + return s; +}; + +// Converts a Hare string to a C string. The result is allocated, the caller +// must free it when they're done. +export fn to_c(s: const str) *char = { + let ptr = rt::malloc(len(s) + 1): nullable *[*]u8; + let ptr = match (ptr) { + null => abort("Out of memory"), + p: *[*]u8 => p, + }; + rt::memcpy(ptr, (&s: *types::string).data, len(s)); + ptr[len(s)] = 0; + return ptr: *char; +}; diff --git a/vendor/tree-sitter-hare/example/ctype.ha b/vendor/tree-sitter-hare/example/ctype.ha new file mode 100644 index 000000000..91ca79458 --- /dev/null +++ b/vendor/tree-sitter-hare/example/ctype.ha @@ -0,0 +1,102 @@ +def U: u8 = 0o1; +def L: u8 = 0o2; +def N: u8 = 0o4; +def S: u8 = 0o10; +def P: u8 = 0o20; +def C: u8 = 0o40; +def B: u8 = 0o100; +def X: u8 = 0o200; + +// LUT of bitfields with character attributes +const cclass: []u8 = [ +// 0 1 2 3 4 5 6 7 + C, C, C, C, C, C, C, C, // 0 + C, S|C, S|C, S|C, S|C, S|C, C, C, // 10 + C, C, C, C, C, C, C, C, // 20 + C, C, C, C, C, C, C, C, // 30 + S|B, P, P, P, P, P, P, P, // 40 + P, P, P, P, P, P, P, P, // 50 + N|X, N|X, N|X, N|X, N|X, N|X, N|X, N|X, // 60 + N|X, N|X, P, P, P, P, P, P, // 70 + P, U|X, U|X, U|X, U|X, U|X, U|X, U, // 100 + U, U, U, U, U, U, U, U, // 110 + U, U, U, U, U, U, U, U, // 120 + U, U, U, P, P, P, P, P, // 130 + P, L|X, L|X, L|X, L|X, L|X, L|X, L, // 140 + L, L, L, L, L, L, L, L, // 150 + L, L, L, L, L, L, L, L, // 160 + L, L, L, P, P, P, P, C, // 170 +]; + +// True if an ASCII character is a letter +export fn isalpha(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&(U|L) > 0; + +// True if an ASCII character is uppercase +export fn isupper(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&U > 0; + +// True if an ASCII character is lowercase +export fn islower(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&L > 0; + +// True if an ASCII character is a digit +export fn isdigit(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&N > 0; + +// True if an ASCII character is a hexadecimal digit +export fn isxdigit(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&X > 0; + +// True if an ASCII character is a space. +export fn isspace(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&S > 0; + +// True if an ASCII character is punctuation. +export fn ispunct(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&P > 0; + +// True if an ASCII character is alphanumeric. +export fn isalnum(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&(U|L|N) > 0; + +// True if an ASCII character is printable. +export fn isprint(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&(P|U|L|N|B) > 0; + +// True if an ASCII character is any printable character other than space. +export fn isgraph(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&(P|U|L|N) > 0; + +// True if an ASCII character is a control character. +export fn iscntrl(c: rune) bool = + if (!isascii(c)) false else cclass[c: u32]&C > 0; + +// True if a rune is a valid ASCII character. +export fn isascii(c: rune) bool = c: u32 <= 0o177; + +// Returns the uppercase form of an ASCII character, or the original character +// if it was not a lowercase letter. +export fn toupper(c: rune) rune = { + return if (islower(c)) { + (c: u32 - ('a': u32) + ('A': u32)): rune; + } else c; +}; + +// Returns the lowercase form of an ASCII character, or the original character +// if it was not an uppercase letter. +export fn tolower(c: rune) rune = { + return if (isupper(c)) { + (c: u32 - ('A': u32) + ('a': u32)): rune; + } else c; +}; + +@test fn ctype() void = { + // Just some simple tests + assert(isspace(' ') && !isspace('x') && !isspace('こ')); + assert(isalnum('a') && isalnum('8') && !isalnum('こ')); + assert(!ispunct('\0') && iscntrl('\b')); + assert(isascii('a') && isascii('\0') && isascii('\x7F')); + assert(!isascii('\x80') && !isascii('こ')); + assert(tolower('A') == 'a' && tolower('こ') == 'こ'); +}; diff --git a/vendor/tree-sitter-hare/example/decl.ha b/vendor/tree-sitter-hare/example/decl.ha new file mode 100644 index 000000000..047e19590 --- /dev/null +++ b/vendor/tree-sitter-hare/example/decl.ha @@ -0,0 +1,192 @@ +use io; +use fmt; +use hare::ast; +use hare::lex; +use strio; + +export fn decl(out: *io::stream, d: ast::decl) (size | io::error) = { + let n = 0z; + if (d.exported) { + n += fmt::fprint(out, "export ")?; + }; + match (d.decl) { + g: []ast::decl_global => { + n += fmt::fprint(out, + if (g[0].is_const) "def " else "let ")?; + for (let i = 0z; i < len(g); i += 1) { + if (len(g[i].symbol) != 0) { + n += fmt::fprintf(out, + "@symbol(\"{}\") ", g[i].symbol)?; + }; + n += ident(out, g[i].ident)?; + n += fmt::fprint(out, ": ")?; + n += _type(out, 0, g[i]._type)?; + n += fmt::fprint(out, " = ")?; + n += expr(out, 0, g[i].init)?; + if (i + 1 < len(g)) { + n += fmt::fprint(out, ", ")?; + }; + }; + }, + t: []ast::decl_type => { + n += fmt::fprint(out, "type ")?; + for (let i = 0z; i < len(t); i += 1) { + n += ident(out, t[i].ident)?; + n += fmt::fprint(out, " = ")?; + n += _type(out, 0, t[i]._type)?; + if (i + 1 < len(t)) { + n += fmt::fprint(out, ", ")?; + }; + }; + }, + f: ast::decl_func => { + n += fmt::fprint(out, switch (f.attrs) { + ast::fndecl_attrs::NONE => "", + ast::fndecl_attrs::FINI => "@fini ", + ast::fndecl_attrs::INIT => "@init ", + ast::fndecl_attrs::TEST => "@test ", + })?; + let p = f.prototype._type as ast::func_type; + if (p.attrs & ast::func_attrs::NORETURN != 0) { + n += fmt::fprint(out, "@noreturn ")?; + }; + if (len(f.symbol) != 0) { + n += fmt::fprintf(out, "@symbol(\"{}\") ", + f.symbol)?; + }; + n += fmt::fprint(out, "fn ")?; + n += ident(out, f.ident)?; + n += prototype(out, 0, + f.prototype._type as ast::func_type)?; + match (f.body) { + void => void, + e: ast::expr => { + n += fmt::fprint(out, " = ")?; + n += expr(out, 0, e)?; + }, + }; + }, + }; + n += fmt::fprint(out, ";")?; + return n; +}; + +fn decl_test(d: ast::decl, expected: str) bool = { + let buf = strio::dynamic(); + decl(buf, d) as size; + let s = strio::finish(buf); + defer free(s); + return s == expected; +}; + +@test fn decl() void = { + let loc = lex::location { + path = "", + line = 0, + col = 0, + }; + let type_int = ast::_type { + loc = loc, + flags = 0, + _type = ast::builtin_type::INT, + }; + let type_fn = ast::_type { + loc = loc, + flags = ast::type_flags::CONST, + _type = ast::func_type { + result = &type_int, + attrs = ast::func_attrs::NORETURN, + variadism = ast::variadism::HARE, + params = [ + ast::func_param { + loc = loc, + name = "foo", + _type = &type_int, + }, + ast::func_param { + loc = loc, + name = "bar", + _type = &type_int, + }, + ], + }, + }; + let expr_void = void: ast::constant_expr: ast::expr; + + let d = ast::decl { + loc = loc, + exported = false, + decl = [ + ast::decl_global { + is_const = false, + symbol = "", + ident = ["foo", "bar"], + _type = type_int, + init = expr_void, + }, + ast::decl_global { + is_const = false, + symbol = "foobar", + ident = ["baz"], + _type = type_int, + init = expr_void, + }, + ], + }; + assert(decl_test(d, "let foo::bar: int = void, @symbol(\"foobar\") baz: int = void;")); + + d.exported = true; + d.decl = [ + ast::decl_global { + is_const = true, + ident = ["foo"], + _type = type_int, + init = expr_void, + ... + }, + ]; + assert(decl_test(d, "export def foo: int = void;")); + + d.exported = false; + d.decl = [ + ast::decl_type { + ident = ["foo"], + _type = type_int, + }, + ast::decl_type { + ident = ["bar"], + _type = type_int, + }, + ]; + assert(decl_test(d, "type foo = int, bar = int;")); + + d.decl = ast::decl_func { + symbol = "foo", + ident = ["foo"], + prototype = type_fn, + body = void, + attrs = ast::fndecl_attrs::FINI, + }; + assert(decl_test(d, "@fini @noreturn @symbol(\"foo\") fn foo(foo: int, bar: int...) int;")); + + type_fn._type = ast::func_type { + result = &type_int, + attrs = 0, + variadism = ast::variadism::NONE, + params = [ + ast::func_param { + loc = loc, + name = "", + _type = &type_int, + }, + ], + }; + d.decl = ast::decl_func { + symbol = "", + ident = ["foo"], + prototype = type_fn, + body = expr_void, + attrs = 0, + }; + assert(decl_test(d, "fn foo(_: int) int = void;")); +}; diff --git a/vendor/tree-sitter-hare/example/decode.ha b/vendor/tree-sitter-hare/example/decode.ha new file mode 100644 index 000000000..add1f57a2 --- /dev/null +++ b/vendor/tree-sitter-hare/example/decode.ha @@ -0,0 +1,151 @@ +use types; + +fn toutf8(in: str) []u8 = *(&in: *[]u8); + +// The state for the UTF-8 decoder. +export type decoder = struct { + offs: size, + src: []u8, +}; + +// Initializes a new UTF-8 decoder. +export fn decode(src: (str | []u8)) decoder = match (src) { + s: str => decoder { src = toutf8(s), ... }, + b: []u8 => decoder { src = b, ... }, +}; + +// Indicates that more data is needed, i.e. that a partial UTF-8 sequence was +// encountered. +export type more = void; + +// An error indicating that an invalid UTF-8 sequence was found. +export type invalid = void!; + +// Returns the next rune from a decoder. If the slice ends with a complete UTF-8 +// sequence, void is returned. If an incomplete sequence is encountered, more is +// returned. And if an invalid sequence is encountered, invalid is returned. +export fn next(d: *decoder) (rune | void | more | invalid) = { + assert(d.offs <= len(d.src)); + if (d.offs == len(d.src)) { + return; + }; + + // XXX: It would be faster if we decoded and measured at the same time. + const n = utf8sz(d.src[d.offs]); + if (n == types::SIZE_MAX) { + return invalid; + } else if (d.offs + n > len(d.src)) { + return more; + }; + let bytes = d.src[d.offs..d.offs+n]; + d.offs += n; + + let r = 0u32; + if (bytes[0] < 128) { + // ASCII + return bytes[0]: u32: rune; + }; + + const mask = masks[n - 1]; + r = bytes[0] & mask; + for (let i = 1z; i < len(bytes); i += 1) { + r <<= 6; + r |= bytes[i] & 0x3F; + }; + return r: rune; +}; + +// Returns the previous rune from a decoder. If the slice starts with a complete UTF-8 +// sequence, void is returned. If an incomplete sequence is encountered, more is +// returned. And if an invalid sequence is encountered, invalid is returned. +export fn prev(d: *decoder) (rune | void | more | invalid) = { + if (d.offs == 0) { + return; + }; + + let n = 0z; + let r = 0u32; + + for (let i = 0z; i < d.offs; i += 1) { + if ((d.src[d.offs - i - 1] & 0xC0) == 0x80) { + let tmp: u32 = d.src[d.offs - i - 1] & 0x3F; + r |= tmp << (i * 6): u32; + } else { + n = i + 1; + let tmp: u32 = d.src[d.offs - i - 1] & masks[i]; + r |= tmp << (i * 6): u32; + break; + }; + }; + if (n == 0) { + return more; + }; + d.offs -= n; + if (n != utf8sz(d.src[d.offs])) { + return invalid; + }; + return r: rune; +}; + +@test fn decode() void = { + const input: [_]u8 = [ + 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x93, 0xE3, 0x81, + 0xAB, 0xE3, 0x81, 0xA1, 0xE3, 0x81, 0xAF, 0x00, + ]; + const expected = ['こ', 'ん', 'に', 'ち', 'は', '\0']; + let decoder = decode(input); + for (let i = 0z; i < len(expected); i += 1) { + match (next(&decoder)) { + (invalid | more | void) => abort(), + r: rune => assert(r == expected[i]), + }; + }; + assert(next(&decoder) is void); + assert(decoder.offs == len(decoder.src)); + for (let i = 0z; i < len(expected); i += 1) { + match (prev(&decoder)) { + (invalid | more | void) => abort(), + r: rune => assert(r == expected[len(expected) - i - 1]), + }; + }; + assert(prev(&decoder) is void); + + // TODO: Test more invalid sequences + const invalid: [_]u8 = [0xA0, 0xA1]; + decoder = decode(invalid); + assert(next(&decoder) is invalid); + decoder.offs = 2; + assert(prev(&decoder) is more); + + const incomplete: [_]u8 = [0xE3, 0x81]; + decoder = decode(incomplete); + assert(next(&decoder) is more); + decoder.offs = 2; + assert(prev(&decoder) is invalid); +}; + +// Returns true if a given string or byte slice contains only valid UTF-8 +// sequences. Note that Hare strings (str) are always valid UTF-8 - if this +// returns false for a str type, something funny is going on. +export fn valid(src: (str | []u8)) bool = { + let decoder = decode(src); + for (true) { + match (next(&decoder)) { + void => return true, + invalid => return false, + more => return false, + rune => void, + }; + }; + abort(); +}; + +// Returns the expected length of a UTF-8 character in bytes. +export fn utf8sz(c: u8) size = { + for (let i = 0z; i < len(sizes); i += 1) { + if (c & sizes[i].mask == sizes[i].result) { + return sizes[i].octets; + }; + }; + return types::SIZE_MAX; +}; diff --git a/vendor/tree-sitter-hare/example/dirfdfs.ha b/vendor/tree-sitter-hare/example/dirfdfs.ha new file mode 100644 index 000000000..5a1a1ffb6 --- /dev/null +++ b/vendor/tree-sitter-hare/example/dirfdfs.ha @@ -0,0 +1,399 @@ +use bytes; +use errors; +use encoding::utf8; +use fs; +use io; +use path; +use rt; +use strings; +use time; + +// Controls how symlinks are followed (or not) in a dirfd filesystem. Support +// for this feature varies, you should gate usage of this enum behind a build +// tag. +// +// Note that on Linux, specifying BENEATH or IN_ROOT will also disable magic +// symlinks. +export type resolve_flags = enum { + NORMAL, + + // Does not allow symlink resolution to occur for any symlinks which + // would refer to any anscestor of the fd directory. This disables all + // absolute symlinks, and any call to open or create with an absolute + // path. + BENEATH, + + // Treat the directory fd as the root directory. This affects + // open/create for absolute paths, as well as absolute path resolution + // of symlinks. The effects are similar to chroot. + IN_ROOT, + + // Disables symlink resolution entirely. + NO_SYMLINKS, + + // Disallows traversal of mountpoints during path resolution. This is + // not recommended for general use, as bind mounts are extensively used + // on many systems. + NO_XDEV, +}; + +type os_filesystem = struct { + fs: fs::fs, + dirfd: int, + resolve: resolve_flags, +}; + +fn static_dirfdopen(fd: int, filesystem: *os_filesystem) *fs::fs = { + *filesystem = os_filesystem { + fs = fs::fs { + open = &fs_open, + create = &fs_create, + remove = &fs_remove, + iter = &fs_iter, + stat = &fs_stat, + subdir = &fs_subdir, + mkdir = &fs_mkdir, + rmdir = &fs_rmdir, + chmod = &fs_chmod, + chown = &fs_chown, + resolve = &fs_resolve, + ... + }, + dirfd = fd, + }; + return &filesystem.fs; +}; + +// Opens a file descriptor as an [fs::fs]. This file descriptor must be a +// directory file. The file will be closed when the fs is closed. +// +// If no other flags are provided to [fs::open] and [fs::create] when used with +// a dirfdfs, [fs::flags::NOCTTY] and [fs::flags::CLOEXEC] are used when opening +// the file. If you pass your own flags, it is recommended that you add these +// unless you know that you do not want them. +export fn dirfdopen(fd: int, resolve: resolve_flags...) *fs::fs = { + let ofs = alloc(os_filesystem { ... }); + let fs = static_dirfdopen(fd, ofs); + for (let i = 0z; i < len(resolve); i += 1) { + ofs.resolve |= resolve[i]; + }; + fs.close = &fs_close; + return fs; +}; + +// Clones a dirfd filesystem, optionally adding additional [resolve_flags] +// constraints. +export fn dirfs_clone(fs: *fs::fs, resolve: resolve_flags...) *fs::fs = { + assert(fs.open == &fs_open); + let fs = fs: *os_filesystem; + let new = alloc(*fs); + for (let i = 0z; i < len(resolve); i += 1) { + new.resolve |= resolve[i]; + }; + new.dirfd = rt::dup(new.dirfd) as int; + return &new.fs; +}; + +fn errno_to_fs(err: rt::errno) fs::error = switch (err) { + rt::ENOENT => errors::noentry, + rt::EEXIST => errors::exists, + rt::EACCES => errors::noaccess, + rt::EBUSY => errors::busy, + rt::ENOTDIR => fs::wrongtype, + rt::EOPNOTSUPP, rt::ENOSYS => errors::unsupported, + * => errors::errno(err), +}; + +fn _fs_open( + fs: *fs::fs, + path: str, + mode: io::mode, + oh: *rt::open_how, +) (*io::stream | fs::error) = { + let fs = fs: *os_filesystem; + + oh.resolve = 0u64; + if (fs.resolve & resolve_flags::BENEATH == resolve_flags::BENEATH) { + oh.resolve |= rt::RESOLVE_BENEATH | rt::RESOLVE_NO_MAGICLINKS; + }; + if (fs.resolve & resolve_flags::IN_ROOT == resolve_flags::IN_ROOT) { + oh.resolve |= rt::RESOLVE_IN_ROOT | rt::RESOLVE_NO_MAGICLINKS; + }; + if (fs.resolve & resolve_flags::NO_SYMLINKS == resolve_flags::NO_SYMLINKS) { + oh.resolve |= rt::RESOLVE_NO_SYMLINKS; + }; + if (fs.resolve & resolve_flags::NO_XDEV == resolve_flags::NO_XDEV) { + oh.resolve |= rt::RESOLVE_NO_XDEV; + }; + + let fd = match (rt::openat2(fs.dirfd, path, oh, size(rt::open_how))) { + err: rt::errno => return errno_to_fs(err), + fd: int => fd, + }; + + return fdopen(fd, path, mode); +}; + +fn fs_open( + fs: *fs::fs, + path: str, + flags: fs::flags... +) (*io::stream | fs::error) = { + let oflags = 0; + let iomode = io::mode::NONE; + if (len(flags) == 0z) { + oflags |= (fs::flags::NOCTTY + | fs::flags::CLOEXEC + | fs::flags::RDONLY): int; + }; + for (let i = 0z; i < len(flags); i += 1z) { + oflags |= flags[i]: int; + }; + + if ((oflags: fs::flags & fs::flags::DIRECTORY) == fs::flags::DIRECTORY) { + // This is arch-specific + oflags &= ~fs::flags::DIRECTORY: int; + oflags |= rt::O_DIRECTORY: int; + }; + + if ((oflags: fs::flags & fs::flags::RDWR) == fs::flags::RDWR) { + iomode = io::mode::RDWR; + } else if ((oflags: fs::flags & fs::flags::WRONLY) == fs::flags::WRONLY) { + iomode = io::mode::WRITE; + } else if ((oflags: fs::flags & fs::flags::PATH) != fs::flags::PATH) { + iomode = io::mode::READ; + }; + + let oh = rt::open_how { + flags = oflags: u64, + ... + }; + return _fs_open(fs, path, iomode, &oh); +}; + +fn fs_create( + fs: *fs::fs, + path: str, + mode: fs::mode, + flags: fs::flags... +) (*io::stream | fs::error) = { + let oflags = 0; + let iomode = io::mode::NONE; + if (len(flags) == 0z) { + oflags |= (fs::flags::NOCTTY + | fs::flags::CLOEXEC + | fs::flags::WRONLY): int; + }; + for (let i = 0z; i < len(flags); i += 1z) { + oflags |= flags[i]: int; + }; + oflags |= fs::flags::CREATE: int; + + if ((oflags: fs::flags & fs::flags::RDWR) == fs::flags::RDWR) { + iomode = io::mode::RDWR; + } else if ((oflags: fs::flags & fs::flags::WRONLY) == fs::flags::WRONLY) { + iomode = io::mode::WRITE; + } else if ((oflags: fs::flags & fs::flags::PATH) != fs::flags::PATH) { + iomode = io::mode::READ; + }; + + let oh = rt::open_how { + flags = oflags: u64, + mode = mode: u64, + ... + }; + return _fs_open(fs, path, iomode, &oh); +}; + +fn fs_remove(fs: *fs::fs, path: str) (void | fs::error) = { + let fs = fs: *os_filesystem; + match (rt::unlinkat(fs.dirfd, path, 0)) { + err: rt::errno => return errno_to_fs(err), + void => void, + }; +}; + +fn fs_stat(fs: *fs::fs, path: str) (fs::filestat | fs::error) = { + let fs = fs: *os_filesystem; + let st = rt::st { ... }; + match (rt::fstatat(fs.dirfd, path, &st, rt::AT_SYMLINK_NOFOLLOW)) { + err: rt::errno => return errno_to_fs(err), + void => void, + }; + return fs::filestat { + mask = fs::stat_mask::UID + | fs::stat_mask::GID + | fs::stat_mask::SIZE + | fs::stat_mask::INODE + | fs::stat_mask::ATIME + | fs::stat_mask::MTIME + | fs::stat_mask::CTIME, + mode = st.mode: fs::mode, + uid = st.uid, + uid = st.gid, + sz = st.sz, + inode = st.ino, + atime = time::instant { + sec = st.atime.tv_sec, + nsec = st.atime.tv_nsec, + }, + mtime = time::instant { + sec = st.mtime.tv_sec, + nsec = st.mtime.tv_nsec, + }, + ctime = time::instant { + sec = st.ctime.tv_sec, + nsec = st.ctime.tv_nsec, + }, + }; +}; + +fn fs_subdir(fs: *fs::fs, path: str) (*fs::fs | fs::error) = { + let fs = fs: *os_filesystem; + let oh = rt::open_how { + flags = (rt::O_RDONLY | rt::O_CLOEXEC | rt::O_DIRECTORY): u64, + ... + }; + + let fd: int = match (rt::openat2(fs.dirfd, path, + &oh, size(rt::open_how))) { + err: rt::errno => return errno_to_fs(err), + n: int => n, + }; + + return dirfdopen(fd); +}; + +fn fs_rmdir(fs: *fs::fs, path: str) (void | fs::error) = { + let fs = fs: *os_filesystem; + match (rt::unlinkat(fs.dirfd, path, rt::AT_REMOVEDIR)) { + err: rt::errno => return errno_to_fs(err), + void => void, + }; +}; + +fn fs_mkdir(fs: *fs::fs, path: str) (void | fs::error) = { + let fs = fs: *os_filesystem; + return match (rt::mkdirat(fs.dirfd, path, 0o755)) { + err: rt::errno => errno_to_fs(err), + void => void, + }; +}; + +fn fs_chmod(fs: *fs::fs, path: str, mode: fs::mode) (void | fs::error) = { + let fs = fs: *os_filesystem; + return match (rt::fchmodat(fs.dirfd, path, mode: uint)) { + err: rt::errno => return errno_to_fs(err), + void => void, + }; +}; + +fn fs_chown(fs: *fs::fs, path: str, uid: uint, gid: uint) (void | fs::error) = { + let fs = fs: *os_filesystem; + return match (rt::fchownat(fs.dirfd, path, uid, gid)) { + err: rt::errno => return errno_to_fs(err), + void => void, + }; +}; + +fn resolve_part(parts: *[]str, part: str) void = { + if (part == ".") { + // no-op + void; + } else if (part == "..") { + // XXX: We should not have to dereference this + if (len(*parts) != 0) { + delete(parts[len(*parts) - 1]); + }; + } else { + append(*parts, part); + }; +}; + +fn fs_resolve(fs: *fs::fs, path: str) str = { + let parts: []str = []; + if (!path::abs(path)) { + let iter = path::iter(getcwd()); + for (true) match (path::next(&iter)) { + void => break, + p: str => resolve_part(&parts, p), + }; + }; + let iter = path::iter(path); + for (true) match (path::next(&iter)) { + void => break, + p: str => resolve_part(&parts, p), + }; + return path::join(parts...); +}; + +fn fs_close(fs: *fs::fs) void = { + let fs = fs: *os_filesystem; + rt::close(fs.dirfd); +}; + +def BUFSIZ: size = 2048; + +// Based on musl's readdir +type os_iterator = struct { + iter: fs::iterator, + fd: int, + buf_pos: size, + buf_end: size, + buf: [BUFSIZ]u8, +}; + +fn fs_iter(fs: *fs::fs, path: str) (*fs::iterator | fs::error) = { + let fs = fs: *os_filesystem; + let oh = rt::open_how { + flags = (rt::O_RDONLY | rt::O_CLOEXEC | rt::O_DIRECTORY): u64, + ... + }; + let fd: int = match (rt::openat2(fs.dirfd, path, + &oh, size(rt::open_how))) { + err: rt::errno => return errno_to_fs(err), + n: int => n, + }; + + let iter = alloc(os_iterator { + iter = fs::iterator { + next = &iter_next, + }, + fd = fd, + ... + }); + return &iter.iter; +}; + +fn iter_next(iter: *fs::iterator) (fs::dirent | void) = { + let iter = iter: *os_iterator; + if (iter.buf_pos >= iter.buf_end) { + let n = rt::getdents64(iter.fd, &iter.buf, BUFSIZ) as size; + if (n == 0) { + rt::close(iter.fd); + free(iter); + return; + }; + iter.buf_end = n; + iter.buf_pos = 0; + }; + let de = &iter.buf[iter.buf_pos]: *rt::dirent64; + iter.buf_pos += de.d_reclen; + let name = strings::fromc(&de.d_name: *const char); + + let ftype: fs::mode = switch (de.d_type) { + rt::DT_UNKNOWN => fs::mode::UNKNOWN, + rt::DT_FIFO => fs::mode::FIFO, + rt::DT_CHR => fs::mode::CHR, + rt::DT_DIR => fs::mode::DIR, + rt::DT_BLK => fs::mode::BLK, + rt::DT_REG => fs::mode::REG, + rt::DT_LNK => fs::mode::LINK, + rt::DT_SOCK => fs::mode::SOCK, + * => fs::mode::UNKNOWN, + }; + return fs::dirent { + name = name, + ftype = ftype, + }; +}; diff --git a/vendor/tree-sitter-hare/example/docs.ha b/vendor/tree-sitter-hare/example/docs.ha new file mode 100644 index 000000000..afe908f9d --- /dev/null +++ b/vendor/tree-sitter-hare/example/docs.ha @@ -0,0 +1,6 @@ +// The slice module provides some utility functions for working with slices. In +// order to work with a user-supplied slice of an arbitrary type, the slice must +// be cast to []void and the size of the member type passed alongside it. These +// functions provide support code for common operations such as indexing and +// appending, which are normally provided by language features, but which are +// not available for []void slices. diff --git a/vendor/tree-sitter-hare/example/dup.ha b/vendor/tree-sitter-hare/example/dup.ha new file mode 100644 index 000000000..71e977aa3 --- /dev/null +++ b/vendor/tree-sitter-hare/example/dup.ha @@ -0,0 +1,41 @@ +use bytes; +use rt; +use types; + +// Duplicates a string. Aborts on allocation failure. +export fn dup(s: const str) str = { + const in = &s: *types::string; + const id = match (in.data) { + null => return "", // Empty string + b: *[*]u8 => b, + }; + let buf: *[*]u8 = match (rt::malloc(in.length + 1)) { + null => abort("Out of memory"), + v: *void => v, + }; + bytes::copy(buf[..in.length + 1z], id[..in.length + 1]); + let out = types::string { + data = buf, + length = in.length, + capacity = in.length, + }; + return *(&out: *str); +}; + +// Duplicates every string of a slice in place, returning the same slice with +// new strings. +export fn dupall(s: []str) void = { + for (let i = 0z; i < len(s); i += 1) { + s[i] = strings::dup(s[i]); + }; +}; + +@test fn dup() void = { + let s = dup(""); + assert(s == ""); + free(s); + + s = dup("hello"); + assert(s == "hello"); + free(s); +}; diff --git a/vendor/tree-sitter-hare/example/dynamic.ha b/vendor/tree-sitter-hare/example/dynamic.ha new file mode 100644 index 000000000..a4fbe6704 --- /dev/null +++ b/vendor/tree-sitter-hare/example/dynamic.ha @@ -0,0 +1,192 @@ +use bytes; +use errors; +use io; + +type dynamic_stream = struct { + stream: io::stream, + buf: []u8, + pos: size, +}; + +// Creates an [io::stream] which dynamically allocates a buffer to store writes +// into. Subsequent reads will consume the buffered data. Upon failure to +// allocate sufficient memory to store writes, the program aborts. +// +// Calling [io::close] on this stream will free the buffer. Call [bufio::finish] +// instead to free up resources associated with the stream, but transfer +// ownership of the buffer to the caller. +export fn dynamic(mode: io::mode) *io::stream = dynamic_from([], mode); + +// Like [dynamic], but takes an existing slice as input. Writes are appended to +// it and reads consume bytes from the initial buffer, plus any additional +// writes. Like [dynamic], calling [io::close] will free the buffer, and +// [bufio::finish] can be used to return ownership of the buffer to the caller. +export fn dynamic_from(in: []u8, mode: io::mode) *io::stream = { + let s = alloc(dynamic_stream { + stream = io::stream { + closer = &dynamic_close, + seeker = &dynamic_seek, + ... + }, + buf = in, + pos = 0, + }): *io::stream; + if (mode & io::mode::READ == io::mode::READ) { + s.reader = &dynamic_read; + }; + if (mode & io::mode::WRITE == io::mode::WRITE) { + s.writer = &dynamic_write; + }; + return s; +}; + +fn dynamic_write(s: *io::stream, buf: const []u8) (size | io::error) = { + let s = s: *dynamic_stream; + if (s.pos == len(s.buf)) { + append(s.buf, ...buf); + } else { + // TODO: update this after we add insert + let new: []u8 = alloc([], len(s.buf) + len(buf)); + append(new, ...s.buf[..s.pos]); + append(new, ...buf[..]); + append(new, ...s.buf[s.pos..]); + free(s.buf); + s.buf = new; + }; + + s.pos += len(buf); + return len(buf); +}; + +fn dynamic_read(s: *io::stream, buf: []u8) (size | io::EOF | io::error) = { + let s = s: *dynamic_stream; + if (len(s.buf) == s.pos && len(buf) != 0) { + return io::EOF; + }; + const n = if (len(s.buf) - s.pos < len(buf)) { + len(s.buf) - s.pos; + } else { + len(buf); + }; + buf[..n] = s.buf[s.pos..s.pos + n]; + s.pos += n; + return n; +}; + +fn dynamic_seek( + s: *io::stream, + off: io::off, + w: io::whence +) (io::off | io::error) = { + let stream = s: *dynamic_stream; + switch (w) { + io::whence::SET => { + if (len(stream.buf) < off: size) { + abort("invalid offset"); + }; + stream.pos = off: size; + }, + io::whence::CUR => { + if (stream.pos + off: size > len(stream.buf)) { + abort("invalid offset"); + }; + stream.pos += off: size; + }, + io::whence::END => { + if (len(stream.buf) - (-off): size < len(stream.buf)) { + abort("invalid offset"); + }; + stream.pos = len(stream.buf) - (-off): size; + }, + }; + return stream.pos: io::off; +}; + +fn dynamic_close(s: *io::stream) void = { + const s = s: *dynamic_stream; + free(s.buf); + free(s); +}; + +// Closes the stream without freeing the buffer, instead transferring ownership +// of it to the caller. +export fn finish(s: *io::stream) []u8 = { + if (s.closer != &dynamic_close) { + abort("bufio::finish called on non-bufio stream"); + }; + let s = s: *dynamic_stream; + let buf = s.buf; + free(s); + return buf; +}; + +// Returns the current buffer. +export fn buffer(s: *io::stream) []u8 = { + if (s.closer != &dynamic_close) { + abort("bufio::buffer called on non-bufio stream"); + }; + let s = s: *dynamic_stream; + return s.buf; +}; + +// Resets the buffer's length to zero, but keeps the allocated memory around for +// future writes. +export fn reset(s: *io::stream) void = { + if (s.closer != &dynamic_close) { + abort("bufio::reset called on non-bufio stream"); + }; + const s = s: *dynamic_stream; + s.pos = 0; + s.buf = s.buf[..0]; +}; + +// Truncates the buffer, freeing memory associated with it and setting its +// length to zero. +export fn truncate(s: *io::stream) (void | errors::unsupported) = { + if (s.closer != &dynamic_close) { + return errors::unsupported; + }; + let s = s: *dynamic_stream; + s.pos = 0; + delete(s.buf[..]); +}; + +@test fn dynamic() void = { + // TODO: slice/array equality + let s = dynamic(io::mode::RDWR); + assert(io::write(s, [1, 2, 3]) as size == 3); + assert(bytes::equal(buffer(s), [1, 2, 3])); + assert(io::write(s, [4, 5]) as size == 2); + assert(bytes::equal(buffer(s), [1, 2, 3, 4, 5])); + let buf: [2]u8 = [0...]; + assert(io::seek(s, 0, io::whence::SET) as io::off == 0: io::off); + assert(io::read(s, buf[..]) as size == 2 && bytes::equal(buf, [1, 2])); + assert(io::read(s, buf[..]) as size == 2 && bytes::equal(buf, [3, 4])); + assert(io::read(s, buf[..]) as size == 1 && buf[0] == 5); + assert(io::read(s, buf[..]) is io::EOF); + assert(io::write(s, [6, 7, 8]) as size == 3); + assert(bytes::equal(buffer(s), [1, 2, 3, 4, 5, 6, 7, 8])); + reset(s); + assert(len(buffer(s)) == 0); + assert(io::write(s, [1, 2, 3]) as size == 3); + assert(truncate(s) is void); + assert(len(buffer(s)) == 0); + + let sl: []u8 = alloc([1, 2, 3]); + let s = dynamic_from(sl, io::mode::WRITE); + assert(io::write(s, [0, 0]) as size == 2); + assert(io::seek(s, 0, io::whence::END) as io::off == 5: io::off); + assert(io::write(s, [4, 5, 6]) as size == 3); + assert(bytes::equal(buffer(s), [0, 0, 1, 2, 3, 4, 5, 6])); + // TODO: this should check for errors::unsupported (harec bug prevents that) + assert(io::read(s, buf[..]) is io::error); + io::close(s); + + sl = alloc([1, 2]); + let s = dynamic_from(sl, io::mode::READ); + assert(io::read(s, buf[..1]) as size == 1 && buf[0] == 1); + assert(io::seek(s, 1, io::whence::CUR) as io::off == 2: io::off); + assert(io::read(s, buf[..]) is io::EOF); + // TODO: this should check for errors::unsupported (harec bug prevents that) + assert(io::write(s, [1, 2]) is io::error); +}; diff --git a/vendor/tree-sitter-hare/example/encode.ha b/vendor/tree-sitter-hare/example/encode.ha new file mode 100644 index 000000000..42046b06e --- /dev/null +++ b/vendor/tree-sitter-hare/example/encode.ha @@ -0,0 +1,41 @@ +// Encodes a rune as UTF-8 and returns the result as a slice. The result is +// statically allocated; duplicate it if you aren't using it right away. +export fn encoderune(r: rune) []u8 = { + let ch = r: u32, n = 0z, first = 0u8; + if (ch < 0x80) { + first = 0; + n = 1; + } else if (ch < 0x800) { + first = 0xC0; + n = 2; + } else if (ch < 0x10000) { + first = 0xE0; + n = 3; + } else { + first = 0xF0; + n = 4; + }; + + static let buf: [6]u8 = [0...]; + for (let i = n - 1; i > 0; i -= 1) { + buf[i] = ch: u8 & 0x3F | 0x80; + ch >>= 6; + }; + buf[0] = ch: u8 | first; + return buf[..n]; +}; + +@test fn encode() void = { + const expected: [_][]u8 = [ + [0], + [0x25], + [0xE3, 0x81, 0x93], + ]; + const inputs = ['\0', '%', 'こ']; + for (let i = 0z; i < len(inputs); i += 1) { + const out = encoderune(inputs[i]); + for (let j = 0z; j < len(expected[i]); j += 1) { + assert(out[j] == expected[i][j]); + }; + }; +}; diff --git a/vendor/tree-sitter-hare/example/endian.ha b/vendor/tree-sitter-hare/example/endian.ha new file mode 100644 index 000000000..7727eb015 --- /dev/null +++ b/vendor/tree-sitter-hare/example/endian.ha @@ -0,0 +1,29 @@ +// The set of functions used for endian-aware encoding. +export type endian = struct { + getu16: *fn(buf: []u8) u16, + putu16: *fn(buf: []u8, in: u16) void, + getu32: *fn(buf: []u8) u32, + putu32: *fn(buf: []u8, in: u32) void, + getu64: *fn(buf: []u8) u64, + putu64: *fn(buf: []u8, in: u64) void, +}; + +// Big endian; MSB first. +export const big: endian = endian { + getu16 = &begetu16, + putu16 = &beputu16, + getu32 = &begetu32, + putu32 = &beputu32, + getu64 = &begetu64, + putu64 = &beputu64, +}; + +// Little endian; LSB first. +export const little: endian = endian { + getu16 = &legetu16, + putu16 = &leputu16, + getu32 = &legetu32, + putu32 = &leputu32, + getu64 = &legetu64, + putu64 = &leputu64, +}; diff --git a/vendor/tree-sitter-hare/example/ensure.ha b/vendor/tree-sitter-hare/example/ensure.ha new file mode 100644 index 000000000..470a10d1f --- /dev/null +++ b/vendor/tree-sitter-hare/example/ensure.ha @@ -0,0 +1,36 @@ +export type slice = struct { + data: nullable *void, + length: size, + capacity: size, +}; + +export fn ensure(s: *slice, membsz: size) void = { + let cap = s.capacity; + if (cap >= s.length) { + return; + }; + for (cap < s.length) { + assert(cap >= s.capacity, "slice out of memory (overflow)"); + if (cap == 0) { + cap = s.length; + } else { + cap *= 2; + }; + }; + s.capacity = cap; + const data = realloc(s.data, s.capacity * membsz); + assert(data != null || s.capacity * membsz == 0); + s.data = data; +}; + +export fn unensure(s: *slice, membsz: size) void = { + let cap = s.capacity; + for (cap > s.length) { + cap /= 2; + }; + cap *= 2; + s.capacity = cap; + const data = realloc(s.data, s.capacity * membsz); + assert(data != null || s.capacity * membsz == 0); + s.data = data; +}; diff --git a/vendor/tree-sitter-hare/example/env.ha b/vendor/tree-sitter-hare/example/env.ha new file mode 100644 index 000000000..626711ea7 --- /dev/null +++ b/vendor/tree-sitter-hare/example/env.ha @@ -0,0 +1,4 @@ +use format::elf; + +// System V auxillary vector for the current process +export let auxv: *[*]format::elf::auxv64 = null: *[*]format::elf::auxv64; diff --git a/vendor/tree-sitter-hare/example/environ.ha b/vendor/tree-sitter-hare/example/environ.ha new file mode 100644 index 000000000..849d3dc04 --- /dev/null +++ b/vendor/tree-sitter-hare/example/environ.ha @@ -0,0 +1,112 @@ +use bytes; +use rt; +use strings; +use types; + +// The command line arguments provided to the program. By convention, the first +// member is usually the name of the program. +export let args: []str = []; + +// Statically allocate arg strings if there are few enough arguments, saves a +// syscall if we don't need it. +let args_static: [32]str = [""...]; + +@init fn init_environ() void = { + if (rt::argc < len(args_static)) { + args = args_static[..rt::argc]; + for (let i = 0z; i < rt::argc; i += 1) { + args[i] = strings::fromc(rt::argv[i]); + }; + } else { + args = alloc([], rt::argc); + for (let i = 0z; i < rt::argc; i += 1) { + append(args, strings::fromc(rt::argv[i])); + }; + }; + +}; + +@fini fn fini_environ() void = { + if (rt::argc >= len(args_static)) { + free(args); + }; +}; + +// Looks up an environment variable and returns its value, or void if unset. +export fn getenv(name: const str) (str | void) = { + const name_b = strings::toutf8(name); + for (let i = 0z; rt::envp[i] != null; i += 1) { + const item = rt::envp[i]: *[*]u8; + const eq: size = match (bytes::index(item[..], '=': u32: u8)) { + void => abort("Environment violates System-V invariants"), + i: size => i, + }; + if (bytes::equal(name_b, item[..eq])) { + const ln = strings::cstrlen(item: *const char); + return strings::fromutf8(item[eq+1..ln]); + }; + }; +}; + +// Looks up an environment variable and returns its value, or a default value if +// unset. +export fn tryenv(name: const str, default: str) str = match (getenv(name)) { + s: str => s, + void => default, +}; + +let envp: []str = []; + +// Returns a slice of the environment strings in the form KEY=VALUE. +export fn getenvs() []str = { + if (len(envp) != 0) { + return envp; + }; + for (let i = 0z; rt::envp[i] != null; i += 1) { + append(envp, strings::fromc(rt::envp[i]: *const char)); + }; + return envp; +}; + +let uts: rt::utsname = rt::utsname { ... }; +let uts_valid: bool = false; + +// Returns the host kernel name +export fn sysname() const str = { + if (!uts_valid) { + rt::uname(&uts) as void; + }; + return strings::fromc(&uts.sysname: *const char); +}; + +// Returns the host system hostname +export fn hostname() const str = { + if (!uts_valid) { + rt::uname(&uts) as void; + }; + return strings::fromc(&uts.nodename: *const char); +}; + +// Returns the host kernel version +export fn release() const str = { + if (!uts_valid) { + rt::uname(&uts) as void; + }; + return strings::fromc(&uts.release: *const char); +}; + +// Returns the host operating system version +export fn version() const str = { + if (!uts_valid) { + rt::uname(&uts) as void; + }; + return strings::fromc(&uts.version: *const char); +}; + +// Returns the host CPU architecture +export fn machine() const str = { + if (!uts_valid) { + rt::uname(&uts) as void; + }; + return strings::fromc(&uts.machine: *const char); +}; diff --git a/vendor/tree-sitter-hare/example/equal.ha b/vendor/tree-sitter-hare/example/equal.ha new file mode 100644 index 000000000..3a9e57355 --- /dev/null +++ b/vendor/tree-sitter-hare/example/equal.ha @@ -0,0 +1,24 @@ +// Returns true if the two byte sequences are identical. +export fn equal(a: []u8, b: []u8) bool = { + if (len(a) != len(b)) { + return false; + }; + for (let i = 0z; i < len(a); i += 1) { + if (a[i] != b[i]) { + return false; + }; + }; + return true; +}; + +@test fn equal() void = { + let a: []u8 = [1, 2, 3]; + let b: []u8 = [1, 2, 3]; + let c: []u8 = [1, 4, 5]; + let d: []u8 = [1, 2, 3, 4]; + let e: []u8 = [1, 2]; + assert(equal(a, b)); + assert(!equal(a, c)); + assert(!equal(a, d)); + assert(!equal(a, e)); +}; diff --git a/vendor/tree-sitter-hare/example/errno.ha b/vendor/tree-sitter-hare/example/errno.ha new file mode 100644 index 000000000..5cc4ffab8 --- /dev/null +++ b/vendor/tree-sitter-hare/example/errno.ha @@ -0,0 +1,423 @@ +// Represents an error returned from the Linux kernel. +export type errno = int!; + +// Given an integer error number, wraps it in an error type. +export fn wrap_errno(err: int) errno = err: errno; + +// Checks the return value from a Linux syscall and, if found to be in error, +// returns the appropriate error. Otherwise, returns the original value. +fn wrap_return(r: u64) (errno | u64) = { + if (r > -4096u64) { + return (-(r: i64)): int: errno; + }; + return r; +}; + +// Obtains a human-friendly reading of an [errno] (e.g. "Operation not +// permitted"). +export fn strerror(err: errno) str = { + return switch (err: int) { + EPERM => "Operation not permitted", + ENOENT => "No such file or directory", + ESRCH => "No such process", + EINTR => "Interrupted system call", + EIO => "Input/output error", + ENXIO => "No such device or address", + E2BIG => "Argument list too long", + ENOEXEC => "Exec format error", + EBADF => "Bad file descriptor", + ECHILD => "No child processes", + EAGAIN => "Resource temporarily unavailable", + ENOMEM => "Cannot allocate memory", + EACCES => "Permission denied", + EFAULT => "Bad address", + ENOTBLK => "Block device required", + EBUSY => "Device or resource busy", + EEXIST => "File exists", + EXDEV => "Invalid cross-device link", + ENODEV => "No such device", + ENOTDIR => "Not a directory", + EISDIR => "Is a directory", + EINVAL => "Invalid argument", + ENFILE => "Too many open files in system", + EMFILE => "Too many open files", + ENOTTY => "Inappropriate ioctl for device", + ETXTBSY => "Text file busy", + EFBIG => "File too large", + ENOSPC => "No space left on device", + ESPIPE => "Illegal seek", + EROFS => "Read-only file system", + EMLINK => "Too many links", + EPIPE => "Broken pipe", + EDOM => "Numerical argument out of domain", + ERANGE => "Numerical result out of range", + EDEADLK => "Resource deadlock avoided", + ENAMETOOLONG => "File name too long", + ENOLCK => "No locks available", + ENOSYS => "Function not implemented", + ENOTEMPTY => "Directory not empty", + ELOOP => "Too many levels of symbolic links", + ENOMSG => "No message of desired type", + EIDRM => "Identifier removed", + ECHRNG => "Channel number out of range", + EL2NSYNC => "Level 2 not synchronized", + EL3HLT => "Level 3 halted", + EL3RST => "Level 3 reset", + ELNRNG => "Link number out of range", + EUNATCH => "Protocol driver not attached", + ENOCSI => "No CSI structure available", + EL2HLT => "Level 2 halted", + EBADE => "Invalid exchange", + EBADR => "Invalid request descriptor", + EXFULL => "Exchange full", + ENOANO => "No anode", + EBADRQC => "Invalid request code", + EBADSLT => "Invalid slot", + EBFONT => "Bad font file format", + ENOSTR => "Device not a stream", + ENODATA => "No data available", + ETIME => "Timer expired", + ENOSR => "Out of streams resources", + ENONET => "Machine is not on the network", + ENOPKG => "Package not installed", + EREMOTE => "Object is remote", + ENOLINK => "Link has been severed", + EADV => "Advertise error", + ESRMNT => "Srmount error", + ECOMM => "Communication error on send", + EPROTO => "Protocol error", + EMULTIHOP => "Multihop attempted", + EDOTDOT => "RFS specific error", + EBADMSG => "Bad message", + EOVERFLOW => "Value too large for defined data type", + ENOTUNIQ => "Name not unique on network", + EBADFD => "File descriptor in bad state", + EREMCHG => "Remote address changed", + ELIBACC => "Can not access a needed shared library", + ELIBBAD => "Accessing a corrupted shared library", + ELIBSCN => ".lib section in a.out corrupted", + ELIBMAX => "Attempting to link in too many shared libraries", + ELIBEXEC => "Cannot exec a shared library directly", + EILSEQ => "Invalid or incomplete multibyte or wide character", + ERESTART => "Interrupted system call should be restarted", + ESTRPIPE => "Streams pipe error", + EUSERS => "Too many users", + ENOTSOCK => "Socket operation on non-socket", + EDESTADDRREQ => "Destination address required", + EMSGSIZE => "Message too long", + EPROTOTYPE => "Protocol wrong type for socket", + ENOPROTOOPT => "Protocol not available", + EPROTONOSUPPORT => "Protocol not supported", + ESOCKTNOSUPPORT => "Socket type not supported", + EOPNOTSUPP => "Operation not supported", + EPFNOSUPPORT => "Protocol family not supported", + EAFNOSUPPORT => "Address family not supported by protocol", + EADDRINUSE => "Address already in use", + EADDRNOTAVAIL => "Cannot assign requested address", + ENETDOWN => "Network is down", + ENETUNREACH => "Network is unreachable", + ENETRESET => "Network dropped connection on reset", + ECONNABORTED => "Software caused connection abort", + ECONNRESET => "Connection reset by peer", + ENOBUFS => "No buffer space available", + EISCONN => "Transport endpoint is already connected", + ENOTCONN => "Transport endpoint is not connected", + ESHUTDOWN => "Cannot send after transport endpoint shutdown", + ETOOMANYREFS => "Too many references: cannot splice", + ETIMEDOUT => "Connection timed out", + ECONNREFUSED => "Connection refused", + EHOSTDOWN => "Host is down", + EHOSTUNREACH => "No route to host", + EALREADY => "Operation already in progress", + EINPROGRESS => "Operation now in progress", + ESTALE => "Stale file handle", + EUCLEAN => "Structure needs cleaning", + ENOTNAM => "Not a XENIX named type file", + ENAVAIL => "No XENIX semaphores available", + EISNAM => "Is a named type file", + EREMOTEIO => "Remote I/O error", + EDQUOT => "Disk quota exceeded", + ENOMEDIUM => "No medium found", + EMEDIUMTYPE => "Wrong medium type", + ECANCELED => "Operation canceled", + ENOKEY => "Required key not available", + EKEYEXPIRED => "Key has expired", + EKEYREVOKED => "Key has been revoked", + EKEYREJECTED => "Key was rejected by service", + EOWNERDEAD => "Owner died", + ENOTRECOVERABLE => "State not recoverable", + ERFKILL => "Operation not possible due to RF-kill", + EHWPOISON => "Memory page has hardware error", + * => "Unknown Linux error code", // TODO: snprintf to add errno? + }; +}; + +// Gets the programmer-friendly name for an [errno] (e.g. EPERM). +export fn errname(err: errno) str = { + return switch (err: int) { + EPERM => "EPERM", + ENOENT => "ENOENT", + ESRCH => "ESRCH", + EINTR => "EINTR", + EIO => "EIO", + ENXIO => "ENXIO", + E2BIG => "E2BIG", + ENOEXEC => "ENOEXEC", + EBADF => "EBADF", + ECHILD => "ECHILD", + EAGAIN => "EAGAIN", + ENOMEM => "ENOMEM", + EACCES => "EACCES", + EFAULT => "EFAULT", + ENOTBLK => "ENOTBLK", + EBUSY => "EBUSY", + EEXIST => "EEXIST", + EXDEV => "EXDEV", + ENODEV => "ENODEV", + ENOTDIR => "ENOTDIR", + EISDIR => "EISDIR", + EINVAL => "EINVAL", + ENFILE => "ENFILE", + EMFILE => "EMFILE", + ENOTTY => "ENOTTY", + ETXTBSY => "ETXTBSY", + EFBIG => "EFBIG", + ENOSPC => "ENOSPC", + ESPIPE => "ESPIPE", + EROFS => "EROFS", + EMLINK => "EMLINK", + EPIPE => "EPIPE", + EDOM => "EDOM", + ERANGE => "ERANGE", + EDEADLK => "EDEADLK", + ENAMETOOLONG => "ENAMETOOLONG", + ENOLCK => "ENOLCK", + ENOSYS => "ENOSYS", + ENOTEMPTY => "ENOTEMPTY", + ELOOP => "ELOOP", + ENOMSG => "ENOMSG", + EIDRM => "EIDRM", + ECHRNG => "ECHRNG", + EL2NSYNC => "EL2NSYNC", + EL3HLT => "EL3HLT", + EL3RST => "EL3RST", + ELNRNG => "ELNRNG", + EUNATCH => "EUNATCH", + ENOCSI => "ENOCSI", + EL2HLT => "EL2HLT", + EBADE => "EBADE", + EBADR => "EBADR", + EXFULL => "EXFULL", + ENOANO => "ENOANO", + EBADRQC => "EBADRQC", + EBADSLT => "EBADSLT", + EBFONT => "EBFONT", + ENOSTR => "ENOSTR", + ENODATA => "ENODATA", + ETIME => "ETIME", + ENOSR => "ENOSR", + ENONET => "ENONET", + ENOPKG => "ENOPKG", + EREMOTE => "EREMOTE", + ENOLINK => "ENOLINK", + EADV => "EADV", + ESRMNT => "ESRMNT", + ECOMM => "ECOMM", + EPROTO => "EPROTO", + EMULTIHOP => "EMULTIHOP", + EDOTDOT => "EDOTDOT", + EBADMSG => "EBADMSG", + EOVERFLOW => "EOVERFLOW", + ENOTUNIQ => "ENOTUNIQ", + EBADFD => "EBADFD", + EREMCHG => "EREMCHG", + ELIBACC => "ELIBACC", + ELIBBAD => "ELIBBAD", + ELIBSCN => "ELIBSCN", + ELIBMAX => "ELIBMAX", + ELIBEXEC => "ELIBEXEC", + EILSEQ => "EILSEQ", + ERESTART => "ERESTART", + ESTRPIPE => "ESTRPIPE", + EUSERS => "EUSERS", + ENOTSOCK => "ENOTSOCK", + EDESTADDRREQ => "EDESTADDRREQ", + EMSGSIZE => "EMSGSIZE", + EPROTOTYPE => "EPROTOTYPE", + ENOPROTOOPT => "ENOPROTOOPT", + EPROTONOSUPPORT => "EPROTONOSUPPORT", + ESOCKTNOSUPPORT => "ESOCKTNOSUPPORT", + EOPNOTSUPP => "EOPNOTSUPP", + EPFNOSUPPORT => "EPFNOSUPPORT", + EAFNOSUPPORT => "EAFNOSUPPORT", + EADDRINUSE => "EADDRINUSE", + EADDRNOTAVAIL => "EADDRNOTAVAIL", + ENETDOWN => "ENETDOWN", + ENETUNREACH => "ENETUNREACH", + ENETRESET => "ENETRESET", + ECONNABORTED => "ECONNABORTED", + ECONNRESET => "ECONNRESET", + ENOBUFS => "ENOBUFS", + EISCONN => "EISCONN", + ENOTCONN => "ENOTCONN", + ESHUTDOWN => "ESHUTDOWN", + ETOOMANYREFS => "ETOOMANYREFS", + ETIMEDOUT => "ETIMEDOUT", + ECONNREFUSED => "ECONNREFUSED", + EHOSTDOWN => "EHOSTDOWN", + EHOSTUNREACH => "EHOSTUNREACH", + EALREADY => "EALREADY", + EINPROGRESS => "EINPROGRESS", + ESTALE => "ESTALE", + EUCLEAN => "EUCLEAN", + ENOTNAM => "ENOTNAM", + ENAVAIL => "ENAVAIL", + EISNAM => "EISNAM", + EREMOTEIO => "EREMOTEIO", + EDQUOT => "EDQUOT", + ENOMEDIUM => "ENOMEDIUM", + EMEDIUMTYPE => "EMEDIUMTYPE", + ECANCELED => "ECANCELED", + ENOKEY => "ENOKEY", + EKEYEXPIRED => "EKEYEXPIRED", + EKEYREVOKED => "EKEYREVOKED", + EKEYREJECTED => "EKEYREJECTED", + EOWNERDEAD => "EOWNERDEAD", + ENOTRECOVERABLE => "ENOTRECOVERABLE", + ERFKILL => "ERFKILL", + EHWPOISON => "EHWPOISON", + * => "[unknown errno]", // TODO: snprintf to add errno? + }; +}; + +export def EPERM: int = 1; +export def ENOENT: int = 2; +export def ESRCH: int = 3; +export def EINTR: int = 4; +export def EIO: int = 5; +export def ENXIO: int = 6; +export def E2BIG: int = 7; +export def ENOEXEC: int = 8; +export def EBADF: int = 9; +export def ECHILD: int = 10; +export def EAGAIN: int = 11; +export def ENOMEM: int = 12; +export def EACCES: int = 13; +export def EFAULT: int = 14; +export def ENOTBLK: int = 15; +export def EBUSY: int = 16; +export def EEXIST: int = 17; +export def EXDEV: int = 18; +export def ENODEV: int = 19; +export def ENOTDIR: int = 20; +export def EISDIR: int = 21; +export def EINVAL: int = 22; +export def ENFILE: int = 23; +export def EMFILE: int = 24; +export def ENOTTY: int = 25; +export def ETXTBSY: int = 26; +export def EFBIG: int = 27; +export def ENOSPC: int = 28; +export def ESPIPE: int = 29; +export def EROFS: int = 30; +export def EMLINK: int = 31; +export def EPIPE: int = 32; +export def EDOM: int = 33; +export def ERANGE: int = 34; +export def EDEADLK: int = 35; +export def ENAMETOOLONG: int = 36; +export def ENOLCK: int = 37; +export def ENOSYS: int = 38; +export def ENOTEMPTY: int = 39; +export def ELOOP: int = 40; +export def ENOMSG: int = 42; +export def EIDRM: int = 43; +export def ECHRNG: int = 44; +export def EL2NSYNC: int = 45; +export def EL3HLT: int = 46; +export def EL3RST: int = 47; +export def ELNRNG: int = 48; +export def EUNATCH: int = 49; +export def ENOCSI: int = 50; +export def EL2HLT: int = 51; +export def EBADE: int = 52; +export def EBADR: int = 53; +export def EXFULL: int = 54; +export def ENOANO: int = 55; +export def EBADRQC: int = 56; +export def EBADSLT: int = 57; +export def EBFONT: int = 59; +export def ENOSTR: int = 60; +export def ENODATA: int = 61; +export def ETIME: int = 62; +export def ENOSR: int = 63; +export def ENONET: int = 64; +export def ENOPKG: int = 65; +export def EREMOTE: int = 66; +export def ENOLINK: int = 67; +export def EADV: int = 68; +export def ESRMNT: int = 69; +export def ECOMM: int = 70; +export def EPROTO: int = 71; +export def EMULTIHOP: int = 72; +export def EDOTDOT: int = 73; +export def EBADMSG: int = 74; +export def EOVERFLOW: int = 75; +export def ENOTUNIQ: int = 76; +export def EBADFD: int = 77; +export def EREMCHG: int = 78; +export def ELIBACC: int = 79; +export def ELIBBAD: int = 80; +export def ELIBSCN: int = 81; +export def ELIBMAX: int = 82; +export def ELIBEXEC: int = 83; +export def EILSEQ: int = 84; +export def ERESTART: int = 85; +export def ESTRPIPE: int = 86; +export def EUSERS: int = 87; +export def ENOTSOCK: int = 88; +export def EDESTADDRREQ: int = 89; +export def EMSGSIZE: int = 90; +export def EPROTOTYPE: int = 91; +export def ENOPROTOOPT: int = 92; +export def EPROTONOSUPPORT: int = 93; +export def ESOCKTNOSUPPORT: int = 94; +export def EOPNOTSUPP: int = 95; +export def EPFNOSUPPORT: int = 96; +export def EAFNOSUPPORT: int = 97; +export def EADDRINUSE: int = 98; +export def EADDRNOTAVAIL: int = 99; +export def ENETDOWN: int = 100; +export def ENETUNREACH: int = 101; +export def ENETRESET: int = 102; +export def ECONNABORTED: int = 103; +export def ECONNRESET: int = 104; +export def ENOBUFS: int = 105; +export def EISCONN: int = 106; +export def ENOTCONN: int = 107; +export def ESHUTDOWN: int = 108; +export def ETOOMANYREFS: int = 109; +export def ETIMEDOUT: int = 110; +export def ECONNREFUSED: int = 111; +export def EHOSTDOWN: int = 112; +export def EHOSTUNREACH: int = 113; +export def EALREADY: int = 114; +export def EINPROGRESS: int = 115; +export def ESTALE: int = 116; +export def EUCLEAN: int = 117; +export def ENOTNAM: int = 118; +export def ENAVAIL: int = 119; +export def EISNAM: int = 120; +export def EREMOTEIO: int = 121; +export def EDQUOT: int = 122; +export def ENOMEDIUM: int = 123; +export def EMEDIUMTYPE: int = 124; +export def ECANCELED: int = 125; +export def ENOKEY: int = 126; +export def EKEYEXPIRED: int = 127; +export def EKEYREVOKED: int = 128; +export def EKEYREJECTED: int = 129; +export def EOWNERDEAD: int = 130; +export def ENOTRECOVERABLE: int = 131; +export def ERFKILL: int = 132; +export def EHWPOISON: int = 133; diff --git a/vendor/tree-sitter-hare/example/errors.ha b/vendor/tree-sitter-hare/example/errors.ha new file mode 100644 index 000000000..0e8d40a07 --- /dev/null +++ b/vendor/tree-sitter-hare/example/errors.ha @@ -0,0 +1,40 @@ +use bufio; +use fmt; +use hare::lex; +use hare::parse; +use io; +use os; +use strings; + +// TODO: Expand to more kinds of errors +fn printerr(err: parse::error) void = { + match (err) { + err: lex::syntax => printerr_syntax(err), + err: io::error => fmt::errorln(io::strerror(err)), + }; +}; + +fn printerr_syntax(err: lex::syntax) void = { + let location = err.0, details = err.1; + let file = os::open(location.path) as *io::stream; + defer io::close(file); + + let line = 1u; + for (line < location.line) { + let r = bufio::scanrune(file) as rune; + if (r == '\n') { + line += 1u; + }; + }; + + let line = bufio::scanline(file) as []u8; + defer free(line); + let line = strings::fromutf8(line); + fmt::errorfln("{}:{},{}: Syntax error: {}", + location.path, location.line, location.col, details); + fmt::errorln(line); + for (let i = 0u; i < location.col - 2; i += 1) { + fmt::error(" "); + }; + fmt::errorln("^--- here"); +}; diff --git a/vendor/tree-sitter-hare/example/exec+linux.ha b/vendor/tree-sitter-hare/example/exec+linux.ha new file mode 100644 index 000000000..a1b0d7a0c --- /dev/null +++ b/vendor/tree-sitter-hare/example/exec+linux.ha @@ -0,0 +1,83 @@ +use errors; +use rt; +use strings; +use os; + +// Forks the current process, returning the pid of the child (to the parent) and +// void (to the child), or an error. +export fn fork() (int | void | error) = match (rt::fork()) { + err: rt::errno => errors::errno(err), + i: (int | void) => i, +}; + +fn open(path: str) (platform_cmd | errors::opaque) = { + match (rt::access(path, rt::X_OK)) { + err: rt::errno => errors::errno(err), + b: bool => if (!b) { + return errors::errno(rt::EACCES); + }, + }; + // O_PATH is used because it allows us to use an executable for which we + // have execute permissions, but not read permissions. + return match (rt::open(path, rt::O_PATH, 0u)) { + fd: int => fd, + err: rt::errno => errors::errno(err), + }; +}; + +fn platform_finish(cmd: *command) void = rt::close(cmd.platform); + +fn platform_exec(cmd: *command) errors::opaque = { + // We don't worry about freeing the return values from strings::to_c + // because once we exec(2) our heap is fried anyway + let argv: []nullable *const char = alloc([], len(cmd.argv) + 1z); + for (let i = 0z; i < len(cmd.argv); i += 1z) { + append(argv, strings::to_c(cmd.argv[i])); + }; + append(argv, null); + + let envp: nullable *[*]nullable *const char = null; + if (len(cmd.env) != 0) { + let env: []nullable *const char = alloc([], len(cmd.env) + 1); + for (let i = 0z; i < len(cmd.env); i += 1) { + append(env, strings::to_c(cmd.env[i])); + }; + append(env, null); + envp = env: *[*]nullable *const char; + }; + + return errors::errno(rt::execveat(cmd.platform, strings::c_empty, + argv: *[*]nullable *const char, envp, rt::AT_EMPTY_PATH)); +}; + +fn platform_start(cmd: *command) (errors::opaque | process) = { + // TODO: Let the user configure clone more to their taste (e.g. SIGCHLD) + let pipe: [2]int = [0...]; + match (rt::pipe2(&pipe, rt::O_CLOEXEC)) { + err: rt::errno => return errors::errno(err), + void => void, + }; + + match (rt::clone(null, 0, null, null, 0)) { + err: rt::errno => return errors::errno(err), + pid: int => { + rt::close(pipe[1]); + let errno: int = 0; + return match (rt::read(pipe[0], &errno, size(int))) { + err: rt::errno => errors::errno(err), + n: size => switch (n) { + size(int) => errors::errno(errno), + * => abort("Unexpected rt::read result"), + 0 => pid, + }, + }; + }, + void => { + rt::close(pipe[0]); + let err = platform_exec(cmd); + let err = &err.data: *rt::errno; + rt::write(pipe[1], &err, size(int)); + rt::exit(1); + }, + }; +}; diff --git a/vendor/tree-sitter-hare/example/exit.ha b/vendor/tree-sitter-hare/example/exit.ha new file mode 100644 index 000000000..731b503c8 --- /dev/null +++ b/vendor/tree-sitter-hare/example/exit.ha @@ -0,0 +1,4 @@ +use rt; + +// Exit the program with the provided status code. +export @noreturn fn exit(status: int) void = rt::exit(status); diff --git a/vendor/tree-sitter-hare/example/expr.ha b/vendor/tree-sitter-hare/example/expr.ha new file mode 100644 index 000000000..1717fcd1b --- /dev/null +++ b/vendor/tree-sitter-hare/example/expr.ha @@ -0,0 +1,89 @@ +use io; +use fmt; +use hare::ast; + +// TODO +export fn expr( + out: *io::stream, + indent: size, + t: ast::expr +) (size | io::error) = { + return match (t) { + e: ast::access_expr => abort(), + e: ast::alloc_expr => abort(), + e: ast::append_expr => abort(), + e: ast::assert_expr => abort(), + e: ast::assign_expr => abort(), + e: ast::binarithm_expr => { + let z = expr(out, indent, *e.lvalue)?; + z += fmt::fprintf(out, " {} ", switch (e.op) { + ast::binarithm_op::BAND => "&", + ast::binarithm_op::BOR => "|", + ast::binarithm_op::DIV => "/", + ast::binarithm_op::GT => ">", + ast::binarithm_op::GTEQ => ">=", + ast::binarithm_op::LAND => "&&", + ast::binarithm_op::LEQUAL => "==", + ast::binarithm_op::LESS => "<", + ast::binarithm_op::LESSEQ => "<=", + ast::binarithm_op::LOR => "||", + ast::binarithm_op::LSHIFT => "<<", + ast::binarithm_op::LXOR => "^^", + ast::binarithm_op::MINUS => "-", + ast::binarithm_op::MODULO => "%", + ast::binarithm_op::NEQUAL => "!=", + ast::binarithm_op::PLUS => "+", + ast::binarithm_op::RSHIFT => ">>", + ast::binarithm_op::TIMES => "*", + ast::binarithm_op::BXOR => "^", + })?; + z += expr(out, indent, *e.rvalue)?; + z; + }, + e: []ast::binding_expr => abort(), + e: ast::break_expr => abort(), + e: ast::call_expr => abort(), + e: ast::cast_expr => { + let z = expr(out, indent, *e.value)?; + const op = switch (e.kind) { + ast::cast_kind::CAST => ": ", + ast::cast_kind::ASSERTION => " as ", + ast::cast_kind::TEST => " is ", + }; + z += fmt::fprintf(out, "{}", op)?; + z += _type(out, indent, *e._type)?; + z; + }, + e: ast::constant_expr => { + assert(e is void); + fmt::fprint(out, "void")?; + }, + e: ast::continue_expr => abort(), + e: ast::defer_expr => abort(), + e: ast::delete_expr => abort(), + e: ast::for_expr => abort(), + e: ast::free_expr => abort(), + e: ast::if_expr => abort(), + e: ast::list_expr => abort(), + e: ast::match_expr => abort(), + e: ast::len_expr => abort(), + e: ast::size_expr => abort(), + e: ast::offset_expr => abort(), + e: ast::propagate_expr => abort(), + e: ast::return_expr => abort(), + e: ast::slice_expr => abort(), + e: ast::switch_expr => abort(), + e: ast::unarithm_expr => { + let z = fmt::fprintf(out, "{}", switch (e.op) { + ast::unarithm_op::ADDR => "&", + ast::unarithm_op::BNOT => "~", + ast::unarithm_op::DEREF => "*", + ast::unarithm_op::LNOT => "!", + ast::unarithm_op::MINUS => "-", + ast::unarithm_op::PLUS => "+", + })?; + z += expr(out, indent, *e.operand)?; + z; + }, + }; +}; diff --git a/vendor/tree-sitter-hare/example/exprclass.ha b/vendor/tree-sitter-hare/example/exprclass.ha new file mode 100644 index 000000000..d210d054a --- /dev/null +++ b/vendor/tree-sitter-hare/example/exprclass.ha @@ -0,0 +1,40 @@ +use hare::ast; +use hare::lex::{btoken}; +use hare::lex; +use io; + +// Parses a complex-expression. +export fn complex_expression(lexer: *lex::lexer) (ast::expr | error) = { + // TODO: if, for, switch, match + return simple_expression(lexer); +}; + +// Parses a compound-expression. +export fn compound_expression(lexer: *lex::lexer) (ast::expr | error) = { + let tok = match (lex::lex(lexer)?) { + io::EOF => return syntaxerr(mkloc(lexer), + "Unexpected EOF, expected compound expression"), + t: (lex::token, lex::location) => t, + }; + + lex::unlex(lexer, tok); + let tok = match (tok.0) { + tok: btoken => tok, + * => return complex_expression(lexer), + }; + + return switch (tok) { + btoken::LBRACE => expression_list(lexer), + btoken::BREAK, btoken::CONTINUE, btoken::RETURN => + control_statement(lexer), + * => complex_expression(lexer), + }; +}; + +fn scope_expression(lexer: *lex::lexer) (ast::expr | error) = { + return simple_expression(lexer); // TODO +}; + +// Parses a simple-expression. +export fn simple_expression(lexer: *lex::lexer) (ast::expr | error) = + binarithm(lexer, void, 0); diff --git a/vendor/tree-sitter-hare/example/fdstream.ha b/vendor/tree-sitter-hare/example/fdstream.ha new file mode 100644 index 000000000..264c9a949 --- /dev/null +++ b/vendor/tree-sitter-hare/example/fdstream.ha @@ -0,0 +1,135 @@ +use errors; +use io; +use rt; +use strings; + +type fd_stream = struct { + stream: io::stream, + fd: int, +}; + +fn static_fdopen( + fd: int, name: str, mode: io::mode, stream: *fd_stream, +) *io::stream = { + *stream = fd_stream { + stream = io::stream { + name = name, + closer = &fd_close_static, + copier = &fd_copy, + seeker = &fd_seek, + ... + }, + fd = fd, + }; + if (mode & io::mode::READ == io::mode::READ) { + stream.stream.reader = &fd_read; + }; + if (mode & io::mode::WRITE == io::mode::WRITE) { + stream.stream.writer = &fd_write; + }; + return &stream.stream; +}; + +// Opens a Unix file descriptor as an io::stream. +export fn fdopen(fd: int, name: str, mode: io::mode) *io::stream = { + let stream = alloc(fd_stream { ... }); + static_fdopen(fd, strings::dup(name), mode, stream); + stream.stream.closer = &fd_close; + return &stream.stream; +}; + +fn is_fdstream(s: *io::stream) bool = { + return s.reader == &fd_read + || s.writer == &fd_write + || s.closer == &fd_close + || s.closer == &fd_close_static + || s.copier == &fd_copy; +}; + +// Returns the file descriptor for a given [io::stream]. If there is no fd +// associated with this stream, void is returned. +export fn streamfd(s: *io::stream) (int | void) = { + for (!is_fdstream(s)) { + s = match (io::source(s)) { + errors::unsupported => return, + s: *io::stream => s, + }; + }; + let stream = s: *fd_stream; + return stream.fd; +}; + +fn fd_read(s: *io::stream, buf: []u8) (size | io::EOF | io::error) = { + let stream = s: *fd_stream; + return match (rt::read(stream.fd, buf: *[*]u8, len(buf))) { + err: rt::errno => errors::errno(err), + n: size => switch (n) { + 0 => io::EOF, + * => n, + }, + }; +}; + +fn fd_write(s: *io::stream, buf: const []u8) (size | io::error) = { + let stream = s: *fd_stream; + return match (rt::write(stream.fd, buf: *const [*]u8, len(buf))) { + err: rt::errno => errors::errno(err), + n: size => n, + }; +}; + +fn fd_close(s: *io::stream) void = { + let stream = s: *fd_stream; + rt::close(stream.fd); + free(s.name); + free(stream); +}; + +fn fd_close_static(s: *io::stream) void = { + let stream = s: *fd_stream; + rt::close(stream.fd); + free(stream); +}; + +def SENDFILE_MAX: size = 2147479552z; + +fn fd_copy(to: *io::stream, from: *io::stream) (size | io::error) = { + if (!is_fdstream(from)) { + return errors::unsupported; + }; + + let to = to: *fd_stream, from = from: *fd_stream; + let sum = 0z; + for (true) { + let n = match (rt::sendfile(to.fd, from.fd, + null, SENDFILE_MAX)) { + err: rt::errno => switch (err) { + rt::EINVAL => { + if (sum == 0) { + return errors::unsupported; + }; + return errors::errno(err); + }, + * => return errors::errno(err), + }, + n: size => switch (n) { + 0 => return sum, + * => n, + }, + }; + sum += n; + }; + return sum; +}; + +fn fd_seek( + s: *io::stream, + off: io::off, + whence: io::whence, +) (io::off | io::error) = { + let stream = s: *fd_stream; + return match (rt::lseek(stream.fd, off: i64, whence: uint)) { + err: rt::errno => errors::errno(err), + n: i64 => n: io::off, + }; +}; diff --git a/vendor/tree-sitter-hare/example/fixed.ha b/vendor/tree-sitter-hare/example/fixed.ha new file mode 100644 index 000000000..ada891977 --- /dev/null +++ b/vendor/tree-sitter-hare/example/fixed.ha @@ -0,0 +1,62 @@ +use bytes; +use io; +use strings; + +type fixed_stream = struct { + stream: io::stream, + buf: []u8, +}; + +// Creates an [io::stream] for a fixed, caller-supplied buffer. Supports either +// read or write, but not both. The program aborts if writes would exceed the +// buffer's capacity. +export fn fixed(in: []u8, mode: io::mode) *io::stream = { + let s = alloc(fixed_stream { + stream = io::stream { + name = "", + ... + }, + buf = in, + }); + if (mode & io::mode::READ == io::mode::READ) { + assert(mode & io::mode::WRITE != io::mode::WRITE); + s.stream.reader = &fixed_read; + }; + if (mode & io::mode::WRITE == io::mode::WRITE) { + assert(mode & io::mode::READ != io::mode::READ); + s.stream.writer = &fixed_write; + }; + return &s.stream; +}; + +fn fixed_read(s: *io::stream, buf: []u8) (size | io::error | io::EOF) = { + let stream = s: *fixed_stream; + if (len(stream.buf) == 0) { + return io::EOF; + }; + const n = if (len(buf) > len(stream.buf)) len(stream.buf) else len(buf); + buf[..n] = stream.buf[..n]; + stream.buf = stream.buf[n..]; + return n; +}; + +fn fixed_write(s: *io::stream, buf: const []u8) (size | io::error) = { + let stream = s: *fixed_stream; + if (len(stream.buf) == 0) { + abort("bufio::fixed buffer exceeded"); + }; + const n = if (len(buf) > len(stream.buf)) len(stream.buf) else len(buf); + stream.buf[..n] = buf[..n]; + stream.buf = stream.buf[n..]; + return n; +}; + +@test fn fixed() void = { + // TODO: add a read test too + static let buf: [1024]u8 = [0...]; + let stream = fixed(buf, io::mode::WRITE); + let n = 0z; + n += io::write(stream, strings::toutf8("hello ")) as size; + n += io::write(stream, strings::toutf8("world")) as size; + assert(bytes::equal(buf[..n], strings::toutf8("hello world"))); +}; diff --git a/vendor/tree-sitter-hare/example/fmt.ha b/vendor/tree-sitter-hare/example/fmt.ha new file mode 100644 index 000000000..16ef5bc2c --- /dev/null +++ b/vendor/tree-sitter-hare/example/fmt.ha @@ -0,0 +1,432 @@ +// A format string consists of a string of literal characters, to be printed +// verbatim, and format sequences, which describe how to format arguments from +// a set of variadic parameters for printing. +// +// A format sequence is enclosed in curly braces '{}'. An empty sequence takes +// the next argument from the parameter list, in order. A specific parameter may +// be selected by indexing it from zero: '{0}', '{1}', and so on. To print '{', +// use '{{', and for '}', use '}}'. +// +// You may use a colon to add format modifiers; for example, '{:x}' will format +// an argument in hexadecimal, and '{3:-10}' will left-align the 3rd argument to +// at least 10 characters. +// +// The format modifiers takes the form of an optional flag character: +// +// 0: Numeric values are zero-padded up to the required width. +// -: The value shall be left-aligned, and spaces inserted on the right to meet +// the required width. '-' takes precedence over '0' if both are used. +// : (a space) insert a space before positive numbers, where '-' would be if it +// were negative. +// +: insert a '+' before positive numbers, where '-' would be if it were +// negative. '+' takes precedence over ' ' if both are used. +// +// Following the flag, an optional decimal number shall specify the minimum +// width of this field. If '0' or '-' were not given, the default behavior shall +// be to pad with spaces to achieve the necessary width. +// +// Following the width, an optional precision may be given as a decimal number +// following a '.' character. For integer types, this gives the minimum number +// of digits to include. For floating types, this gives the number of digits +// following the radix to include. +// +// Following the precision, an optional character controls the output format: +// +// x, X: print in lowercase or uppercase hexadecimal +// o, b: print in octal or binary +// +// TODO: Expand this with more format modifiers +use ascii; +use bufio; +use encoding::utf8; +use io; +use os; +use strconv; +use strings; +use types; + +// Tagged union of all types which are formattable. +export type formattable = + (...types::numeric | uintptr | str | rune | bool | nullable *void); + +// Formats text for printing and writes it to [os::stdout]. +export fn printf(fmt: str, args: formattable...) (io::error | size) = + fprintf(os::stdout, fmt, args...); + +// Formats text for printing and writes it to [os::stdout], followed by a line +// feed. +export fn printfln(fmt: str, args: formattable...) (io::error | size) = + fprintfln(os::stdout, fmt, args...); + +// Formats text for printing and writes it to [os::stderr]. +export fn errorf(fmt: str, args: formattable...) (io::error | size) = + fprintf(os::stderr, fmt, args...); + +// Formats text for printing and writes it to [os::stderr], followed by a line +// feed. +export fn errorfln(fmt: str, args: formattable...) (io::error | size) = + fprintfln(os::stderr, fmt, args...); + +// Formats text for printing and writes it into a heap-allocated string. The +// caller must free the return value. +export fn asprintf(fmt: str, args: formattable...) str = { + let buf = bufio::dynamic(io::mode::WRITE); + assert(fprintf(buf, fmt, args...) is size); + return strings::fromutf8_unsafe(bufio::finish(buf)); +}; + +// Formats text for printing and writes it into a caller supplied buffer. The +// returned string is borrowed from this buffer. +export fn bsprintf(buf: []u8, fmt: str, args: formattable...) str = { + let sink = bufio::fixed(buf, io::mode::WRITE); + let l = fprintf(sink, fmt, args...) as size; + return strings::fromutf8_unsafe(buf[..l]); +}; + +// Formats text for printing and writes it to [os::stderr], followed by a line +// feed, then exits the program with an error status. +export @noreturn fn fatal(fmt: str, args: formattable...) void = { + fprintfln(os::stderr, fmt, args...); + os::exit(1); +}; + +// Formats text for printing and writes it to an [io::stream], followed by a +// line feed. +export fn fprintfln( + s: *io::stream, + fmt: str, + args: formattable... +) (io::error | size) = { + return fprintf(s, fmt, args...)? + io::write(s, ['\n': u32: u8])?; +}; + +// Formats values for printing using the default format modifiers and writes +// them to [os::stdout] separated by spaces +export fn print(args: formattable...) (io::error | size) = + fprint(os::stdout, args...); + +// Formats values for printing using the default format modifiers and writes +// them to [os::stdout] separated by spaces and followed by a line feed +export fn println(args: formattable...) (io::error | size) = + fprintln(os::stdout, args...); + +// Formats values for printing using the default format modifiers and writes +// them to [os::stderr] separated by spaces +export fn error(args: formattable...) (io::error | size) = + fprint(os::stderr, args...); + +// Formats values for printing using the default format modifiers and writes +// them to [os::stderr] separated by spaces and followed by a line feed +export fn errorln(args: formattable...) (io::error | size) = + fprintln(os::stderr, args...); + +// Formats values for printing using the default format modifiers and writes +// them into a heap-allocated string separated by spaces. The caller must free +// the return value. +export fn asprint(args: formattable...) str = { + let buf = bufio::dynamic(io::mode::WRITE); + assert(fprint(buf, args...) is size); + return strings::fromutf8_unsafe(bufio::finish(buf)); +}; + +// Formats values for printing using the default format modifiers and writes +// them into a caller supplied buffer separated by spaces. The returned string +// is borrowed from this buffer. +export fn bsprint(buf: []u8, args: formattable...) str = { + let sink = bufio::fixed(buf, io::mode::WRITE); + assert(fprint(sink, args...) is size); + return strings::fromutf8_unsafe(buf); +}; + +// Formats values for printing using the default format modifiers and writes +// them to an [io::stream] separated by spaces and followed by a line feed +export fn fprintln(s: *io::stream, args: formattable...) (io::error | size) = { + return fprint(s, args...)? + io::write(s, ['\n': u32: u8])?; +}; + +// Formats values for printing using the default format modifiers and writes +// them to an [io::stream] separated by spaces +export fn fprint(s: *io::stream, args: formattable...) (io::error | size) = { + let mod = modifiers { base = strconv::base::DEC, ... }; + let n = 0z; + for (let i = 0z; i < len(args); i += 1) { + n += format(s, args[i], &mod)?; + if (i != len(args) - 1) { + n += io::write(s, [' ': u32: u8])?; + }; + }; + return n; +}; + +type negation = enum { + NONE, + SPACE, + PLUS, +}; + +type padding = enum { + ALIGN_RIGHT, + ALIGN_LEFT, + ZEROES, +}; + +type modifiers = struct { + padding: padding, + negation: negation, + width: uint, + precision: uint, + base: strconv::base, +}; + +type modflags = enum uint { + NONE = 0, + ZERO = 1 << 0, + MINUS = 1 << 1, + SPACE = 1 << 2, + PLUS = 1 << 3, +}; + +// Formats text for printing and writes it to an [io::stream]. +export fn fprintf( + s: *io::stream, + fmt: str, + args: formattable... +) (io::error | size) = { + let n = 0z, i = 0z; + let iter = strings::iter(fmt); + for (true) { + let r: rune = match (strings::next(&iter)) { + void => break, + r: rune => r, + }; + + if (r == '{') { + r = match (strings::next(&iter)) { + void => abort("Invalid format string (unterminated '{')"), + r: rune => r, + }; + + const arg = if (r == '{') { + n += io::write(s, utf8::encoderune('{'))?; + continue; + } else if (ascii::isdigit(r)) { + strings::push(&iter, r); + args[scan_uint(&iter)]; + } else { + strings::push(&iter, r); + i += 1; + args[i - 1]; + }; + + let mod = modifiers { base = strconv::base::DEC, ... }; + r = match (strings::next(&iter)) { + void => abort("Invalid format string (unterminated '{')"), + r: rune => r, + }; + switch (r) { + ':' => scan_modifiers(&iter, &mod), + '}' => void, + * => abort("Invalid format string"), + }; + + n += format(s, arg, &mod)?; + } else if (r == '}') { + match (strings::next(&iter)) { + void => abort("Invalid format string (hanging '}')"), + r: rune => assert(r == '}', "Invalid format string (hanging '}')"), + }; + + n += io::write(s, utf8::encoderune('}'))?; + } else { + n += io::write(s, utf8::encoderune(r))?; + }; + }; + + return n; +}; + +fn format(out: *io::stream, arg: formattable, mod: *modifiers) (size | io::error) = { + let z = format_raw(io::empty, arg, mod)?; + + let pad: []u8 = []; + if (z < mod.width: size) { + pad = utf8::encoderune(switch (mod.padding) { + padding::ZEROES => '0', + * => ' ', + }); + }; + + if (mod.padding == padding::ALIGN_LEFT) { + format_raw(out, arg, mod); + }; + + for (z < mod.width: size) { + z += io::write(out, pad)?; + }; + + if (mod.padding != padding::ALIGN_LEFT) { + format_raw(out, arg, mod); + }; + + return z; +}; + +fn format_raw( + out: *io::stream, + arg: formattable, + mod: *modifiers, +) (size | io::error) = match (arg) { + s: str => io::write(out, strings::toutf8(s)), + r: rune => io::write(out, utf8::encoderune(r)), + b: bool => io::write(out, strings::toutf8(if (b) "true" else "false")), + n: types::numeric => { + let s = strconv::numerictosb(n, mod.base); + io::write(out, strings::toutf8(s)); + }, + p: uintptr => { + let s = strconv::uptrtosb(p, mod.base); + io::write(out, strings::toutf8(s)); + }, + v: nullable *void => match (v) { + v: *void => { + let s = strconv::uptrtosb(v: uintptr, + strconv::base::HEX_LOWER); + let n = io::write(out, strings::toutf8("0x"))?; + n += io::write(out, strings::toutf8(s))?; + n; + }, + null => format(out, "(null)", mod), + }, +}; + + +fn scan_uint(iter: *strings::iterator) uint = { + let num: []u8 = []; + defer free(num); + for (true) { + let r = match (strings::next(iter)) { + void => abort("Invalid format string (unterminated '{')"), + r: rune => r, + }; + + if (ascii::isdigit(r)) { + append(num, r: u32: u8); + } else { + strings::push(iter, r); + match (strconv::stou(strings::fromutf8(num))) { + (strconv::invalid | strconv::overflow) => + abort("Invalid format string (invalid index)"), + u: uint => return u, + }; + }; + }; + abort("unreachable"); +}; + +fn scan_modifier_flags(iter: *strings::iterator, mod: *modifiers) void = { + let flags = modflags::NONE; + + for (true) { + let r = match (strings::next(iter)) { + void => abort("Invalid format string (unterminated '{')"), + r: rune => r, + }; + + switch (r) { + '0' => flags |= modflags::ZERO, + '-' => flags |= modflags::MINUS, + ' ' => flags |= modflags::SPACE, + '+' => flags |= modflags::PLUS, + * => { + strings::push(iter, r); + break; + }, + }; + }; + + mod.padding = if (flags & modflags::MINUS != 0) + padding::ALIGN_LEFT + else if (flags & modflags::ZERO != 0) + padding::ZEROES + else + padding::ALIGN_RIGHT; + + mod.negation = if (flags & modflags::PLUS != 0) + negation::PLUS + else if (flags & modflags::SPACE != 0) + negation::SPACE + else + negation::NONE; +}; + +fn scan_modifier_width(iter: *strings::iterator, mod: *modifiers) void = { + let r = match (strings::next(iter)) { + void => abort("Invalid format string (unterminated '{')"), + r: rune => r, + }; + + let is_digit = ascii::isdigit(r); + strings::push(iter, r); + + if (is_digit) { + mod.width = scan_uint(iter); + }; +}; + +fn scan_modifier_precision(iter: *strings::iterator, mod: *modifiers) void = { + let r = match (strings::next(iter)) { + void => abort("Invalid format string (unterminated '{')"), + r: rune => r, + }; + + if (r == '.') { + mod.precision = scan_uint(iter); + } else { + strings::push(iter, r); + }; +}; + +fn scan_modifier_base(iter: *strings::iterator, mod: *modifiers) void = { + let r = match (strings::next(iter)) { + void => abort("Invalid format string (unterminated '{')"), + r: rune => r, + }; + + switch (r) { + 'x' => mod.base = strconv::base::HEX_LOWER, + 'X' => mod.base = strconv::base::HEX_UPPER, + 'o' => mod.base = strconv::base::OCT, + 'b' => mod.base = strconv::base::BIN, + * => strings::push(iter, r), + }; +}; + +fn scan_modifiers(iter: *strings::iterator, mod: *modifiers) void = { + scan_modifier_flags(iter, mod); + scan_modifier_width(iter, mod); + scan_modifier_precision(iter, mod); + scan_modifier_base(iter, mod); + + // eat '}' + let terminated = match (strings::next(iter)) { + void => false, + r: rune => r == '}', + }; + assert(terminated, "Invalid format string (unterminated '{')"); +}; + +@test fn fmt() void = { + let buf: [1024]u8 = [0...]; + assert(bsprintf(buf, "hello world") == "hello world"); + assert(bsprintf(buf, "{} {}", "hello", "world") == "hello world"); + assert(bsprintf(buf, "{0} {1}", "hello", "world") == "hello world"); + assert(bsprintf(buf, "{0} {0}", "hello", "world") == "hello hello"); + assert(bsprintf(buf, "{1} {0} {1}", "hello", "world") == "world hello world"); + assert(bsprintf(buf, "x: {:08x}", 0xBEEF) == "x: 0000beef"); + assert(bsprintf(buf, "x: {:8X}", 0xBEEF) == "x: BEEF"); + assert(bsprintf(buf, "x: {:-8X}", 0xBEEF) == "x: BEEF "); + assert(bsprintf(buf, "x: {:o}", 0o755) == "x: 755"); + assert(bsprintf(buf, "x: {:b}", 0b11011) == "x: 11011"); + assert(bsprintf(buf, "{} {} {} {}", true, false, null, 'x') + == "true false (null) x"); +}; diff --git a/vendor/tree-sitter-hare/example/fnv.ha b/vendor/tree-sitter-hare/example/fnv.ha new file mode 100644 index 000000000..9fcae7599 --- /dev/null +++ b/vendor/tree-sitter-hare/example/fnv.ha @@ -0,0 +1,179 @@ +// Implements the Fowler–Noll–Vo (FNV) hash function. This hash is recommended +// for hash map keys and similar applications. It is a non-cryptographic hash. +use endian; +use hash; +use io; +use strings; + +def prime32: u32 = 16777619; +def prime64: u64 = 1099511628211; +def basis32: u32 = 2166136261; +def basis64: u64 = 14695981039346656037; + +type state32 = struct { + hash: hash::hash, + v: u32, +}; + +type state64 = struct { + hash: hash::hash, + v: u64, +}; + +// Creates a [hash::hash] which computes the FNV-1 32-bit hash function. +// +// Unless you have a reason to use this, [fnv32a] is recommended instead. +export fn fnv32() *hash::hash = alloc(state32 { + hash = hash::hash { + stream = io::stream { + writer = &fnv32_write, + closer = &fnv_close, + }, + sum = &fnv32_sum, + reset = &fnv32_reset, + sz = 4, + }, + v = basis32, +}): *hash::hash; + +// Creates a [hash::hash] which computes the FNV-1a 32-bit hash function. +export fn fnv32a() *hash::hash = alloc(state32 { + hash = hash::hash { + stream = io::stream { + writer = &fnv32a_write, + closer = &fnv_close, + }, + sum = &fnv32_sum, + reset = &fnv32_reset, + sz = 4, + }, + v = basis32, +}): *hash::hash; + +// Creates a [hash::hash] which computes the FNV-1 64-bit hash function. +// +// Unless you have a reason to use this, [fnv64a] is recommended instead. +export fn fnv64() *hash::hash = alloc(state64 { + hash = hash::hash { + stream = io::stream { + writer = &fnv64_write, + closer = &fnv_close, + }, + sum = &fnv64_sum, + reset = &fnv64_reset, + sz = 8, + }, + v = basis64, +}): *hash::hash; + +// Creates a [hash::hash] which computes the FNV-1a 64-bit hash function. +export fn fnv64a() *hash::hash = alloc(state64 { + hash = hash::hash { + stream = io::stream { + writer = &fnv64a_write, + closer = &fnv_close, + }, + sum = &fnv64_sum, + reset = &fnv64_reset, + sz = 8, + }, + v = basis64, +}): *hash::hash; + +fn fnv_close(s: *io::stream) void = free(s); + +fn fnv32_write(s: *io::stream, buf: const []u8) (size | io::error) = { + let s = s: *state32; + for (let i = 0z; i < len(buf); i += 1) { + s.v *= prime32; + s.v ^= buf[i]; + }; + return len(buf); +}; + +fn fnv32a_write(s: *io::stream, buf: const []u8) (size | io::error) = { + let s = s: *state32; + for (let i = 0z; i < len(buf); i += 1) { + s.v ^= buf[i]; + s.v *= prime32; + }; + return len(buf); +}; + +fn fnv32_reset(h: *hash::hash) void = { + let h = h: *state32; + h.v = basis32; +}; + +fn fnv32_sum(h: *hash::hash) []u8 = { + let h = h: *state32; + let buf: [4]u8 = [0...]; + endian::host.putu32(buf, h.v); + return alloc(buf); +}; + +fn fnv64_write(s: *io::stream, buf: const []u8) (size | io::error) = { + let s = s: *state64; + for (let i = 0z; i < len(buf); i += 1) { + s.v *= prime64; + s.v ^= buf[i]; + }; + return len(buf); +}; + +fn fnv64a_write(s: *io::stream, buf: const []u8) (size | io::error) = { + let s = s: *state64; + for (let i = 0z; i < len(buf); i += 1) { + s.v ^= buf[i]; + s.v *= prime64; + }; + return len(buf); +}; + +fn fnv64_reset(h: *hash::hash) void = { + let h = h: *state64; + h.v = basis64; +}; + +fn fnv64_sum(h: *hash::hash) []u8 = { + let h = h: *state64; + let buf: [8]u8 = [0...]; + endian::host.putu64(buf, h.v); + return alloc(buf); +}; + +// Returns the sum of a 32-bit FNV hash. +export fn sum32(h: *hash::hash) u32 = { + assert(h.reset == &fnv32_reset); + let h = h: *state32; + return h.v; +}; + +// Returns the sum of a 64-bit FNV hash. +export fn sum64(h: *hash::hash) u64 = { + assert(h.reset == &fnv64_reset); + let h = h: *state64; + return h.v; +}; + +@test fn fnv32() void = { + // TODO: Expand these tests + // I am too tired + const vectors: [_](str, u32) = [ + ("", 2166136261), + ("hello world", 1418570095), + ("Hare is a cool language", 2663852071), + ("'UNIX was not designed to stop its users from doing stupid things, as that would also stop them from doing clever things' - Doug Gwyn", 1203174417), + ("'Life is too short to run proprietary software' - Bdale Garbee", 493463614), + ("'The central enemy of reliability is complexity.' - Geer et al", 3263526736), + ("'A language that doesn’t have everything is actually easier to program in than some that do.' - Dennis Ritchie", 3069348265), + ]; + let hash = fnv32(); + defer hash::close(hash); + for (let i = 0z; i < len(vectors); i += 1) { + let vec = vectors[i]; + hash::reset(hash); + hash::write(hash, strings::toutf8(vec.0)); + assert(sum32(hash) == vec.1); + }; +}; diff --git a/vendor/tree-sitter-hare/example/fs.ha b/vendor/tree-sitter-hare/example/fs.ha new file mode 100644 index 000000000..b2448231f --- /dev/null +++ b/vendor/tree-sitter-hare/example/fs.ha @@ -0,0 +1,177 @@ +use errors; +use io; +use path; + +// Closes a filesystem. The fs cannot be used after this function is called. +export fn close(fs: *fs) void = { + match (fs.close) { + null => void, + f: *closefunc => f(fs), + }; +}; + +// Opens a file. If no flags are provided, the default read/write mode is +// RDONLY. +export fn open(fs: *fs, path: str, flags: flags...) (*io::stream | error) = { + return match (fs.open) { + null => errors::unsupported, + f: *openfunc => f(fs, path, flags...), + }; +}; + +// Creates a new file and opens it for writing. If no flags are provided, the +// default read/write mode is WRONLY. +// +// Only the permission bits of the mode are used. If other bits are set, they +// are discarded. +export fn create( + fs: *fs, + path: str, + mode: mode, + flags: flags... +) (*io::stream | error) = { + mode = mode & 0o777; + return match (fs.create) { + null => errors::unsupported, + f: *createfunc => f(fs, path, mode, flags...), + }; +}; + +// Removes a file. +export fn remove(fs: *fs, path: str) (void | error) = { + return match (fs.remove) { + null => errors::unsupported, + f: *removefunc => f(fs, path), + }; +}; + +// Returns an iterator for a path, which yields the contents of a directory. +// Pass empty string to yield from the root. The order in which entries are +// returned is undefined. +export fn iter(fs: *fs, path: str) (*iterator | error) = { + return match (fs.iter) { + null => errors::unsupported, + f: *iterfunc => f(fs, path), + }; +}; + +// Obtains information about a file or directory. If the target is a symlink, +// information is returned about the link, not its target. +export fn stat(fs: *fs, path: str) (filestat | error) = { + return match (fs.stat) { + null => errors::unsupported, + f: *statfunc => f(fs, path), + }; +}; + +// Opens a new filesystem for a subdirectory. The subdirectory must be closed +// separately from the parent filesystem, and its lifetime can outlive that of +// its parent. +export fn subdir(fs: *fs, path: str) (*fs | error) = { + return match (fs.subdir) { + null => errors::unsupported, + f: *subdirfunc => f(fs, path), + }; +}; + +// Creates a directory. +export fn mkdir(fs: *fs, path: str) (void | error) = { + return match (fs.mkdir) { + null => errors::unsupported, + f: *mkdirfunc => f(fs, path), + }; +}; + +// Makes a directory, and all non-extant directories in its path. +export fn mkdirs(fs: *fs, path: str) (void | error) = { + let parent = path::dirname(path); + if (path != parent) { + match (mkdirs(fs, parent)) { + errors::exists => void, + err: error => return err, + void => void, + }; + }; + return mkdir(fs, path); +}; + +// Removes a directory. The target directory must be empty; see [rmdirall] to +// remove its contents as well. +export fn rmdir(fs: *fs, path: str) (void | error) = { + if (path == "") { + return errors::invalid; + }; + return match (fs.rmdir) { + null => errors::unsupported, + f: *rmdirfunc => f(fs, path), + }; +}; + +// Removes a directory, and anything in it. +export fn rmdirall(fs: *fs, path: str) (void | error) = { + let it = iter(fs, path)?; + for (true) match (next(it)) { + ent: dirent => { + if (ent.name == "." || ent.name == "..") { + continue; + }; + let p = path::join(path, ent.name); + defer free(p); + switch (ent.ftype) { + mode::DIR => rmdirall(fs, p)?, + * => remove(fs, p)?, + }; + }, + void => break, + }; + if (path != "") { + return rmdir(fs, path); + }; +}; + +// Creates a directory and returns a subdir for it. Some filesystems support +// doing this operation atomically, but if not, a fallback is used. +export fn mksubdir(fs: *fs, path: str) (*fs | error) = { + return match (fs.mksubdir) { + null => { + mkdir(fs, path)?; + subdir(fs, path); + }, + f: *mksubdirfunc => f(fs, path), + }; +}; + +// Changes mode flags on a file or directory. Type bits are discared. +export fn chmod(fs: *fs, path: str, mode: mode) (void | error) = { + mode &= 0o755; + + return match (fs.chmod) { + f: *chmodfunc => f(fs, path, mode), + null => abort(), + }; +}; + +// Changes ownership of a file. +export fn chown(fs: *fs, path: str, uid: uint, gid: uint) (void | error) = { + return match (fs.chown) { + f: *chownfunc => f(fs, path, uid, gid), + null => abort(), + }; +}; + +// Resolves a path to its absolute, normalized value. This consoldates ./ and +// ../ sequences, roots the path, and returns a new path. The caller must free +// the return value. +export fn resolve(fs: *fs, path: str) str = { + match (fs.resolve) { + f: *resolvefunc => return f(fs, path), + null => void, + }; + abort(); // TODO +}; + +// Returns the next directory entry from an interator, or void if none remain. +// It is a programming error to call this again after it has returned void. The +// file stat returned may only have the type bits set on the file mode; callers +// should call [fs::stat] to obtain the detailed file mode. +export fn next(iter: *iterator) (dirent | void) = iter.next(iter); diff --git a/vendor/tree-sitter-hare/example/ftos.ha b/vendor/tree-sitter-hare/example/ftos.ha new file mode 100644 index 000000000..232510e99 --- /dev/null +++ b/vendor/tree-sitter-hare/example/ftos.ha @@ -0,0 +1,506 @@ +use types; + +fn f64bits(a: f64) u64 = *(&a: *u64); + +type r128 = struct { + hi: u64, + lo: u64, +}; + +// TODO: use 128-bit integers when implemented +fn u128mul(a: u64, b: u64) r128 = { + const a0 = a: u32: u64, a1 = a >> 32; + const b0 = b: u32: u64, b1 = b >> 32; + const p00 = a0 * b0, p01 = a0 * b1, p10 = a1 * b0, p11 = a1 * b1; + const p00_lo = p00: u32: u64, p00_hi = p00 >> 32; + const mid1 = p10 + p00_hi; + const mid1_lo = mid1: u32: u64, mid1_hi = mid1 >> 32; + const mid2 = p01 + mid1_lo; + const mid2_lo = mid2: u32: u64, mid2_hi = mid2 >> 32; + const r_hi = p11 + mid1_hi + mid2_hi; + const r_lo = (mid2_lo << 32) | p00_lo; + return r128 { hi = r_hi, lo = r_lo }; +}; + +// TODO: Same as above +fn u128rshift(lo: u64, hi: u64, s: u32) u64 = { + assert(0 <= s); + assert(s <= 64); + return (hi << (64 - s)) | (lo >> s); +}; + +fn pow5fac(value: u64) u32 = { + const m_inv_5: u64 = 14757395258967641293; // 5 * m_inv_5 = 1 (mod 2^64) + const n_div_5: u64 = 3689348814741910323; + let count: u32 = 0; + for (true) { + assert(value != 0); + value *= m_inv_5; + if (value > n_div_5) break; + count += 1; + }; + return count; +}; + +fn ibool(b: bool) u8 = if (b) 1 else 0; + +fn pow5multiple(v: u64, p: u32) bool = pow5fac(v) >= p; + +fn pow2multiple(v: u64, p: u32) bool = { + assert(v > 0); + assert(p < 64); + return (v & ((1u64 << p) - 1)) == 0; +}; + +fn mulshift64(m: u64, mul: (u64, u64), j: u32) u64 = { + // m is maximum 55 bits + let r0 = u128mul(m, mul.0), r1 = u128mul(m, mul.1); + const sum = r1.lo + r0.hi; + r1.hi += ibool(sum < r0.hi); + return u128rshift(sum, r1.hi, j - 64); +}; + +fn mulshiftall64(m: u64, mul: (u64, u64), j: i32, mm_shift: u32) (u64, u64, u64) = { + m <<= 1; + const r0 = u128mul(m, mul.0), r1 = u128mul(m, mul.1); + let lo = r0.lo, tmp = r0.hi, mid = r1.lo, hi = r1.hi; + hi += ibool(mid < tmp); + const lo2 = lo + mul.0; + const mid2 = mid + mul.1 + ibool(lo2 < lo); + const hi2 = hi + ibool(mid2 < mid); + const v_plus = u128rshift(mid2, hi2, (j - 64 - 1): u32); + const v_minus = if (mm_shift == 1) { + const lo3 = lo - mul.0; + const mid3 = mid - mul.1 - ibool(lo3 > lo); + const hi3 = hi - ibool(mid3 > mid); + u128rshift(mid3, hi3, (j - 64 - 1): u32); + } else { + const lo3 = lo + lo; + const mid3 = mid + mid + ibool(lo3 < lo); + const hi3 = hi + hi + ibool(mid3 < mid); + const lo4 = lo3 - mul.0; + const mid4 = mid3 - mul.1 - ibool(lo4 > lo3); + const hi4 = hi3 - ibool(mid4 > mid3); + u128rshift(mid4, hi4, (j - 64): u32); + }; + const v_rounded = u128rshift(mid, hi, (j - 64 - 1): u32); + return (v_plus, v_rounded, v_minus); +}; + +fn log2pow5(e: u32) i32 = { + assert(e <= 3528); + return ((e * 1217359) >> 19): i32; +}; + +fn ceil_log2pow5(e: u32) i32 = log2pow5(e) + 1; + +fn pow5bits(e: u32) i32 = ceil_log2pow5(e); + +fn log10pow2(e: u32) u32 = { + assert(e <= 1650); + return ((e * 78913) >> 18); +}; + +fn log10pow5(e: u32) u32 = { + assert(e <= 2620); + return ((e * 732923) >> 20); +}; + +def F64_POW5_INV_BITCOUNT: u8 = 125; +def F64_POW5_BITCOUNT: u8 = 125; + +const F64_POW5_INV_SPLIT2: [15][2]u64 = [ + [1, 2305843009213693952], + [5955668970331000884, 1784059615882449851], + [8982663654677661702, 1380349269358112757], + [7286864317269821294, 2135987035920910082], + [7005857020398200553, 1652639921975621497], + [17965325103354776697, 1278668206209430417], + [8928596168509315048, 1978643211784836272], + [10075671573058298858, 1530901034580419511], + [597001226353042382, 1184477304306571148], + [1527430471115325346, 1832889850782397517], + [12533209867169019542, 1418129833677084982], + [5577825024675947042, 2194449627517475473], + [11006974540203867551, 1697873161311732311], + [10313493231639821582, 1313665730009899186], + [12701016819766672773, 2032799256770390445], +]; + +const POW5_INV_OFFSETS: [19]u32 = [ + 0x54544554, 0x04055545, 0x10041000, 0x00400414, 0x40010000, 0x41155555, + 0x00000454, 0x00010044, 0x40000000, 0x44000041, 0x50454450, 0x55550054, + 0x51655554, 0x40004000, 0x01000001, 0x00010500, 0x51515411, 0x05555554, + 0x00000000 +]; + +const F64_POW5_SPLIT2: [13][2]u64 = [ + [0, 1152921504606846976], + [0, 1490116119384765625], + [1032610780636961552, 1925929944387235853], + [7910200175544436838, 1244603055572228341], + [16941905809032713930, 1608611746708759036], + [13024893955298202172, 2079081953128979843], + [6607496772837067824, 1343575221513417750], + [17332926989895652603, 1736530273035216783], + [13037379183483547984, 2244412773384604712], + [1605989338741628675, 1450417759929778918], + [9630225068416591280, 1874621017369538693], + [665883850346957067, 1211445438634777304], + [14931890668723713708, 1565756531257009982] +]; + +const POW5_OFFSETS: [21]u32 = [ + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x40000000, 0x59695995, + 0x55545555, 0x56555515, 0x41150504, 0x40555410, 0x44555145, 0x44504540, + 0x45555550, 0x40004000, 0x96440440, 0x55565565, 0x54454045, 0x40154151, + 0x55559155, 0x51405555, 0x00000105 +]; + +def POW5_TABLE_SIZE: u8 = 26; + +const POW5_TABLE: [POW5_TABLE_SIZE]u64 = [ + 1u64, 5u64, 25u64, 125u64, 625u64, 3125u64, 15625u64, 78125u64, + 390625u64, 1953125u64, 9765625u64, 48828125u64, 244140625u64, + 1220703125u64, 6103515625u64, 30517578125u64, 152587890625u64, + 762939453125u64, 3814697265625u64, 19073486328125u64, 95367431640625u64, + 476837158203125u64, 2384185791015625u64, 11920928955078125u64, + 59604644775390625u64, 298023223876953125u64 //, 1490116119384765625u64 +]; + +fn f64computeinvpow5(i: u32) (u64, u64) = { + const base = ((i + POW5_TABLE_SIZE - 1) / POW5_TABLE_SIZE): u32; + const base2 = base * POW5_TABLE_SIZE; + const mul = F64_POW5_INV_SPLIT2[base]; + const off = base2 - i; + if (off == 0) { + return (mul[0], mul[1]); + }; + const m = POW5_TABLE[off]; + const r1 = u128mul(m, mul[1]), r0 = u128mul(m, mul[0] - 1); + let high1 = r1.hi, low1 = r1.lo, high0 = r0.hi, low0 = r0.lo; + const sum = high0 + low1; + if (sum < high0) { + high1 += 1; + }; + const delta = (pow5bits(base2) - pow5bits(i)): u32; + const res0 = u128rshift(low0, sum, delta) + 1 + + ((POW5_INV_OFFSETS[i / 16] >> ((i % 16) << 1)) & 3); + const res1 = u128rshift(sum, high1, delta); + return (res0, res1); +}; + +fn f64computepow5(i: u32) (u64, u64) = { + const base = i / POW5_TABLE_SIZE, base2 = base * POW5_TABLE_SIZE; + const mul = F64_POW5_SPLIT2[base]; + const off = i - base2; + if (off == 0) { + return (mul[0], mul[1]); + }; + const m = POW5_TABLE[off]; + const r1 = u128mul(m, mul[1]), r0 = u128mul(m, mul[0]); + let high1 = r1.hi, low1 = r1.lo, high0 = r0.hi, low0 = r0.lo; + const sum = high0 + low1; + if (sum < high0) { + high1 += 1; + }; + const delta = (pow5bits(i) - pow5bits(base2)): u32; + const res0 = u128rshift(low0, sum, delta) + + ((POW5_OFFSETS[i / 16] >> ((i % 16) << 1)) & 3); + const res1 = u128rshift(sum, high1, delta); + return (res0, res1); +}; + +type decf64 = struct { + mantissa: u64, + exponent: i32, +}; + +def F64_MANTISSA_BITS: u64 = 52; +def F64_EXPONENT_BITS: u64 = 11; +def F64_EXPONENT_BIAS: u16 = 1023; + +fn declen(n: u64) u8 = { + assert(n <= 1e17); + return if (n >= 1e17) 18 + else if (n >= 1e16) 17 + else if (n >= 1e15) 16 + else if (n >= 1e14) 15 + else if (n >= 1e13) 14 + else if (n >= 1e12) 13 + else if (n >= 1e11) 12 + else if (n >= 1e10) 11 + else if (n >= 1e9) 10 + else if (n >= 1e8) 9 + else if (n >= 1e7) 8 + else if (n >= 1e6) 7 + else if (n >= 1e5) 6 + else if (n >= 1e4) 5 + else if (n >= 1e3) 4 + else if (n >= 100) 3 + else if (n >= 10) 2 + else 1; +}; + +fn bintodec(mantissa: u64, exponent: u32) decf64 = { + let e2: i32 = 0, m2: u64 = 0; + if (exponent == 0) { + e2 = 1 - (F64_EXPONENT_BIAS + F64_MANTISSA_BITS): i32 - 2; + m2 = mantissa; + } else { + e2 = (exponent: i32) - (F64_EXPONENT_BIAS + F64_MANTISSA_BITS): i32 - 2; + m2 = (1u64 << F64_MANTISSA_BITS) | mantissa; + }; + const even = (m2 & 1) == 0, accept_bounds = even; + const mv = 4 * m2; + const mm_shift: u32 = ibool(mantissa != 0 || exponent <= 1); + let vp: u64 = 0, vr: u64 = 0, vm: u64 = 0; + let e10: i32 = 0; + let vm_trailing_zeros = false, vr_trailing_zeros = false; + if (e2 >= 0) { + const q = log10pow2(e2: u32) - ibool(e2 > 3); + e10 = q: i32; + const k = F64_POW5_INV_BITCOUNT: i32 + pow5bits(q) - 1; + const i = -e2 + (q: i32) + k; + let pow5 = f64computeinvpow5(q); + const res = mulshiftall64(m2, pow5, i, mm_shift); + vp = res.0; vr = res.1; vm = res.2; + if (q <= 21) { + if ((mv - 5 * (mv / 5)) == 0) { + vr_trailing_zeros = pow5multiple(mv, q); + } else if (accept_bounds) { + vm_trailing_zeros = pow5multiple(mv - 1 - mm_shift, q); + } else { + vp -= ibool(pow5multiple(mv + 2, q)); + }; + }; + } else { + const q = log10pow5((-e2): u32) - ibool(-e2 > 1); + e10 = e2 + (q: i32); + const i = -e2 - (q: i32); + const k = pow5bits(i: u32) - F64_POW5_BITCOUNT: i32; + const j = (q: i32) - k; + let pow5 = f64computepow5(i: u32); + const res = mulshiftall64(m2, pow5, j, mm_shift); + vp = res.0; vr = res.1; vm = res.2; + if (q <= 1) { + vr_trailing_zeros = true; + if (accept_bounds) { + vm_trailing_zeros = mm_shift == 1; + } else { + vp -= 1; + }; + } else if (q < 63) { + vr_trailing_zeros = pow2multiple(mv, q); + }; + }; + let removed: i32 = 0, last_removed_digit: u8 = 0; + let output: u64 = 0; + if (vm_trailing_zeros || vr_trailing_zeros) { + for (true) { + const vpby10 = vp / 10, vmby10 = vm / 10; + if (vpby10 <= vmby10) break; + const vmmod10 = (vm: u32) - 10 * (vmby10: u32); + const vrby10 = vr / 10; + const vrmod10 = (vr: u32) - 10 * (vrby10: u32); + vm_trailing_zeros = vm_trailing_zeros && (vmmod10 == 0); + vr_trailing_zeros = vr_trailing_zeros && + (last_removed_digit == 0); + last_removed_digit = vrmod10: u8; + vr = vrby10; vp = vpby10; vm = vmby10; + removed += 1; + }; + if (vm_trailing_zeros) { + for (true) { + const vmby10 = vm / 10; + const vmmod10 = (vm: u32) - 10 * (vmby10: u32); + if (vmmod10 != 0) break; + const vpby10 = vp / 10, vrby10 = vr / 10; + const vrmod10 = (vr: u32) - 10 * (vrby10: u32); + vr_trailing_zeros = vr_trailing_zeros && + (last_removed_digit == 0); + last_removed_digit = vrmod10: u8; + vr = vrby10; vp = vpby10; vm = vmby10; + removed += 1; + }; + }; + if (vr_trailing_zeros && last_removed_digit == 5 && (vr & 1 == 0)) { + // round to even + last_removed_digit = 4; + }; + output = vr + ibool((vr == vm && + (!accept_bounds || !vm_trailing_zeros)) || last_removed_digit >= 5); + } else { + let round_up = false; + const vpby100 = vp / 100, vmby100 = vm / 100; + if (vpby100 > vmby100) { + const vrby100 = vr / 100; + const vrmod100 = (vr: u32) - 100 * (vrby100: u32); + round_up = vrmod100 >= 50; + vr = vrby100; vp = vpby100; vm = vmby100; + removed += 2; + }; + for (true) { + const vmby10 = vm / 10, vpby10 = vp / 10; + if (vpby10 <= vmby10) break; + const vrby10 = vr / 10; + const vrmod10 = (vr: u32) - 10 * (vrby10: u32); + round_up = vrmod10 >= 5; + vr = vrby10; vp = vpby10; vm = vmby10; + removed += 1; + }; + output = vr + ibool(vr == vm || round_up); + }; + const exp = e10 + removed; + return decf64 { exponent = exp, mantissa = output }; +}; + +fn encode(buf: []u8, v: decf64) size = { + const zch = '0': u32: u8; + const n = v.mantissa, e = v.exponent, olen = declen(n); + const exp = e + olen: i32 - 1; + // use scientific notation for numbers whose exponent is beyond the + // precision available for f64 type + if (exp > -17 && exp < 17) { + if (e >= 0) { + let k = exp; + for (let a = e; a > 0; a -= 1) { + buf[k] = zch; + k -= 1; + }; + let m = n; + for (k >= 0; k -= 1) { + const mby10 = m / 10; + const mmod10 = (m: u32) - 10 * (mby10: u32); + buf[k] = zch + mmod10: u8; + m = mby10; + }; + return (e + olen: i32): size; + } else if (exp < 0) { + buf[0] = zch; + buf[1] = '.': u32: u8; + let k = -e + 1; + let m = n; + for (let a = olen: i32; a > 0; a -= 1) { + const mby10 = m / 10; + const mmod10 = (m: u32) - 10 * (mby10: u32); + buf[k] = zch + mmod10: u8; + k -= 1; + m = mby10; + }; + for (k > 1; k -= 1) { + buf[k] = zch; + }; + return (-e + 2): size; + } else { + let k = olen: i32; + let m = n; + for (let a = -e; a > 0; a -= 1) { + const mby10 = m / 10; + const mmod10 = (m: u32) - 10 * (mby10: u32); + buf[k] = zch + mmod10: u8; + k -= 1; + m = mby10; + }; + buf[k] = '.': u32: u8; + k -= 1; + for (k >= 0; k -= 1) { + const mby10 = m / 10; + const mmod10 = (m: u32) - 10 * (mby10: u32); + buf[k] = zch + mmod10: u8; + m = mby10; + }; + return (olen + 1): size; + }; + } else { + let h: i32 = 0; + let m = n; + if (olen == 1) { + buf[0] = zch + m: u8; + h = 1; + } else { + let k = olen: i32; + for (let a = k; a > 1; a -= 1) { + const mby10 = m / 10; + const mmod10 = (m: u32) - 10 * (mby10: u32); + buf[k] = zch + mmod10: u8; + k -= 1; + m = mby10; + }; + buf[k] = '.': u32: u8; + buf[0] = zch + m: u8; + h = olen: i32 + 1; + }; + buf[h] = 'e': u32: u8; + h += 1; + let ex = if (exp < 0) { + buf[h] = '-': u32: u8; + h += 1; + -exp; + } else exp; + const elen = declen(ex: u64); + let k = h + elen: i32 - 1; + for (let a = elen: i32; a > 0; a -= 1) { + const eby10 = ex / 10; + const emod10 = (ex: u32) - 10 * (eby10: u32); + buf[k] = zch + emod10: u8; + k -= 1; + ex = eby10; + }; + h += elen: i32; + return h: size; + }; +}; + +// Converts a f64 to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn f64tos(n: f64) const str = { + // The biggest string produced by a f64 number in base 10 would have the + // negative sign, followed by a digit and decimal point, and then + // fifteen more decimal digits, followed by 'e' and another negative + // sign and the maximum of three digits for exponent. + // (1 + 1 + 1 + 15 + 1 + 1 + 3) = 23 + static let buf: [24]u8 = [0...]; + const bits = f64bits(n); + const sign = (bits >> (F64_MANTISSA_BITS + F64_EXPONENT_BITS)): size; + const mantissa = bits & ((1u64 << F64_MANTISSA_BITS) - 1); + const exponent = ((bits >> F64_MANTISSA_BITS) & + (1u64 << F64_EXPONENT_BITS) - 1): u32; + if (mantissa == 0 && exponent == 0) { + return "0"; + } else if (exponent == ((1 << F64_EXPONENT_BITS) - 1)) { + if (mantissa != 0) { + return "NaN"; + }; + return if (sign == 0) "Infinity" else "-Infinity"; + }; + const v = bintodec(mantissa, exponent); + if (sign != 0) { + buf[0] = '-': u32: u8; + }; + let z = encode(buf[sign..], v) + sign; + let s = types::string { data = &buf, length = z, ... }; + return *(&s: *str); +}; + +@test fn f64tos() void = { + assert(f64tos(0.0) == "0"); + assert(f64tos(1.0 / 0.0) == "Infinity"); + assert(f64tos(-1.0 / 0.0) == "-Infinity"); + assert(f64tos(0.0 / 0.0) == "NaN"); + assert(f64tos(1.0) == "1"); + assert(f64tos(0.3) == "0.3"); + assert(f64tos(0.0031415) == "0.0031415"); + assert(f64tos(0.0000012345678) == "0.0000012345678"); + assert(f64tos(1.414) == "1.414"); + assert(f64tos(1e234f64) == "1e234"); + // TODO: Negative exponents for floating point literals not implemented yet! + //assert(f64tos(1.2e-34) == "1.2e-34"); + assert(f64tos(-6345.9721) == "-6345.9721"); + assert(f64tos(1.23456789e67) == "1.23456789e67"); + assert(f64tos(11.2233445566778899e20) == "1.122334455667789e21"); + assert(f64tos(1000000.0e9) == "1000000000000000"); + assert(f64tos(9007199254740991.0) == "9007199254740991"); +}; + diff --git a/vendor/tree-sitter-hare/example/functions.ha b/vendor/tree-sitter-hare/example/functions.ha new file mode 100644 index 000000000..15c2f219a --- /dev/null +++ b/vendor/tree-sitter-hare/example/functions.ha @@ -0,0 +1,98 @@ +use rt; +use linux::vdso; + + +fn duration_to_timespec(n: duration, ts: *rt::timespec) void = { + ts.tv_sec = n / SECOND; + ts.tv_nsec = n % SECOND; +}; + +fn instant_to_timespec(t: instant, ts: *rt::timespec) void = { + ts.tv_sec = t.sec; + ts.tv_nsec = t.nsec; +}; + +fn timespec_to_instant(ts: rt::timespec) instant = instant { + sec = ts.tv_sec, + nsec = ts.tv_nsec, +}; + +// Yields the process to the kernel and returns after the requested duration. +export fn sleep(n: duration) void = { + let in = rt::timespec { ... }; + duration_to_timespec(n, &in); + let req = ∈ + + for (true) { + let res = rt::timespec { ... }; + match (rt::nanosleep(req, &res)) { + void => return, + err: rt::errno => switch (err) { + rt::EINTR => { + req = &res; + }, + * => abort("Unexpected error from nanosleep"), + }, + }; + }; +}; + +export type clock = enum { + // The current wall-clock time. This may jump forwards or backwards in + // time to account for leap seconds, NTP adjustments, etc. + REALTIME = 0, + + // The current monotonic time. This clock measures from some undefined + // epoch and is not affected by leap seconds, NTP adjustments, and + // changes to the system time: it always increases by one second per + // second. + MONOTONIC = 1, + + // Measures CPU time consumed by the calling process. + PROCESS_CPU = 2, + + // Time since the system was booted. Increases monotonically and, + // unlike [MONOTONIC], continues to tick while the system is suspended. + BOOT = 7, +}; + +let cgt_vdso: nullable *fn(_: int, _: *rt::timespec) int = null; + +fn get_cgt_vdso() nullable *fn(_: int, _: *rt::timespec) int = { + static let vdso_checked: bool = false; + if (vdso_checked) + return cgt_vdso; + vdso_checked = true; + + cgt_vdso = vdso::getsym(VDSO_CGT_SYM, VDSO_CGT_VER) + : nullable *fn(_: int, _: *rt::timespec) int; + return cgt_vdso; +}; + +fn now_vdso(clock: clock, tp: *rt::timespec) (void | rt::errno) = { + let vfn = match (get_cgt_vdso()) { + null => return rt::wrap_errno(rt::ENOSYS), + vfn: *fn(_: int, _: *rt::timespec) int => vfn, + }; + let ret = vfn(clock, tp); + if (ret == 0) { + return; + }; + return rt::wrap_errno(ret); +}; + +// Returns the current time for a given clock. +export fn now(clock: clock) instant = { + let tp = rt::timespec { ... }; + let err = match (now_vdso(clock, &tp)) { + void => return timespec_to_instant(tp), + err: rt::errno => err + }; + if (err != rt::wrap_errno(rt::ENOSYS)) { + abort("Unexpected error from clock_gettime"); + }; + return match (rt::clock_gettime(clock, &tp)) { + void => timespec_to_instant(tp), + err: rt::errno => abort("Unexpected error from clock_gettime"), + }; +}; diff --git a/vendor/tree-sitter-hare/example/getopts.ha b/vendor/tree-sitter-hare/example/getopts.ha new file mode 100644 index 000000000..7d479aa0f --- /dev/null +++ b/vendor/tree-sitter-hare/example/getopts.ha @@ -0,0 +1,307 @@ +// getopt provides an interface for parsing command line arguments and +// automatically generates a brief help message explaining the command usage. +// See [parse] for the main entry point. +// +// The help text is brief and should serve only as a reminder. It is recommended +// that your command line program be accompanied by a man page to provide +// detailed usage information. +use encoding::utf8; +use fmt; +use io; +use os; +use strings; + +// A flag which does not take a parameter, e.g. "-a". +export type flag = rune; + +// An option with an included parameter, e.g. "-a foo". +export type parameter = str; + +// A command line option. +export type option = (flag, parameter); + +// The result of parsing the set of command line arguments, including any +// options specified and the list of non-option arguments. +export type command = struct { + opts: []option, + args: []str, +}; + +// Help text providing a short, one-line summary of the command; or providing +// the name of an argument. +export type cmd_help = str; + +// Help text for a flag, formatted as "-a: help text". +export type flag_help = (flag, str); + +// Help text for a parameter, formatted as "-a param: help text" where "param" +// is the first string and "help text" is the second string. +export type parameter_help = (flag, str, str); + +// Help text for a command or option. +// +// cmd_help, flag_help, and parameter_help compose such that the help output for +// +// [ +// "foo bars in order", +// ('a', "a help text"), +// ('b', "b help text"), +// ('c', "cflag", "c help text"), +// ('d', "dflag", "d help text"), +// "files...", +// ] +// +// is: +// +// foo: foo bars in order +// +// Usage: foo [-ab] [-c ] [-d ] files... +// +// -a: a help text +// -b: b help text +// -c : c help text +// -d : d help text +export type help = (cmd_help | flag_help | parameter_help); + +// Parses command line arguments and returns a tuple of the options specified, +// and the remaining arguments. If an error occurs, details are printed to +// [os::stderr] and [os::exit] is called with a nonzero exit status. The +// argument list must include the command name as the first item; [os::args] +// fulfills this criteria. +// +// The caller provides [help] arguments to specify which command line flags and +// parameters are supported, and to provide some brief help text which describes +// their use. Provide [flag_help] to add a flag which does not take a parameter, +// and [parameter_help] to add a flag with a required parameter. The first +// [cmd_help] is used as a short, one-line summary of the command's purpose, and +// any later [cmd_help] arguments are used to provide the name of any arguments +// which follow the options list. +// +// By convention, the caller should sort the list of options, first providing +// all flags, then all parameters, alpha-sorted within each group by the flag +// rune. +// +// // Usage for sed +// let cmd = getopt::parse(os::args +// "stream editor", +// ('E', "use extended regular expressions"), +// ('s', "treat files as separate, rather than one continuous stream"), +// ('i', "edit files in place"), +// ('z', "separate lines by NUL characeters"), +// ('e', "script", "execute commands from script"), +// ('f', "file", "execute commands from a file"), +// "files...", +// ); +// defer getopt::finish(&cmd); +// +// for (let i = 0z; i < len(cmd.opts); i += 1) { +// let opt = cmd.opts[i]; +// switch (opt.0) { +// 'E' => extended = true, +// 's' => continuous = false, +// // ... +// 'e' => script = opt.1, +// 'f' => file = opt.1, +// }; +// }; +// +// for (let i = 0z; i < len(cmd.args); i += 1) { +// let arg = cmd.args[i]; +// // ... +// }; +// +// If "-h" is not among the options defined by the caller, the "-h" option will +// will cause a summary of the command usage to be printed to stderr, and +// [os::exit] will be called with a successful exit status. +export fn parse(args: []str, help: help...) command = { + let opts: []option = []; + let i = 1z; + :arg for (i < len(args); i += 1) { + const arg = args[i]; + if (len(arg) == 0 || arg == "-" + || !strings::has_prefix(arg, "-")) { + break; + }; + if (arg == "--") { + i += 1; + break; + }; + + let d = utf8::decode(arg); + assert(utf8::next(&d) as rune == '-'); + let next = utf8::next(&d); + :flag for (next is rune; next = utf8::next(&d)) { + const r = next as rune; + :help for (let j = 0z; j < len(help); j += 1) { + let p: parameter_help = match (help[j]) { + cmd_help => continue :help, + f: flag_help => if (r == f.0) { + append(opts, (r, "")); + continue :flag; + } else continue :help, + p: parameter_help => if (r == p.0) p + else continue :help, + }; + if (len(d.src) == d.offs) { + if (i + 1 >= len(args)) { + errmsg(args[0], "option requires an argument: ", + r, help); + os::exit(1); + }; + i += 1; + append(opts, (r, args[i])); + } else { + let s = strings::fromutf8(d.src[d.offs..]); + append(opts, (r, s)); + }; + continue :arg; + }; + if (r =='h') { + printhelp(os::stderr, args[0], help); + os::exit(0); + }; + errmsg(args[0], "unrecognized option: ", r, help); + os::exit(1); + }; + match (next) { + rune => abort(), // Unreachable + void => void, + (utf8::more | utf8::invalid) => { + errmsg(args[9], "invalid UTF-8 in arguments", + void, help); + os::exit(1); + }, + }; + }; + return command { + opts = opts, + args = args[i..], + }; +}; + +// Frees resources associated with the return value of [parse]. +export fn finish(cmd: *command) void = { + if (cmd == null) return; + free(cmd.opts); +}; + +fn _printusage(s: *io::stream, name: str, indent: bool, help: []help) size = { + let z = fmt::fprint(s, "Usage:", name) as size; + + let started_flags = false; + for (let i = 0z; i < len(help); i += 1) if (help[i] is flag_help) { + if (!started_flags) { + z += fmt::fprint(s, " [-") as size; + started_flags = true; + }; + const help = help[i] as flag_help; + z += fmt::fprint(s, help.0: rune) as size; + }; + if (started_flags) { + z += fmt::fprint(s, "]") as size; + }; + + for (let i = 0z; i < len(help); i += 1) if (help[i] is parameter_help) { + const help = help[i] as parameter_help; + if (indent) { + z += fmt::fprintf(s, "\n\t") as size; + }; + z += fmt::fprintf(s, " [-{} <{}>]", help.0: rune, help.1) as size; + }; + if (indent) { + z += fmt::fprintf(s, "\n\t") as size; + }; + for (let i = 1z; i < len(help); i += 1) if (help[i] is cmd_help) { + z += fmt::fprintf(s, " {}", help[i] as cmd_help: str) as size; + }; + + return z + fmt::fprint(s, "\n") as size; +}; + +// Prints command usage to the provided stream. +export fn printusage(s: *io::stream, name: str, help: []help) void = { + let z = _printusage(io::empty, name, false, help); + _printusage(s, name, if (z > 72) true else false, help); +}; + +// Prints command help to the provided stream. +export fn printhelp(s: *io::stream, name: str, help: []help) void = { + if (help[0] is cmd_help) { + fmt::fprintfln(s, "{}: {}\n", name, help[0] as cmd_help: str); + }; + + printusage(s, name, help); + + for (let i = 0z; i < len(help); i += 1) match (help[i]) { + cmd_help => void, + (flag_help | parameter_help) => { + // Only print this if there are flags to show + fmt::fprint(s, "\n"); + break; + }, + }; + + for (let i = 0z; i < len(help); i += 1) match (help[i]) { + cmd_help => void, + f: flag_help => { + fmt::fprintfln(s, "-{}: {}", f.0: rune, f.1); + }, + p: parameter_help => { + fmt::fprintfln(s, "-{} <{}>: {}", p.0: rune, p.1, p.2); + }, + }; +}; + +fn errmsg(name: str, err: str, opt: (rune | void), help: []help) void = { + fmt::errorfln("{}: {}{}", name, err, match (opt) { + r: rune => r, + void => "", + }); + printusage(os::stderr, name, help); +}; + +@test fn parse() void = { + let args: []str = ["cat", "-v", "a.out"]; + let cat = parse(args, + "concatenate files", + ('v', "cause Rob Pike to make a USENIX presentation"), + "files...", + ); + defer finish(&cat); + assert(len(cat.args) == 1 && cat.args[0] == "a.out"); + assert(len(cat.opts) == 1 && cat.opts[0].0 == 'v' && cat.opts[0].1 == ""); + + args = ["ls", "-Fahs", "--", "-j"]; + let ls = parse(args, + "list files", + ('F', "Do some stuff"), + ('h', "Do some other stuff"), + ('s', "Do a third type of stuff"), + ('a', "Do a fourth type of stuff"), + "files...", + ); + defer finish(&ls); + assert(len(ls.args) == 1 && ls.args[0] == "-j"); + assert(len(ls.opts) == 4); + assert(ls.opts[0].0 == 'F' && ls.opts[0].1 == ""); + assert(ls.opts[1].0 == 'a' && ls.opts[1].1 == ""); + assert(ls.opts[2].0 == 'h' && ls.opts[2].1 == ""); + assert(ls.opts[3].0 == 's' && ls.opts[3].1 == ""); + + args = ["sed", "-e", "s/C++//g", "-f/tmp/turing.sed", "-"]; + let sed = parse(args, + "edit streams", + ('e', "script", "Add the editing commands specified by the " + "script option to the end of the script of editing " + "commands"), + ('f', "script_file", "Add the editing commands in the file " + "script_file to the end of the script of editing " + "commands"), + "files...", + ); + defer finish(&sed); + assert(len(sed.args) == 1 && sed.args[0] == "-"); + assert(len(sed.opts) == 2); + assert(sed.opts[0].0 == 'e' && sed.opts[0].1 == "s/C++//g"); + assert(sed.opts[1].0 == 'f' && sed.opts[1].1 == "/tmp/turing.sed"); +}; diff --git a/vendor/tree-sitter-hare/example/getuid.ha b/vendor/tree-sitter-hare/example/getuid.ha new file mode 100644 index 000000000..da0d9ac22 --- /dev/null +++ b/vendor/tree-sitter-hare/example/getuid.ha @@ -0,0 +1,29 @@ +use rt; + +// Returns the current process user ID. +export fn getuid() uint = { + let uid = 0u, euid = 0u, suid = 0u; + rt::getresuid(&uid, &euid, &suid) as void; + return uid; +}; + +// Returns the current process effective user ID. +export fn geteuid() uint = { + let uid = 0u, euid = 0u, suid = 0u; + rt::getresuid(&uid, &euid, &suid) as void; + return euid; +}; + +// Returns the current process group ID. +export fn getgid() uint = { + let gid = 0u, egid = 0u, sgid = 0u; + rt::getresgid(&gid, &egid, &sgid) as void; + return gid; +}; + +// Returns the current process effective group ID. +export fn getegid() uint = { + let gid = 0u, egid = 0u, sgid = 0u; + rt::getresgid(&gid, &egid, &sgid) as void; + return egid; +}; diff --git a/vendor/tree-sitter-hare/example/hash.ha b/vendor/tree-sitter-hare/example/hash.ha new file mode 100644 index 000000000..48dd1459b --- /dev/null +++ b/vendor/tree-sitter-hare/example/hash.ha @@ -0,0 +1,46 @@ +use io; +// TODO: Let caller supply the output buffer, to avoid the slice allocation + +// The general purpose interface for a hashing function. +export type hash = struct { + // A stream which only supports writes and never returns errors. + stream: io::stream, + + // Returns the current hash. + sum: *fn(hash: *hash) []u8, + + // Resets the hash function to its initial state. + reset: *fn(hash: *hash) void, + + // Size of the hash in bytes. + sz: size, +}; + +// Returns a writable [io::stream] for a given hash. +export fn writer(h: *hash) *io::stream = &h.stream; + +// Writes an input to the hash function. +export fn write(h: *hash, buf: const []u8) size = + io::write(&h.stream, buf) as size; + +// Finalizes the hash, frees resources associated with the hash, and returns the +// sum. The return value is heap allocated, the caller needs to free it. +export fn finish(h: *hash) []u8 = { + let sum = sum(h); + io::close(&h.stream); + return sum; +}; + +// Closes a hash, freeing its resources and discarding the checksum. +export fn close(h: *hash) void = io::close(&h.stream); + +// Returns the current sum. The return value is heap allocated, the caller +// needs to free it. +export fn sum(h: *hash) []u8 = h.sum(h); + +// Resets the hash function to its initial state. +export fn reset(h: *hash) void = h.reset(h); + +// Returns the size of the hash in bytes. This is consistent regardless +// of the hash state. +export fn sz(h: *hash) size = h.sz; diff --git a/vendor/tree-sitter-hare/example/hex.ha b/vendor/tree-sitter-hare/example/hex.ha new file mode 100644 index 000000000..d1f7e5a5c --- /dev/null +++ b/vendor/tree-sitter-hare/example/hex.ha @@ -0,0 +1,117 @@ +use ascii; +use bytes; +use fmt; +use io; +use strconv; +use strings; +use strio; + +// Error returned when attempting to decode an invalid hex string. +export type invalid = void!; + +// Encodes a byte slice as a hexadecimal string and writes it to a stream. +export fn encode(sink: *io::stream, b: []u8) (size | io::error) = { + let z = 0z; + for (let i = 0z; i < len(b); i += 1) { + let s = strconv::u8tosb(b[i], strconv::base::HEX_LOWER); + if (len(s) == 1) { + z += io::write(sink, ['0': u32: u8])?; + }; + z += io::write(sink, strings::toutf8(s))?; + }; + return z; +}; + +// Encodes a byte slice as a hexadecimal string and returns it. The caller must +// free the return value. +export fn encodestr(b: []u8) str = { + let sink = strio::dynamic(); + encode(sink, b) as size; + return strio::finish(sink); +}; + +@test fn encode() void = { + let in: [_]u8 = [0xCA, 0xFE, 0xBA, 0xBE, 0xDE, 0xAD, 0xF0, 0x0D]; + let s = encodestr(in); + defer free(s); + assert(s == "cafebabedeadf00d"); +}; + +// Decodes a string of hexadecimal bytes into a byte slice. The caller must free +// the return value. +export fn decode(s: str) ([]u8 | invalid) = { + if (len(s) % 2 != 0) { + return invalid; + }; + let buf: []u8 = alloc([], len(s) / 2); + let s = strings::toutf8(s); + for (let i = 0z; i < len(s) / 2; i += 1) { + let oct = strings::fromutf8_unsafe(s[i * 2..i * 2 + 2]); + let u = match (strconv::stou8b(oct, 16)) { + (strconv::invalid | strconv::overflow) => return invalid, + u: u8 => u, + }; + append(buf, u); + }; + return buf; +}; + +@test fn decode() void = { + let s = decode("cafebabedeadf00d") as []u8; + defer free(s); + assert(bytes::equal(s, [0xCA, 0xFE, 0xBA, 0xBE, 0xDE, 0xAD, 0xF0, 0x0D])); + + decode("this is not hex") as invalid; +}; + +// Outputs a dump of hex data to a stream alongside the offset and an ASCII +// representation (if applicable). +// +// Example output: +// +// 00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| +// 00000010 03 00 3e 00 01 00 00 00 80 70 01 00 00 00 00 00 |..>......p......| +export fn dump(out: *io::stream, data: []u8) (void | io::error) = { + let datalen = len(data): u32; + + for (let off = 0u32; off < datalen; off += 16) { + fmt::fprintf(out, "{:08x} ", off)?; + + let toff = 0z; + for (let i = 0z; i < 16 && off + i < datalen; i += 1) { + let val = data[off + i]; + toff += fmt::fprintf(out, "{}{:02x} ", + if (i == 8) " " else "", val)?; + }; + + // Align ASCII representation, max width of hex part (48) + + // spacing around it + for (toff < 50; toff += 1) { + fmt::fprint(out, " ")?; + }; + + fmt::fprint(out, "|")?; + for (let i = 0z; i < 16 && off + i < datalen; i += 1) { + let r = data[off + i]: u32: rune; + + fmt::fprint(out, if (ascii::isprint(r)) r else '.')?; + }; + fmt::fprint(out, "|\n")?; + }; +}; + +@test fn dump() void = { + let in: [_]u8 = [ + 0x7F, 0x45, 0x4c, 0x46, 0x02, 0x01, 0x01, 0x00, 0xCA, 0xFE, + 0xBA, 0xBE, 0xDE, 0xAD, 0xF0, 0x0D, 0xCE, 0xFE, 0xBA, 0xBE, + 0xDE, 0xAD, 0xF0, 0x0D + ]; + + let sink = strio::dynamic(); + dump(sink, in) as void; + + let s = strio::finish(sink); + assert(s == + "00000000 7f 45 4c 46 02 01 01 00 ca fe ba be de ad f0 0d |.ELF............|\n" + "00000010 ce fe ba be de ad f0 0d |........|\n"); +}; diff --git a/vendor/tree-sitter-hare/example/host+aarch64.ha b/vendor/tree-sitter-hare/example/host+aarch64.ha new file mode 100644 index 000000000..9bccdb807 --- /dev/null +++ b/vendor/tree-sitter-hare/example/host+aarch64.ha @@ -0,0 +1,2 @@ +// The [endian] functions which map to the host architecture. +export const host: *endian = &little; diff --git a/vendor/tree-sitter-hare/example/host+x86_64.ha b/vendor/tree-sitter-hare/example/host+x86_64.ha new file mode 100644 index 000000000..9bccdb807 --- /dev/null +++ b/vendor/tree-sitter-hare/example/host+x86_64.ha @@ -0,0 +1,2 @@ +// The [endian] functions which map to the host architecture. +export const host: *endian = &little; diff --git a/vendor/tree-sitter-hare/example/ident.ha b/vendor/tree-sitter-hare/example/ident.ha new file mode 100644 index 000000000..c8cf34b8c --- /dev/null +++ b/vendor/tree-sitter-hare/example/ident.ha @@ -0,0 +1,31 @@ +use fmt; +use hare::ast; +use io; +use strio; + +// Unparses an identifier. +export fn ident(out: *io::stream, id: ast::ident) (size | io::error) = { + let n = 0z; + for (let i = 0z; i < len(id); i += 1) { + n += fmt::fprintf(out, "{}{}", id[i], + if (i + 1 < len(id)) "::" + else "")?; + }; + return n; +}; + +// Unparses an identifier into a string. The caller must free the return value. +export fn identstr(id: ast::ident) str = { + let buf = strio::dynamic(); + ident(buf, id); + return strio::finish(buf); +}; + +@test fn ident() void = { + let s = identstr(["foo", "bar", "baz"]); + assert(s == "foo::bar::baz"); + free(s); + s = identstr(["foo"]); + assert(s == "foo"); + free(s); +}; diff --git a/vendor/tree-sitter-hare/example/import.ha b/vendor/tree-sitter-hare/example/import.ha new file mode 100644 index 000000000..3508a6ff0 --- /dev/null +++ b/vendor/tree-sitter-hare/example/import.ha @@ -0,0 +1,52 @@ +use fmt; +use io; +use hare::ast; +use strio; + +export fn import(out: *io::stream, i: ast::import) (size | io::error) = { + let n = 0z; + n += fmt::fprint(out, "use ")?; + match (i) { + m: ast::import_module => n += ident(out, m)?, + a: ast::import_alias => { + n += fmt::fprint(out, a.alias, "= ")?; + n += ident(out, a.ident)?; + }, + o: ast::import_objects => { + n += ident(out, o.ident)?; + n += fmt::fprint(out, "::{")?; + for (let i = 0z; i < len(o.objects); i += 1) { + n += fmt::fprintf(out, "{}{}", o.objects[i], + if (i + 1 < len(o.objects)) ", " + else "")?; + }; + n += fmt::fprint(out, "}")?; + }, + }; + n += fmt::fprint(out, ";")?; + return n; +}; + +@test fn import() void = { + let buf = strio::dynamic(); + import(buf, ["foo", "bar", "baz"]) as size; + let s = strio::finish(buf); + assert(s == "use foo::bar::baz;"); + free(s); + buf = strio::dynamic(); + import(buf, ast::import_alias { + ident = ["foo"], + alias = "bar", + }) as size; + s = strio::finish(buf); + assert(s == "use bar = foo;"); + free(s); + buf = strio::dynamic(); + import(buf, ast::import_objects { + ident = ["foo"], + objects = ["bar", "baz"], + }) as size; + s = strio::finish(buf); + assert(s == "use foo::{bar, baz};"); + free(s); +}; diff --git a/vendor/tree-sitter-hare/example/index.ha b/vendor/tree-sitter-hare/example/index.ha new file mode 100644 index 000000000..3d32e18dc --- /dev/null +++ b/vendor/tree-sitter-hare/example/index.ha @@ -0,0 +1,25 @@ +use bytes; + +// Returns the index of the first occurance of 'needle' in the 'haystack', or +// void if not present. The index returned is the rune-wise index, not the +// byte-wise index. +export fn index(haystack: str, needle: (str | rune)) (size | void) = { + return match (needle) { + r: rune => index_rune(haystack, r), + s: str => abort(), // TODO + }; +}; + +fn index_rune(s: str, r: rune) (size | void) = { + let iter = iter(s); + for (let i = 0z; true; i += 1) match (next(&iter)) { + n: rune => if (r == n) return i, + void => break, + }; +}; + +@test fn index() void = { + assert(index("hello world", 'w') as size == 6); + assert(index("こんにちは", 'ち') as size == 3); + assert(index("こんにちは", 'q') is void); +}; diff --git a/vendor/tree-sitter-hare/example/ip.ha b/vendor/tree-sitter-hare/example/ip.ha new file mode 100644 index 000000000..8e907800f --- /dev/null +++ b/vendor/tree-sitter-hare/example/ip.ha @@ -0,0 +1,327 @@ +use io; +use strio; +use fmt; +use bytes; +use rt; +use strconv; +use strings; + +// An IPv4 address. +export type addr4 = [4]u8; + +// An IPv6 address. +export type addr6 = [16]u8; + +// An IP address. +export type addr = (addr4 | addr6); + +// An IP subnet. +export type subnet = struct { + addr: addr, + mask: addr, +}; + +// An IPv4 address which represents "any" address, i.e. "0.0.0.0". Binding to +// this address will listen on all available IPv4 interfaces on most systems. +export const ANY_V4: addr4 = [0, 0, 0, 0]; + +// An IPv6 address which represents "any" address, i.e. "::". Binding to this +// address will listen on all available IPv6 interfaces on most systems. +export const ANY_V6: addr6 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + +// Invalid parse result. +export type invalid = void!; + +// Test if two [addr]s are equal. +export fn equal(l: addr, r: addr) bool = { + return match (l) { + l: addr4 => { + if (!(r is addr4)) { + return false; + }; + let r = r as addr4; + bytes::equal(l, r); + }, + l: addr6 => { + if (!(r is addr6)) { + return false; + }; + let r = r as addr6; + bytes::equal(l, r); + }, + }; +}; + +fn parsev4(st: str) (addr4 | invalid) = { + let ret: addr4 = [0...]; + let tok = strings::tokenize(st, "."); + let i = 0z; + for (i < 4; i += 1) { + let s = wanttoken(&tok)?; + ret[i] = match (strconv::stou8(s)) { + term: u8 => term, + * => return invalid + }; + }; + if (i < 4 || !(strings::next_token(&tok) is void)) { + return invalid; + }; + return ret; +}; + +fn parsev6(st: str) (addr6 | invalid) = { + let ret: addr6 = [0...]; + let tok = strings::tokenize(st, ":"); + if (st == "::") { + return ret; + }; + let ells = -1; + if (strings::has_prefix(st, "::")) { + wanttoken(&tok)?; + wanttoken(&tok)?; + ells = 0; + } else if (strings::has_prefix(st, ":")) { + return invalid; + }; + let i = 0; + for (i < 16) { + let s = match (strings::next_token(&tok)) { + s: str => s, + void => break, + }; + if (s == "") { + if (ells != -1) { + return invalid; + }; + ells = i; + continue; + }; + let val = strconv::stou16b(s, 16); + if (val is u16) { + let v = val as u16; + ret[i] = (v >> 8): u8; + i += 1; + ret[i] = v: u8; + i += 1; + continue; + } else { + let v4 = parsev4(s)?; + rt::memcpy(&ret[i], &v4, 4); + i += 4; + break; + }; + return invalid; + }; + if (!(strings::next_token(&tok) is void)) { + return invalid; + }; + if (ells >= 0) { + if (i >= 15) { + return invalid; + }; + rt::memcpy( + &ret[16 - (i - ells)], + &ret[ells], (i - ells): size); + rt::memset(&ret[ells], 0, (i - ells): size); + } else { + if (i != 16) + return invalid; + }; + + return ret; +}; + + +// Parses an IP address. +export fn parse(s: str) (addr | invalid) = { + match(parsev4(s)) { + v4: addr4 => return v4, + }; + match(parsev6(s)) { + v6: addr6 => return v6, + }; + return invalid; +}; + +fn fmtv4(s: *io::stream, a: addr4) (io::error | size) = { + let ret = 0z; + for (let i = 0; i < 4; i += 1) { + if (i > 0) { + ret += fmt::fprintf(s, ".")?; + }; + ret += fmt::fprintf(s, "{}", a[i])?; + }; + return ret; +}; + +fn fmtv6(s: *io::stream, a: addr6) (io::error | size) = { + let ret = 0z; + let zstart: int = -1; + let zend: int = -1; + for (let i = 0; i < 16; i += 2) { + let j = i; + for (j < 16 && a[j] == 0 && a[j + 1] == 0) { + j += 2; + }; + + if (j > i && j - i > zend - zstart) { + zstart = i; + zend = j; + i = j; + }; + }; + + if (zend - zstart <= 2) { + zstart = -1; + zend = -1; + }; + + for (let i = 0; i < 16; i += 2) { + if (i == zstart) { + ret += fmt::fprintf(s, "::")?; + i = zend; + if (i >= 16) + break; + } else if (i > 0) { + ret += fmt::fprintf(s, ":")?; + }; + let term = (a[i]: u16) << 8 | a[i + 1]; + ret += fmt::fprintf(s, "{:x}", term)?; + }; + return ret; +}; + +// Fills a netmask according to the CIDR value +// e.g. 23 -> [0xFF, 0xFF, 0xFD, 0x00] +fn fillmask(mask: []u8, val: u8) void = { + rt::memset(&mask[0], 0xFF, len(mask)); + let i: int = len(mask): int - 1; + val = 32 - val; + for (val >= 8) { + mask[i] = 0x00; + val -= 8; + i -= 1; + }; + if (i >= 0) { + mask[i] = ~((1 << val) - 1); + }; +}; + +// Returns an addr representing a netmask +fn cidrmask(addr: addr, val: u8) (addr | invalid) = { + let a_len: u8 = match (addr) { + addr4 => 4, + addr6 => 16, + }; + + if (val > 8 * a_len) + return invalid; + if (a_len == 4) { + let ret: addr4 = [0...]; + fillmask(ret[..], val); + return ret; + }; + if (a_len == 16) { + let ret: addr6 = [0...]; + fillmask(ret[..], val); + return ret; + }; + return invalid; +}; + +// Parse an IP subnet in CIDR notation e.g. 192.168.1.0/24 +export fn parsecidr(st: str) (subnet | invalid) = { + let tok = strings::tokenize(st, "/"); + let ips = wanttoken(&tok)?; + let addr = parse(ips)?; + let masks = wanttoken(&tok)?; + let val = match (strconv::stou8(masks)) { + x: u8 => x, + * => return invalid, + }; + if (!(strings::next_token(&tok) is void)) { + return invalid; + }; + return subnet { + addr = addr, + mask = cidrmask(addr, val)? + }; +}; + +fn masklen(addr: []u8) (void | size) = { + let n = 0z; + for (let i = 0z; i < len(addr); i += 1) { + if (addr[i] == 0xff) { + n += 8; + continue; + }; + let val = addr[i]; + for (val & 0x80 != 0) { + n += 1; + val <<= 1; + }; + if (val != 0) + return; + for (let j = i + 1; j < len(addr); j += 1) { + if (addr[j] != 0) + return; + }; + break; + }; + return n; +}; + +fn fmtmask(s: *io::stream, mask: addr) (io::error | size) = { + let ret = 0z; + let slice = match (mask) { + v4: addr4 => v4[..], + v6: addr6 => v6[..], + }; + match (masklen(slice)) { + // format as hex, if zero runs are not contiguous + // (like golang does) + void => { + for (let i = 0z; i < len(slice); i += 1) { + ret += fmt::fprintf(s, "{:x}", slice[i])?; + }; + }, + // standard CIDR integer + n: size => ret += fmt::fprintf(s, "{}", n)?, + }; + return ret; +}; + +fn fmtsubnet(s: *io::stream, subnet: subnet) (io::error | size) = { + let ret = 0z; + ret += fmt(s, subnet.addr)?; + ret += fmt::fprintf(s, "/")?; + ret += fmtmask(s, subnet.mask)?; + return ret; +}; + +// Formats an [addr] or [subnet] and prints it to a stream. +export fn fmt(s: *io::stream, item: (...addr | subnet)) (io::error | size) = { + return match (item) { + v4: addr4 => fmtv4(s, v4)?, + v6: addr6 => fmtv6(s, v6)?, + sub: subnet => fmtsubnet(s, sub), + }; +}; + +// Formats an [addr] or [subnet] as a string. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// extend its lifetime. +export fn string(item: (...addr | subnet)) str = { + // Maximum length of an IPv6 address plus its netmask in hexadecimal + static let buf: [64]u8 = [0...]; + let stream = strio::fixed(buf); + fmt(stream, item) as size; + return strio::string(stream); +}; + +fn wanttoken(tok: *strings::tokenizer) (str | invalid) = { + return match (strings::next_token(tok)) { + s: str => s, + void => invalid + }; +}; diff --git a/vendor/tree-sitter-hare/example/iter.ha b/vendor/tree-sitter-hare/example/iter.ha new file mode 100644 index 000000000..7b8aba22f --- /dev/null +++ b/vendor/tree-sitter-hare/example/iter.ha @@ -0,0 +1,111 @@ +use encoding::utf8; + +// An iterator which yields each rune from a string. +export type iterator = struct { + dec: utf8::decoder, + push: (rune | void), +}; + +// Initializes a string iterator, starting at the beginning of the string. +export fn iter(src: str) iterator = iterator { + dec = utf8::decode(src), + push = void, +}; + +// Initializes a string iterator, starting at the end of the string. +export fn riter(src: str) iterator = { + let ret = iterator { + dec = utf8::decode(src), + push = void, + }; + ret.dec.offs = len(src); + return ret; +}; + +// Get the next rune from an iterator, or void if there are none left. +// +// Be aware that a rune is not the minimum lexographical unit of language in +// Unicode strings. If you use these runes to construct a new string, +// reordering, editing, or omitting any of the runes without careful discretion +// may cause linguistic errors to arise. To avoid this, you may need to use +// [unicode::graphiter] instead. +export fn next(iter: *iterator) (rune | void) = { + match (iter.push) { + r: rune => { + iter.push = void; + return r; + }, + void => void, + }; + return match (utf8::next(&iter.dec)) { + r: rune => r, + void => void, + (utf8::more | utf8::invalid) => + abort("Invalid UTF-8 string (this should not happen)"), + }; +}; + +// Get the previous rune from an iterator, or void when at the start of the +// string. +export fn prev(iter: *iterator) (rune | void) = { + assert(iter.push is void); + return match (utf8::prev(&iter.dec)) { + r: rune => r, + void => void, + (utf8::more | utf8::invalid) => + abort("Invalid UTF-8 string (this should not happen)"), + }; +}; + +// Causes the next call to [next] to return the provided rune, effectively +// un-reading it. The next call using this iterator *must* be [next]; all other +// functions will cause the program to abort until the pushed rune is consumed. +// This does not modify the underlying string, and as such, subsequent calls to +// functions like [prev] or [iter_str] will behave as if push were never called. +export fn push(iter: *iterator, r: rune) void = { + assert(iter.push is void); + iter.push = r; +}; + +// Return a substring from the next rune to the end of the string. +export fn iter_str(iter: *iterator) str = { + assert(iter.push is void); + return fromutf8(iter.dec.src[iter.dec.offs..]); +}; + +@test fn iter() void = { + let s = iter("こんにちは"); + assert(prev(&s) is void); + const expected1 = ['こ', 'ん']; + for (let i = 0z; i < len(expected1); i += 1) { + match (next(&s)) { + r: rune => assert(r == expected1[i]), + void => abort(), + }; + }; + assert(iter_str(&s) == "にちは"); + assert(prev(&s) as rune == 'ん'); + const expected2 = ['ん', 'に', 'ち', 'は']; + for (let i = 0z; i < len(expected2); i += 1) { + match (next(&s)) { + r: rune => assert(r == expected2[i]), + void => abort(), + }; + }; + assert(next(&s) is void); + assert(next(&s) is void); + push(&s, 'q'); + assert(next(&s) as rune == 'q'); + assert(prev(&s) as rune == 'は'); + + s = riter("にちは"); + const expected3 = ['は', 'ち', 'に']; + for (let i = 0z; i< len(expected3); i += 1) { + match (prev(&s)) { + r: rune => assert(r == expected3[i]), + void => abort(), + }; + }; + assert(prev(&s) is void); + assert(next(&s) as rune == 'に'); +}; diff --git a/vendor/tree-sitter-hare/example/itos.ha b/vendor/tree-sitter-hare/example/itos.ha new file mode 100644 index 000000000..7182f26e6 --- /dev/null +++ b/vendor/tree-sitter-hare/example/itos.ha @@ -0,0 +1,106 @@ +use bytes; +use types; +use strings; + +// Converts an i64 to a string in the given base. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn i64tosb(i: i64, b: base) const str = { + static assert(types::I64_MAX == 9223372036854775807); + if (i >= 0) return u64tosb(i: u64, b); + + static let buf: [65]u8 = [0...]; // 64 binary digits plus - + + let s = types::string { data = &buf, ... }; + + buf[0] = '-': u32: u8; + s.length = 1; + + let u = strings::toutf8(u64tosb((-i): u64, b)); + assert(len(u) < len(buf)); + + bytes::copy(buf[1..len(u) + 1], u); + s.length += len(u); + + return *(&s: *str); +}; + +// Converts a i32 to a string in the given base. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn i32tosb(i: i32, b: base) const str = i64tosb(i, b); + +// Converts a i16 to a string in the given base. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn i16tosb(i: i16, b: base) const str = i64tosb(i, b); + +// Converts a i8 to a string in the given base. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn i8tosb(i: i8, b: base) const str = i64tosb(i, b); + +// Converts an int to a string in the given base. The return value is +// statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn itosb(i: int, b: base) const str = i64tosb(i, b); + +// Converts a i64 to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn i64tos(i: i64) const str = i64tosb(i, base::DEC); + +// Converts a i32 to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn i32tos(i: i32) const str = i64tos(i); + +// Converts a i16 to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn i16tos(i: i16) const str = i64tos(i); + +// Converts a i8 to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn i8tos(i: i8) const str = i64tos(i); + +// Converts a int to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn itos(i: int) const str = i64tos(i); + +@test fn itosb() void = { + assert("11010" == i64tosb(0b11010, base::BIN)); + assert("1234567" == i64tosb(0o1234567, base::OCT)); + assert("123456789" == i64tosb(123456789, base::DEC)); + assert("123456789ABCDEF" == i64tosb(0x123456789ABCDEF, base::HEX)); + assert("123456789ABCDEF" == i64tosb(0x123456789ABCDEF, base::HEX_UPPER)); + assert("123456789abcdef" == i64tosb(0x123456789ABCDEF, base::HEX_LOWER)); + assert("-1000000000000000000000000000000000000000000000000000000000000000" + == i64tosb(types::I64_MIN, base::BIN)); +}; + +@test fn itos() void = { + const samples: [_]i64 = [ + 1234, + 4321, + -1337, + 0, + types::I64_MAX, + types::I64_MIN, + ]; + const expected = [ + "1234", + "4321", + "-1337", + "0", + "9223372036854775807", + "-9223372036854775808", + ]; + + for (let i = 0z; i < len(samples); i += 1) { + const s = i64tos(samples[i]); + assert(s == expected[i]); + }; +}; diff --git a/vendor/tree-sitter-hare/example/jmp.ha b/vendor/tree-sitter-hare/example/jmp.ha new file mode 100644 index 000000000..30712ecc6 --- /dev/null +++ b/vendor/tree-sitter-hare/example/jmp.ha @@ -0,0 +1 @@ +type arch_jmpbuf = [22]u64; diff --git a/vendor/tree-sitter-hare/example/join.ha b/vendor/tree-sitter-hare/example/join.ha new file mode 100644 index 000000000..432501b2d --- /dev/null +++ b/vendor/tree-sitter-hare/example/join.ha @@ -0,0 +1,65 @@ +use bytes; +use bufio; +use strings; +use io; + +// Joins together several path components with the path separator. The caller +// must free the return value. +export fn join(paths: str...) str = { + // TODO: Normalize inputs so that if they end with a / we don't double + // up on delimiters + let sink = bufio::dynamic(io::mode::WRITE); + let utf8 = true; + for (let i = 0z; i < len(paths); i += 1) { + let buf = strings::toutf8(paths[i]); + let l = len(buf); + if (l == 0) continue; + for (l > 0 && buf[l - 1] == PATHSEP) { + l -= 1; + }; + for (let q = 0z; q < l) { + let w = io::write(sink, buf[q..l]) as size; + q += w; + }; + if (i + 1 < len(paths)) { + assert(io::write(sink, [PATHSEP]) as size == 1); + }; + }; + + return strings::fromutf8_unsafe(bufio::finish(sink)); +}; + +@test fn join() void = { + assert(PATHSEP == '/': u32: u8); // TODO: meh + let i = join("foo"); + defer free(i); + assert(i == "foo"); + + let p = join(i, "bar", "baz"); + defer free(p); + assert(p == "foo/bar/baz"); + + let q = join(p, "bat", "bad"); + defer free(q); + assert(q == "foo/bar/baz/bat/bad"); + + let r = join(p, q); + defer free(r); + assert(r == "foo/bar/baz/foo/bar/baz/bat/bad"); + + let p = join("foo/", "bar"); + defer free(p); + assert(p == "foo/bar"); + + let p = join("foo///", "bar"); + defer free(p); + assert(p == "foo/bar"); + + let p = join("foo", "", "bar"); + defer free(p); + assert(p == "foo/bar"); + + let p = join("/", "foo", "bar", "baz"); + defer free(p); + assert(p == "/foo/bar/baz"); +}; diff --git a/vendor/tree-sitter-hare/example/lex.ha b/vendor/tree-sitter-hare/example/lex.ha new file mode 100644 index 000000000..759e55b73 --- /dev/null +++ b/vendor/tree-sitter-hare/example/lex.ha @@ -0,0 +1,524 @@ +// hare::lex provides a lexer for Hare source code. +use ascii; +use bufio; +use encoding::utf8; +use fmt; +use io; +use sort; +use strconv; +use strings; + +// State associated with a lexer. +export type lexer = struct { + in: *io::stream, + path: str, + loc: (uint, uint), + un: ((token, location) | void), + rb: [2](rune | io::EOF | void), +}; + +// A syntax error +export type syntax = (location, str)!; + +// All possible lexer errors +export type error = (io::error | syntax)!; + +// Returns a human-friendly string for a given error +export fn strerror(err: error) const str = { + static let buf: [2048]u8 = [0...]; + return match (err) { + err: io::error => io::strerror(err), + s: syntax => fmt::bsprintf(buf, "{}:{},{}: Syntax error: {}", + s.0.path, s.0.line, s.0.col, s.1), + }; +}; + +// Initializes a new lexer for the given input stream. The path is borrowed. +export fn init(in: *io::stream, path: str) lexer = lexer { + in = in, + path = path, + loc = (1, 1), + un = void, + rb = [void...], +}; + +// Returns the next token from the lexer. +export fn lex(lex: *lexer) ((token, location) | io::EOF | error) = { + match (lex.un) { + tok: (token, location) => { + lex.un = void; + return tok; + }, + void => void, + }; + + let loc = location { ... }; + let r: rune = match (nextw(lex)?) { + io::EOF => return io::EOF, + r: (rune, location) => { + loc = r.1; + r.0; + }, + }; + + if (is_name(r, false)) { + unget(lex, r); + return lex_name(lex, loc); + }; + if (ascii::isdigit(r)) { + unget(lex, r); + abort(); // TODO: Literals + }; + + let tok: token = switch (r) { + * => return syntaxerr(loc, "invalid character"), + '"', '\'' => { + unget(lex, r); + return lex_rn_str(lex, loc); + }, + '.', '<', '>' => return lex3(lex, loc, r), + '^', '*', '%', '/', '+', '-', ':', '!', '&', '|', '=' => { + return lex2(lex, loc, r); + }, + '~' => btoken::BNOT, + ',' => btoken::COMMA, + '{' => btoken::LBRACE, + '[' => btoken::LBRACKET, + '(' => btoken::LPAREN, + '}' => btoken::RBRACE, + ']' => btoken::RBRACKET, + ')' => btoken::RPAREN, + ';' => btoken::SEMICOLON, + '?' => btoken::QUESTION, + }; + return (tok, loc); +}; + +fn is_name(r: rune, num: bool) bool = + ascii::isalpha(r) || r == '_' || r == '@' || (num && ascii::isdigit(r)); + +fn ncmp(a: const *void, b: const *void) int = { + let a = a: const *str, b = b: const *str; + return match (ascii::strcmp(*a, *b)) { + void => abort("non-ascii name"), // TODO: Bubble me up + i: int => i, + }; +}; + +fn lex_unicode(lex: *lexer, loc: location, n: size) (rune | error) = { + assert(n < 9); + let buf: [9]u8 = [0...]; + for (let i = 0z; i < n; i += 1z) { + let r = match (next(lex)?) { + io::EOF => return syntaxerr(loc, + "unexpected EOF scanning for escape"), + r: rune => r, + }; + if (!ascii::isxdigit(r)) { + return syntaxerr(loc, + "unexpected rune scanning for escape"); + }; + buf[i] = r: u32: u8; + }; + let s = strings::fromutf8_unsafe(buf[..n]); + return strconv::stou32b(s, strconv::base::HEX) as u32: rune; +}; + +fn lex_rune(lex: *lexer, loc: location) (rune | error) = { + let r = match (next(lex)?) { + io::EOF => return syntaxerr(loc, + "unexpected EOF scanning for rune"), + r: rune => r, + }; + if (r != '\\') { + return r; + }; + r = match (next(lex)?) { + io::EOF => return syntaxerr(loc, + "unexpected EOF scanning for escape"), + r: rune => r, + }; + return switch (r) { + '\\' => '\\', + '\'' => '\'', + '0' => '\0', + 'a' => '\a', + 'b' => '\b', + 'f' => '\f', + 'n' => '\n', + 'r' => '\r', + 't' => '\t', + 'v' => '\v', + '"' => '\"', + 'x' => lex_unicode(lex, loc, 2), + 'u' => lex_unicode(lex, loc, 4), + 'U' => lex_unicode(lex, loc, 8), + }; +}; + +fn lex_string( + lex: *lexer, + loc: location, +) ((token, location) | io::EOF | error) = { + let chars: []u8 = []; + for (true) match (next(lex)?) { + io::EOF => return syntaxerr(loc, "unexpected EOF scanning string literal"), + r: rune => + if (r == '"') break + else { + unget(lex, r); + r = lex_rune(lex, loc)?; + append(chars, ...utf8::encoderune(r)); + }, + }; + return (strings::fromutf8(chars): literal, loc); +}; + +fn lex_rn_str( + lex: *lexer, + loc: location, +) ((token, location) | io::EOF | error) = { + let r = match (next(lex)) { + r: rune => r, + (io::EOF | io::error) => abort(), + }; + switch (r) { + '\"' => return lex_string(lex, loc), + '\'' => void, + * => abort(), // Invariant + }; + + // Rune literal + let ret: (token, location) = (lex_rune(lex, loc)?: literal, loc); + match (next(lex)?) { + io::EOF => + return syntaxerr(loc, "unexpected EOF"), + n: rune => if (n != '\'') + return syntaxerr(loc, "expected \"\'\""), + }; + return ret; +}; + +fn lex_name( + lex: *lexer, + loc: location, +) ((token, location) | io::EOF | error) = { + let chars: []u8 = []; + match (next(lex)) { + r: rune => { + assert(is_name(r, false)); + append(chars, ...utf8::encoderune(r)); + }, + (io::EOF | io::error) => abort(), + }; + + for (true) match (next(lex)?) { + io::EOF => break, + r: rune => { + if (!is_name(r, true)) { + unget(lex, r); + break; + }; + append(chars, ...utf8::encoderune(r)); + }, + }; + + let n = strings::fromutf8(chars); + return match (sort::search(bmap[..btoken::LAST_KEYWORD+1], + size(str), &n, &ncmp)) { + // TODO: Validate that names are ASCII + null => (n: name: token, loc), + v: *void => { + let tok = v: uintptr - &bmap[0]: uintptr; + tok /= size(str): uintptr; + (tok: btoken: token, loc); + }, + }; +}; + +fn lex2( + lexr: *lexer, + loc: location, + r: rune, +) ((token, location) | io::EOF | error) = { + let n = match (next(lexr)?) { + io::EOF => io::EOF, + r: rune => r, + }; + let tok: token = switch (r) { + '^' => match (n) { + r: rune => switch (r) { + '^' => return (btoken::LXOR: token, loc), + '=' => return (btoken::BXOREQ: token, loc), + * => btoken::BXOR, + }, + io::EOF => btoken::BXOR, + }, + '*' => match (n) { + r: rune => switch (r) { + '=' => return (btoken::TIMESEQ: token, loc), + * => btoken::TIMES, + }, + io::EOF => btoken::TIMES, + }, + '/' => match (n) { + r: rune => switch (r) { + '=' => return (btoken::DIVEQ: token, loc), + '/' => { + // Comment + for (true) match (next(lexr)?) { + io::EOF => break, + r: rune => if (r == '\n') { + break; + }, + }; + return lex(lexr); + }, + * => btoken::DIV, + }, + io::EOF => btoken::DIV, + }, + '%' => match (n) { + r: rune => switch (r) { + '=' => return (btoken::MODEQ: token, loc), + * => btoken::MODULO, + }, + io::EOF => btoken::MODULO, + }, + '+' => match (n) { + r: rune => switch (r) { + '=' => return (btoken::PLUSEQ: token, loc), + * => btoken::PLUS, + }, + io::EOF => btoken::PLUS, + }, + '-' => match (n) { + r: rune => switch (r) { + '=' => return (btoken::MINUSEQ: token, loc), + * => btoken::MINUS, + }, + io::EOF => btoken::MINUS, + }, + ':' => match (n) { + r: rune => switch (r) { + ':' => return (btoken::DOUBLE_COLON: token, loc), + * => btoken::COLON, + }, + io::EOF => btoken::COLON, + }, + '!' => match (n) { + r: rune => switch (r) { + '=' => return (btoken::NEQUAL: token, loc), + * => btoken::LNOT, + }, + io::EOF => btoken::LNOT, + }, + '&' => match (n) { + r: rune => switch (r) { + '&' => return (btoken::LAND: token, loc), + '=' => return (btoken::ANDEQ: token, loc), + * => btoken::BAND, + }, + io::EOF => btoken::BAND, + }, + '|' => match (n) { + r: rune => switch (r) { + '|' => return (btoken::LOR: token, loc), + '=' => return (btoken::OREQ: token, loc), + * => btoken::BOR, + }, + io::EOF => btoken::BOR, + }, + '=' => match (n) { + r: rune => switch (r) { + '=' => return (btoken::LEQUAL: token, loc), + * => btoken::EQUAL, + }, + io::EOF => btoken::EQUAL, + }, + * => return syntaxerr(loc, "unknown token sequence"), + }; + unget(lexr, n); + return (tok, loc); +}; + +fn lex3( + lex: *lexer, + loc: location, + r: rune, +) ((token, location) | io::EOF | error) = { + let n = match (next(lex)?) { + io::EOF => return switch (r) { + '.' => (btoken::DOT: token, loc), + '<' => (btoken::LESS: token, loc), + '>' => (btoken::GREATER: token, loc), + }, + r: rune => r, + }; + return switch (r) { + '.' => lex3dot(lex, loc, n), + '<' => lex3lt(lex, loc, n), + '>' => lex3gt(lex, loc, n), + * => syntaxerr(loc, "unknown token sequence"), + }; +}; + +fn lex3dot( + lex: *lexer, + loc: location, + n: rune, +) ((token, location) | io::EOF | error) = { + let tok: token = switch (n) { + '.' => { + let q = match (next(lex)?) { + io::EOF => io::EOF, + r: rune => r, + }; + let t = match (q) { + r: rune => switch (r) { + '.' => return (btoken::ELLIPSIS: token, loc), + * => btoken::SLICE, + }, + io::EOF => btoken::SLICE, + }; + unget(lex, q); + t; + }, + * => { + unget(lex, n); + btoken::DOT; + } + }; + return (tok, loc); +}; + +fn lex3lt( + lex: *lexer, + loc: location, + n: rune, +) ((token, location) | io::EOF | error) = { + let tok: token = switch (n) { + '<' => { + let q = match (next(lex)?) { + io::EOF => io::EOF, + r: rune => r, + }; + let t = match (q) { + r: rune => switch (r) { + '=' => return (btoken::LSHIFTEQ: token, loc), + * => btoken::LSHIFT, + }, + io::EOF => btoken::LSHIFT, + }; + unget(lex, q); + t; + }, + '=' => btoken::LESSEQ, + * => { + unget(lex, n); + btoken::LESS; + } + }; + return (tok, loc); +}; + +fn lex3gt( + lex: *lexer, + loc: location, + n: rune, +) ((token, location) | io::EOF | error) = { + let tok: token = switch (n) { + '>' => { + let q = match (next(lex)?) { + io::EOF => io::EOF, + r: rune => r, + }; + let t = match (q) { + r: rune => switch (r) { + '=' => return (btoken::RSHIFTEQ: token, loc), + * => btoken::RSHIFT, + }, + io::EOF => btoken::RSHIFT, + }; + unget(lex, q); + t; + }, + '=' => btoken::GREATEREQ, + * => { + unget(lex, n); + btoken::GREATER; + } + }; + return (tok, loc); +}; + +// Unlex a single token. The next call to [lex] will return this token, location +// pair. Only one unlex is supported at a time; you must call [lex] before +// calling [unlex] again. +export fn unlex(lex: *lexer, tok: (token, location)) void = { + assert(lex.un is void, "attempted to unlex more than one token"); + lex.un = tok; +}; + +fn next(lex: *lexer) (rune | io::EOF | io::error) = { + match (lex.rb[0]) { + void => void, + r: (rune | io::EOF) => { + lex.rb[0] = lex.rb[1]; + lex.rb[1] = void; + return r; + }, + }; + + for (true) { + return match (bufio::scanrune(lex.in)) { + e: (io::EOF | io::error) => e, + r: rune => { + lexloc(lex, r); + r; + }, + }; + }; + + abort("unreachable"); +}; + +fn nextw(lex: *lexer) ((rune, location) | io::EOF | io::error) = { + for (true) { + let loc = mkloc(lex); + match (next(lex)) { + e: (io::error | io::EOF) => return e, + r: rune => if (!ascii::isspace(r)) { + return (r, loc); + }, + }; + }; + abort(); +}; + +fn lexloc(lex: *lexer, r: rune) void = { + switch (r) { + '\n' => { + lex.loc.0 += 1; + lex.loc.1 = 1; + }, + '\t' => lex.loc.1 += 8, + * => lex.loc.1 += 1, + }; +}; + +fn unget(lex: *lexer, r: (rune | io::EOF)) void = { + if (!(lex.rb[0] is void)) { + assert(lex.rb[1] is void, "ungot too many runes"); + lex.rb[1] = lex.rb[0]; + }; + lex.rb[0] = r; +}; + +fn mkloc(lex: *lexer) location = location { + path = lex.path, + line = lex.loc.0, + col = lex.loc.1, +}; + +fn syntaxerr(loc: location, why: str) error = (loc, why); diff --git a/vendor/tree-sitter-hare/example/limit.ha b/vendor/tree-sitter-hare/example/limit.ha new file mode 100644 index 000000000..563c01104 --- /dev/null +++ b/vendor/tree-sitter-hare/example/limit.ha @@ -0,0 +1,60 @@ +use strings; + +type limited_stream = struct { + stream: stream, + source: *stream, + limit: size, +}; + +fn limited_stream_new(source: *stream, limit: size) *limited_stream = { + return alloc(limited_stream { + stream = stream { + name = strings::dup(source.name), + closer = &limited_close, + ... + }, + source = source, + limit = limit, + }); +}; + +// Create an overlay stream that only allows a limited amount of bytes to be +// read from the underlying stream. +export fn limitreader(source: *stream, limit: size) *stream = { + let stream = limited_stream_new(source, limit); + stream.stream.reader = &limited_read; + return &stream.stream; +}; + +// Create an overlay stream that only allows a limited amount of bytes to be +// written to the underlying stream. +export fn limitwriter(source: *stream, limit: size) *stream = { + let stream = limited_stream_new(source, limit); + stream.stream.writer = &limited_write; + return &stream.stream; +}; + +fn limited_read(s: *stream, buf: []u8) (size | EOF | error) = { + let stream = s: *limited_stream; + if (len(buf) > stream.limit) { + buf = buf[..stream.limit]; + }; + stream.limit -= len(buf); + return read(stream.source, buf); +}; + +fn limited_write(s: *stream, buf: const []u8) (size | error) = { + let stream = s: *limited_stream; + let slice = if (len(buf) > stream.limit) { + buf[..stream.limit]; + } else { + buf[..]; + }; + stream.limit -= len(slice); + return write(stream.source, slice); +}; + +fn limited_close(s: *stream) void = { + free(s.name); + free(s); +}; diff --git a/vendor/tree-sitter-hare/example/limits.ha b/vendor/tree-sitter-hare/example/limits.ha new file mode 100644 index 000000000..3fc8d302f --- /dev/null +++ b/vendor/tree-sitter-hare/example/limits.ha @@ -0,0 +1,54 @@ +// Minimum value which can be stored in an i8 type. +export def I8_MIN: i8 = -128; + +// Maximum value which can be stored in an i8 type. +export def I8_MAX: i8 = 127; + +// Minimum value which can be stored in an i16 type. +export def I16_MIN: i16 = -32708; + +// Maximum value which can be stored in an i16 type. +export def I16_MAX: i16 = 32707; + +// Minimum value which can be stored in an i32 type. +export def I32_MIN: i32 = -2147483648; + +// Maximum value which can be stored in an i32 type. +export def I32_MAX: i32 = 2147483647; + +// Minimum value which can be stored in an i64 type +export def I64_MIN: i64 = -9223372036854775808; + +// Maximum value which can be stored in an i64 type. +export def I64_MAX: i64 = 9223372036854775807; + + +// Minimum value which can be stored in a u8 type. +export def U8_MIN: u8 = 0; + +// Maximum value which can be stored in a u8 type. +export def U8_MAX: u8 = 255; + +// Minimum value which can be stored in a u16 type +export def U16_MIN: u16 = 0; + +// Maximum value which can be stored in a u16 type. +export def U16_MAX: u16 = 65535; + +// Minimum value which can be stored in a u32 type +export def U32_MIN: u32 = 0; + +// Maximum value which can be stored in a u32 type. +export def U32_MAX: u32 = 4294967295; + +// Minimum value which can be stored in a u64 type +export def U64_MIN: u64 = 0; + +// Maximum value which can be stored in a u64 type. +export def U64_MAX: u64 = 18446744073709551615; + +// Maximum value which can be stored in a rune. +export def RUNE_MIN: rune = U32_MIN: rune; + +// Maximum value which can be stored in a rune. +export def RUNE_MAX: rune = U32_MAX: rune; diff --git a/vendor/tree-sitter-hare/example/little.ha b/vendor/tree-sitter-hare/example/little.ha new file mode 100644 index 000000000..1bf79d838 --- /dev/null +++ b/vendor/tree-sitter-hare/example/little.ha @@ -0,0 +1,73 @@ +// Reads a u16 from a buffer in little-endian order. +export fn legetu16(buf: []u8) u16 = { + return + (buf[1] << 8u16) | + (buf[0] << 0); +}; + +// Writes a u16 into a buffer in little-endian order. +export fn leputu16(buf: []u8, in: u16) void = { + buf[0] = (in >> 0): u8; + buf[1] = (in >> 8): u8; +}; + +// Reads a u32 from a buffer in little-endian order. +export fn legetu32(buf: []u8) u32 = { + return + (buf[3] << 24u32) | + (buf[2] << 16u32) | + (buf[1] << 8u32) | + (buf[0] << 0); +}; + +// Writes a u32 into a buffer in little-endian order. +export fn leputu32(buf: []u8, in: u32) void = { + buf[0] = (in): u8; + buf[1] = (in >> 8): u8; + buf[2] = (in >> 16): u8; + buf[3] = (in >> 24): u8; +}; + +// Reads a u64 from a buffer in little-endian order. +export fn legetu64(buf: []u8) u64 = { + return + (buf[7] << 56u64) | + (buf[6] << 48u64) | + (buf[5] << 40u64) | + (buf[4] << 32u64) | + (buf[3] << 24u64) | + (buf[2] << 16u64) | + (buf[1] << 8u64) | + (buf[0] << 0); +}; + +// Writes a u64 into a buffer in little-endian order. +export fn leputu64(buf: []u8, in: u64) void = { + buf[0] = (in >> 0): u8; + buf[1] = (in >> 8): u8; + buf[2] = (in >> 16): u8; + buf[3] = (in >> 24): u8; + buf[4] = (in >> 32): u8; + buf[5] = (in >> 40): u8; + buf[6] = (in >> 48): u8; + buf[7] = (in >> 56): u8; +}; + +@test fn little() void = { + let buf: [8]u8 = [0...]; + leputu16(buf, 0x1234); + assert(buf[0] == 0x34 && buf[1] == 0x12); + assert(legetu16(buf) == 0x1234); + + leputu32(buf, 0x12345678); + assert(buf[0] == 0x78 && buf[1] == 0x56 + && buf[2] == 0x34 && buf[3] == 0x12); + assert(legetu32(buf) == 0x12345678); + + leputu64(buf, 0x1234567887654321); + assert(buf[0] == 0x21 && buf[1] == 0x43 + && buf[2] == 0x65 && buf[3] == 0x87 + && buf[4] == 0x78 && buf[5] == 0x56 + && buf[6] == 0x34 && buf[7] == 0x12); + assert(legetu64(buf) == 0x1234567887654321); +}; diff --git a/vendor/tree-sitter-hare/example/main.ha b/vendor/tree-sitter-hare/example/main.ha new file mode 100644 index 000000000..f66c269ef --- /dev/null +++ b/vendor/tree-sitter-hare/example/main.ha @@ -0,0 +1,25 @@ +use getopt; +use os; + +export fn main() void = { + let help: []getopt::help = [ + "compile, run, and test Hare programs", + "", "args...", + ]; + let cmd = getopt::parse(os::args, help...); + defer getopt::finish(&cmd); + if (len(cmd.args) < 1) { + getopt::printusage(os::stderr, os::args[0], help...); + os::exit(1); + }; + if (cmd.args[0] == "build") build(cmd.args) + else if (cmd.args[0] == "cache") cache(cmd.args) + else if (cmd.args[0] == "deps") deps(cmd.args) + else if (cmd.args[0] == "run") run(cmd.args) + else if (cmd.args[0] == "test") test(cmd.args) + else if (cmd.args[0] == "version") version(cmd.args) + else { + getopt::printusage(os::stderr, os::args[0], help...); + os::exit(1); + }; +}; diff --git a/vendor/tree-sitter-hare/example/malloc.ha b/vendor/tree-sitter-hare/example/malloc.ha new file mode 100644 index 000000000..eac4cd2d1 --- /dev/null +++ b/vendor/tree-sitter-hare/example/malloc.ha @@ -0,0 +1,163 @@ +// This is a simple memory allocator, based on Appel, Andrew W., and David A. +// Naumann. "Verified sequential malloc/free." It is not thread-safe. +// +// Large allocations are handled with mmap. +// +// For small allocations, we set up 50 bins, where each bin is responsible for +// 16 different allocation sizes (e.g. bin 1 handles allocations from 10 thru 26 +// bytes); except for the first and last bin, which are responsible for fewer +// than 16 allocation sizes. +// +// Each bin is 1MiB (BIGBLOCK) in size. We ceil the allocation size to the +// largest size supported for this bin, then break the bin up into smaller +// blocks. Each block is structured as [{sz: size, data..., link: *void}...]; +// where sz is the size of this (small) block, data is is set aside for the +// user's actual allocation, and link is a pointer to the next bin's data field. +// +// In short, a bin for a particular size is pre-filled with all allocations of +// that size, and the first word of each allocation is set to a pointer to the +// next allocation. As such, malloc becomes: +// +// 1. Look up bin; pre-fill if not already allocated +// 2. Let p = bin; bin = *bin; return p +// +// Then, free is simply: +// 1. Look up bin +// 2. *p = bin; +// 3. bin = p; +// +// Note that over time this can cause the ordering of the allocations in each +// bin to become non-continuous. This has no consequences for performance or +// correctness. + +def ALIGN: size = 2; +def WORD: size = size(size); +def WASTE: size = WORD * ALIGN - WORD; +def BIGBLOCK: size = (2 << 16) * WORD; + +let bins: [50]nullable *void = [null...]; + +fn bin2size(b: size) size = ((b + 1) * ALIGN - 1) * WORD; + +fn size2bin(s: size) size = { + assert(s <= bin2size(len(bins) - 1), "Size exceeds maximum for bin"); + return (s + (WORD * (ALIGN - 1) - 1)) / (WORD * ALIGN); +}; + +// Allocates n bytes of memory and returns a pointer to them, or null if there +// is insufficient memory. +export fn malloc(n: size) nullable *void = { + return if (n == 0) null + else if (n > bin2size(len(bins) - 1)) malloc_large(n) + else malloc_small(n); +}; + +fn malloc_large(n: size) nullable *void = { + let p = segmalloc(n + WASTE + WORD); + if (p == null) { + return null; + }; + let bsize = (p: uintptr + WASTE: uintptr): *[1]size; + bsize[0] = n; + return (p: uintptr + WASTE: uintptr + WORD: uintptr): nullable *void; +}; + +fn malloc_small(n: size) nullable *void = { + const b = size2bin(n); + let p = bins[b]; + if (p == null) { + p = fill_bin(b); + if (p != null) { + bins[b] = p; + }; + }; + return if (p != null) { + let q = *(p: **void); + bins[b] = q; + p; + } else null; +}; + +fn fill_bin(b: size) nullable *void = { + const s = bin2size(b); + let p = segmalloc(BIGBLOCK); + return if (p == null) null else list_from_block(s, p: uintptr); +}; + +fn list_from_block(s: size, p: uintptr) nullable *void = { + const nblocks = (BIGBLOCK - WASTE) / (s + WORD); + + let q = p + WASTE: uintptr; // align q+WORD + for (let j = 0z; j != nblocks - 1; j += 1) { + let sz = q: *size; + let useralloc = q + WORD: uintptr; // aligned + let next = (useralloc + s: uintptr + WORD: uintptr): *void; + *sz = s; + *(useralloc: **void) = next; + q += s: uintptr + WORD: uintptr; + }; + + // Terminate last block: + (q: *[1]size)[0] = s; + *((q + 1: uintptr): *nullable *void) = null; + + // Return first block: + return (p + WASTE: uintptr + WORD: uintptr): *void; +}; + +// Frees a pointer previously allocated with [malloc]. +export @symbol("rt.free") fn free_(_p: nullable *void) void = { + if (_p != null) { + let p = _p: *void; + let bsize = (p: uintptr - size(size): uintptr): *[1]size; + let s = bsize[0]; + if (s <= bin2size(len(bins) - 1)) free_small(p, s) + else free_large(p, s); + }; +}; + +fn free_large(_p: *void, s: size) void = { + let p = (_p: uintptr - (WASTE: uintptr + WORD: uintptr)): *void; + segfree(p, s + WASTE + WORD); +}; + +fn free_small(p: *void, s: size) void = { + let b = size2bin(s); + let q = bins[b]; + *(p: **void) = q; + bins[b] = p: nullable *void; +}; + +// Changes the allocation size of a pointer to n bytes. If n is smaller than +// the prior allocation, it is truncated; otherwise the allocation is expanded +// and the values of the new bytes are undefined. May return a different pointer +// than the one given if there is insufficient space to expand the pointer +// in-place. Returns null if there is insufficient memory to support the +// request. +export fn realloc(_p: nullable *void, n: size) nullable *void = { + if (n == 0) { + free_(_p); + return null; + } else if (_p == null) { + return malloc(n); + }; + + let p = _p: *void; + let bsize = (p: uintptr - size(size): uintptr): *size; + let s = *bsize; + if (s >= n) { + return p; + }; + + if (n < bin2size(len(bins) - 1) && size2bin(n) == size2bin(s)) { + return p; + }; + + let new = malloc(n); + if (new != null) { + memcpy(new: *void, p, s); + free(p); + }; + + return new; +}; diff --git a/vendor/tree-sitter-hare/example/manifest.ha b/vendor/tree-sitter-hare/example/manifest.ha new file mode 100644 index 000000000..5912bc26f --- /dev/null +++ b/vendor/tree-sitter-hare/example/manifest.ha @@ -0,0 +1,333 @@ +use bufio; +use bytes; +use encoding::hex; +use encoding::utf8; +use errors; +use fmt; +use fs; +use hare::ast; +use hare::unparse; +use io; +use os; +use path; +use strconv; +use strings; +use time; + +// The manifest file format is a series of line-oriented records. Lines starting +// with # are ignored. +// +// - "version" indicates the manifest format version, currently 1. +// - "input" is an input file, and its fields are the file hash, path, inode, +// and mtime as a Unix timestamp. +// - "module" is a version of a module, and includes the module hash and the set +// of input hashes which produce it. + +def VERSION: int = 1; + +fn getinput(in: []input, hash: []u8) nullable *input = { + for (let i = 0z; i < len(in); i += 1) { + if (bytes::equal(in[i].hash, hash)) { + return &in[i]; + }; + }; + return null; +}; + +// Loads the module manifest from the build cache for the given ident. The +// return value borrows the ident parameter. If the module is not found, an +// empty manifest is returned. +export fn manifest_load(ctx: *context, ident: ast::ident) (manifest | error) = { + let manifest = manifest { + ident = ident, + inputs = [], + versions = [], + }; + let ipath = identpath(manifest.ident); + defer free(ipath); + let cachedir = path::join(ctx.cache, ipath); + defer free(cachedir); + + let mpath = path::join(cachedir, "manifest"); + defer free(mpath); + + // TODO: We can probably eliminate these locks by using atomic writes + // instead + let l = lock(ctx.fs, cachedir)?; + defer unlock(ctx.fs, cachedir, l); + + let file = match (fs::open(ctx.fs, mpath, fs::flags::RDONLY)) { + errors::noentry => return manifest, + err: fs::error => return err, + file: *io::stream => file, + }; + defer io::close(file); + + let inputs: []input = [], versions: []version = []; + + let buf: [4096]u8 = [0...]; + let file = bufio::buffered(file, buf, []); + for (true) { + let line = match (bufio::scanline(file)?) { + io::EOF => break, + line: []u8 => match (strings::try_fromutf8(line)) { + // Treat an invalid manifest as empty + utf8::invalid => return manifest, + s: str => s, + }, + }; + defer free(line); + + if (strings::has_prefix(line, "#")) { + continue; + }; + + let tok = strings::tokenize(line, " "); + let kind = match (strings::next_token(&tok)) { + void => continue, + s: str => s, + }; + + if (kind == "version") { + let ver = match (strings::next_token(&tok)) { + void => return manifest, + s: str => s, + }; + match (strconv::stoi(ver)) { + v: int => if (v != VERSION) { + return manifest; + }, + * => return manifest, + }; + } else if (kind == "input") { + let hash = match (strings::next_token(&tok)) { + void => return manifest, s: str => s, + }, path = match (strings::next_token(&tok)) { + void => return manifest, s: str => s, + }, inode = match (strings::next_token(&tok)) { + void => return manifest, s: str => s, + }, mtime = match (strings::next_token(&tok)) { + void => return manifest, s: str => s, + }; + + let hash = match (hex::decode(hash)) { + * => return manifest, + b: []u8 => b, + }; + let inode = match (strconv::stoz(inode)) { + * => return manifest, + z: size => z, + }; + let mtime = match (strconv::stoi64(mtime)) { + * => return manifest, + i: i64 => time::from_unix(i), + }; + + let parsed = parse_name(path); + let ftype = match (type_for_ext(path)) { + void => return manifest, + ft: filetype => ft, + }; + + append(inputs, input { + hash = hash, + path = strings::dup(path), + ft = ftype, + stat = fs::filestat { + mask = fs::stat_mask::MTIME | fs::stat_mask::INODE, + mtime = mtime, + inode = inode, + }, + basename = strings::dup(parsed.0), + tags = parsed.2, + }); + } else if (kind == "module") { + let modhash = match (strings::next_token(&tok)) { + void => return manifest, s: str => s, + }; + let modhash = match (hex::decode(modhash)) { + * => return manifest, + b: []u8 => b, + }; + + let minputs: []input = []; + for (true) { + let hash = match (strings::next_token(&tok)) { + void => break, + s: str => s, + }; + let hash = match (hex::decode(hash)) { + * => return manifest, + b: []u8 => b, + }; + defer free(hash); + + let input = match (getinput(inputs, hash)) { + null => return manifest, + i: *input => i, + }; + append(minputs, *input); + }; + + append(versions, version { + hash = modhash, + inputs = minputs, + }); + } else { + return manifest; + }; + + // Check for extra tokens + match (strings::next_token(&tok)) { + void => void, + s: str => return manifest, + }; + }; + + manifest.inputs = inputs; + manifest.versions = versions; + return manifest; +}; + +// Returns true if the desired module version is present and current in this +// manifest. +export fn current(manifest: *manifest, version: *version) bool = { + // TODO: This is kind of dumb. What we really need to do is: + // 1. Update scan to avoid hashing the file if a manifest is present, + // and indicate that the hash is cached somewhere in the type. Get an + // up-to-date stat. + // 2. In [current], test if the inode and mtime are equal to the + // manifest version. If so, presume the file is up-to-date. If not, + // check the hash and update the manifest to the new inode/mtime if + // the hash matches. If not, the module is not current; rebuild. + let cached: nullable *version = null; + for (let i = 0z; i < len(manifest.versions); i += 1) { + if (bytes::equal(manifest.versions[i].hash, version.hash)) { + cached = &manifest.versions[i]; + break; + }; + }; + let cached = match (cached) { + null => return false, + v: *version => v, + }; + + assert(len(cached.inputs) == len(version.inputs)); + for (let i = 0z; i < len(cached.inputs); i += 1) { + let a = cached.inputs[i], b = cached.inputs[i]; + assert(a.path == b.path); + let ast = a.stat, bst = b.stat; + if (ast.inode != bst.inode + || time::compare(ast.mtime, bst.mtime) != 0) { + return false; + }; + }; + return true; +}; + +// Writes a module manifest to the build cache. +export fn manifest_write(ctx: *context, manifest: *manifest) (void | error) = { + let ipath = identpath(manifest.ident); + defer free(ipath); + let cachedir = path::join(ctx.cache, ipath); + defer free(cachedir); + + let mpath = path::join(cachedir, "manifest"); + defer free(mpath); + + let l = lock(ctx.fs, cachedir)?; + defer unlock(ctx.fs, cachedir, l); + + let fd = fs::create(ctx.fs, mpath, 0o644)?; + defer io::close(fd); + + let ident = unparse::identstr(manifest.ident); + defer free(ident); + fmt::fprintfln(fd, "# {}", ident)?; + fmt::fprintln(fd, "# This file is an internal Hare implementation detail.")?; + fmt::fprintln(fd, "# The format is not stable.")?; + fmt::fprintfln(fd, "version {}", VERSION)?; + for (let i = 0z; i < len(manifest.inputs); i += 1) { + const input = manifest.inputs[i]; + let hash = hex::encodestr(input.hash); + defer free(hash); + + const want = fs::stat_mask::INODE | fs::stat_mask::MTIME; + assert(input.stat.mask & want == want); + fmt::fprintfln(fd, "input {} {} {} {}", + hash, input.path, input.stat.inode, + time::unix(input.stat.mtime)); + }; + + for (let i = 0z; i < len(manifest.versions); i += 1) { + const ver = manifest.versions[i]; + let hash = hex::encodestr(ver.hash); + defer free(hash); + + fmt::fprintf(fd, "module {}", hash); + + for (let j = 0z; j < len(ver.inputs); j += 1) { + let hash = hex::encodestr(ver.inputs[i].hash); + defer free(hash); + + fmt::fprintf(fd, " {}", hash); + }; + + fmt::fprintln(fd); + }; +}; + +fn lock(fs: *fs::fs, cachedir: str) (*io::stream | error) = { + // XXX: I wonder if this should be some generic function in fs or + // something + match (os::mkdirs(cachedir)) { + errors::exists => void, + void => void, + e: fs::error => return e, + }; + let lockpath = path::join(cachedir, "manifest.lock"); + defer free(lockpath); + + let logged = false; + for (true) { + match (fs::create(fs, lockpath, 0o644, fs::flags::EXCL)) { + fd: *io::stream => return fd, + (errors::busy | errors::exists) => void, + err: fs::error => return err, + }; + if (!logged) { + fmt::errorfln("Waiting for lock on {}...", lockpath); + logged = true; + }; + time::sleep(1 * time::SECOND); + }; + + abort("Unreachable"); +}; + +fn unlock(fs: *fs::fs, cachedir: str, s: *io::stream) void = { + let lockpath = path::join(cachedir, "manifest.lock"); + defer free(lockpath); + match (fs::remove(fs, lockpath)) { + void => void, + err: fs::error => abort("Error removing module lock"), + }; +}; + +fn input_finish(in: *input) void = { + free(in.hash); + free(in.path); + free(in.basename); + tags_free(in.tags); +}; + +// Frees resources associated with this manifest. +export fn manifest_finish(m: *manifest) void = { + for (let i = 0z; i < len(m.inputs); i += 1) { + input_finish(&m.inputs[i]); + }; + + for (let i = 0z; i < len(m.versions); i += 1) { + free(m.versions[i].inputs); + }; +}; diff --git a/vendor/tree-sitter-hare/example/md5.ha b/vendor/tree-sitter-hare/example/md5.ha new file mode 100644 index 000000000..91c0e0f0e --- /dev/null +++ b/vendor/tree-sitter-hare/example/md5.ha @@ -0,0 +1,232 @@ +use hash; +use io; +use crypto::math; +use endian; + +// The size, in bytes, of a MD5 digest. +export def SIZE: size = 16; + +def chunk: size = 64; +def init0: u32 = 0x67452301; +def init1: u32 = 0xEFCDAB89; +def init2: u32 = 0x98BADCFE; +def init3: u32 = 0x10325476; + +type digest = struct { + hash: hash::hash, + h: [4]u32, + x: [chunk]u8, + nx: size, + ln: size, +}; + +// Creates a [hash::hash] which computes a MD5 hash as defined in RFC 1321. Note +// that MD5 is cryptographically broken and should not be used for secure +// applications. Where possible, applications are encouraged to use [sha256] or +// [sha512] instead. +export fn md5() *hash::hash = { + let md5 = alloc(digest { + hash = hash::hash { + stream = io::stream { + writer = &write, + closer = &close, + ... + }, + sum = &sum, + reset = &reset, + sz = SIZE, + ... + }, + }); + let hash = &md5.hash; + hash::reset(hash); + return hash; +}; + +fn write(st: *io::stream, buf: const []u8) (size | io::error) = { + let h = st: *digest; + let b: []u8 = buf; + let nn = len(buf); + + h.ln += nn; + + if (h.nx > 0) { + // Compute how many bytes can be copied into h.x + let r = len(h.x) - h.nx; + let n = if (nn > r) r else nn; + h.x[h.nx..] = b[..n]; + h.nx += n; + if (h.nx == chunk) { + block(h, h.x[..]); + h.nx = 0; + }; + b = b[n..]; + }; + if (len(b) >= chunk) { + let n = len(b) & ~(chunk - 1); + block(h, b[..n]); + b = b[n..]; + }; + if (len(b) > 0) { + let n = len(b); + h.x[..n] = b[..]; + h.nx = n; + }; + return nn; +}; + +fn close(st: *io::stream) void = free(st); + +fn reset(h: *hash::hash) void = { + let h = h: *digest; + h.h[0] = init0; + h.h[1] = init1; + h.h[2] = init2; + h.h[3] = init3; + h.nx = 0; + h.ln = 0; +}; + +fn sum(h: *hash::hash) []u8 = { + let h = h: *digest; + let copy = *h; + let h = © + + // Padding. Add a 1 bit and 0 bits until 56 bytes mod 64. + let ln = h.ln; + let tmp: [1 + 63 + 8]u8 = [0x80, 0...]; + const pad = (55 - ln) % 64; + endian::leputu32(tmp[1+pad..], (ln << 3) : u32); + write(&h.hash.stream, tmp[..1+pad+8]); // append the length in bits + + assert(h.nx == 0); + + // Where we write the digest + let d: [SIZE]u8 = [0...]; + endian::leputu32(d[0..], h.h[0]); + endian::leputu32(d[4..], h.h[1]); + endian::leputu32(d[8..], h.h[2]); + endian::leputu32(d[12..], h.h[3]); + + let slice: []u8 = alloc([], SIZE); + append(slice, ...d); + return slice; +}; + +// A generic, pure Hare version of the MD5 block step +fn block(h: *digest, p: []u8) void = { + // load state + let a = h.h[0]; + let b = h.h[1]; + let c = h.h[2]; + let d = h.h[3]; + + for (len(p) >= chunk; p = p[chunk..]) { + + // save current state + let aa = a, bb = b, cc = c, dd = d; + + // load input block + let x0 = endian::legetu32(p[4 * 0x0..]); + let x0 = endian::legetu32(p[4 * 0x0..]); + let x1 = endian::legetu32(p[4 * 0x1..]); + let x2 = endian::legetu32(p[4 * 0x2..]); + let x3 = endian::legetu32(p[4 * 0x3..]); + let x4 = endian::legetu32(p[4 * 0x4..]); + let x5 = endian::legetu32(p[4 * 0x5..]); + let x6 = endian::legetu32(p[4 * 0x6..]); + let x7 = endian::legetu32(p[4 * 0x7..]); + let x8 = endian::legetu32(p[4 * 0x8..]); + let x9 = endian::legetu32(p[4 * 0x9..]); + let xa = endian::legetu32(p[4 * 0xa..]); + let xb = endian::legetu32(p[4 * 0xb..]); + let xc = endian::legetu32(p[4 * 0xc..]); + let xd = endian::legetu32(p[4 * 0xd..]); + let xe = endian::legetu32(p[4 * 0xe..]); + let xf = endian::legetu32(p[4 * 0xf..]); + + // round 1 + a = b + math::rotl32((((c^d)&b)^d)+a+x0+0xd76aa478, 7); + d = a + math::rotl32((((b^c)&a)^c)+d+x1+0xe8c7b756, 12); + c = d + math::rotl32((((a^b)&d)^b)+c+x2+0x242070db, 17); + b = c + math::rotl32((((d^a)&c)^a)+b+x3+0xc1bdceee, 22); + a = b + math::rotl32((((c^d)&b)^d)+a+x4+0xf57c0faf, 7); + d = a + math::rotl32((((b^c)&a)^c)+d+x5+0x4787c62a, 12); + c = d + math::rotl32((((a^b)&d)^b)+c+x6+0xa8304613, 17); + b = c + math::rotl32((((d^a)&c)^a)+b+x7+0xfd469501, 22); + a = b + math::rotl32((((c^d)&b)^d)+a+x8+0x698098d8, 7); + d = a + math::rotl32((((b^c)&a)^c)+d+x9+0x8b44f7af, 12); + c = d + math::rotl32((((a^b)&d)^b)+c+xa+0xffff5bb1, 17); + b = c + math::rotl32((((d^a)&c)^a)+b+xb+0x895cd7be, 22); + a = b + math::rotl32((((c^d)&b)^d)+a+xc+0x6b901122, 7); + d = a + math::rotl32((((b^c)&a)^c)+d+xd+0xfd987193, 12); + c = d + math::rotl32((((a^b)&d)^b)+c+xe+0xa679438e, 17); + b = c + math::rotl32((((d^a)&c)^a)+b+xf+0x49b40821, 22); + + // round 2 + a = b + math::rotl32((((b^c)&d)^c)+a+x1+0xf61e2562, 5); + d = a + math::rotl32((((a^b)&c)^b)+d+x6+0xc040b340, 9); + c = d + math::rotl32((((d^a)&b)^a)+c+xb+0x265e5a51, 14); + b = c + math::rotl32((((c^d)&a)^d)+b+x0+0xe9b6c7aa, 20); + a = b + math::rotl32((((b^c)&d)^c)+a+x5+0xd62f105d, 5); + d = a + math::rotl32((((a^b)&c)^b)+d+xa+0x02441453, 9); + c = d + math::rotl32((((d^a)&b)^a)+c+xf+0xd8a1e681, 14); + b = c + math::rotl32((((c^d)&a)^d)+b+x4+0xe7d3fbc8, 20); + a = b + math::rotl32((((b^c)&d)^c)+a+x9+0x21e1cde6, 5); + d = a + math::rotl32((((a^b)&c)^b)+d+xe+0xc33707d6, 9); + c = d + math::rotl32((((d^a)&b)^a)+c+x3+0xf4d50d87, 14); + b = c + math::rotl32((((c^d)&a)^d)+b+x8+0x455a14ed, 20); + a = b + math::rotl32((((b^c)&d)^c)+a+xd+0xa9e3e905, 5); + d = a + math::rotl32((((a^b)&c)^b)+d+x2+0xfcefa3f8, 9); + c = d + math::rotl32((((d^a)&b)^a)+c+x7+0x676f02d9, 14); + b = c + math::rotl32((((c^d)&a)^d)+b+xc+0x8d2a4c8a, 20); + + // round 3 + a = b + math::rotl32((b^c^d)+a+x5+0xfffa3942, 4); + d = a + math::rotl32((a^b^c)+d+x8+0x8771f681, 11); + c = d + math::rotl32((d^a^b)+c+xb+0x6d9d6122, 16); + b = c + math::rotl32((c^d^a)+b+xe+0xfde5380c, 23); + a = b + math::rotl32((b^c^d)+a+x1+0xa4beea44, 4); + d = a + math::rotl32((a^b^c)+d+x4+0x4bdecfa9, 11); + c = d + math::rotl32((d^a^b)+c+x7+0xf6bb4b60, 16); + b = c + math::rotl32((c^d^a)+b+xa+0xbebfbc70, 23); + a = b + math::rotl32((b^c^d)+a+xd+0x289b7ec6, 4); + d = a + math::rotl32((a^b^c)+d+x0+0xeaa127fa, 11); + c = d + math::rotl32((d^a^b)+c+x3+0xd4ef3085, 16); + b = c + math::rotl32((c^d^a)+b+x6+0x04881d05, 23); + a = b + math::rotl32((b^c^d)+a+x9+0xd9d4d039, 4); + d = a + math::rotl32((a^b^c)+d+xc+0xe6db99e5, 11); + c = d + math::rotl32((d^a^b)+c+xf+0x1fa27cf8, 16); + b = c + math::rotl32((c^d^a)+b+x2+0xc4ac5665, 23); + + // round 4 + a = b + math::rotl32((c^(b|~d))+a+x0+0xf4292244, 6); + d = a + math::rotl32((b^(a|~c))+d+x7+0x432aff97, 10); + c = d + math::rotl32((a^(d|~b))+c+xe+0xab9423a7, 15); + b = c + math::rotl32((d^(c|~a))+b+x5+0xfc93a039, 21); + a = b + math::rotl32((c^(b|~d))+a+xc+0x655b59c3, 6); + d = a + math::rotl32((b^(a|~c))+d+x3+0x8f0ccc92, 10); + c = d + math::rotl32((a^(d|~b))+c+xa+0xffeff47d, 15); + b = c + math::rotl32((d^(c|~a))+b+x1+0x85845dd1, 21); + a = b + math::rotl32((c^(b|~d))+a+x8+0x6fa87e4f, 6); + d = a + math::rotl32((b^(a|~c))+d+xf+0xfe2ce6e0, 10); + c = d + math::rotl32((a^(d|~b))+c+x6+0xa3014314, 15); + b = c + math::rotl32((d^(c|~a))+b+xd+0x4e0811a1, 21); + a = b + math::rotl32((c^(b|~d))+a+x4+0xf7537e82, 6); + d = a + math::rotl32((b^(a|~c))+d+xb+0xbd3af235, 10); + c = d + math::rotl32((a^(d|~b))+c+x2+0x2ad7d2bb, 15); + b = c + math::rotl32((d^(c|~a))+b+x9+0xeb86d391, 21); + + // add saved state + a += aa; + b += bb; + c += cc; + d += dd; + }; + + // save state + h.h[0] = a; + h.h[1] = b; + h.h[2] = c; + h.h[3] = d; +}; diff --git a/vendor/tree-sitter-hare/example/memcpy.ha b/vendor/tree-sitter-hare/example/memcpy.ha new file mode 100644 index 000000000..cd63770bc --- /dev/null +++ b/vendor/tree-sitter-hare/example/memcpy.ha @@ -0,0 +1,6 @@ +export fn memcpy(dest: *void, src: *void, amt: size) void = { + let a = dest: *[*]u8, b = src: *[*]u8; + for (let i = 0z; i < amt; i += 1) { + a[i] = b[i]; + }; +}; diff --git a/vendor/tree-sitter-hare/example/memset.ha b/vendor/tree-sitter-hare/example/memset.ha new file mode 100644 index 000000000..01b99465f --- /dev/null +++ b/vendor/tree-sitter-hare/example/memset.ha @@ -0,0 +1,6 @@ +export fn memset(dest: *void, val: u8, amt: size) void = { + let a = dest: *[*]u8; + for (let i = 0z; i < amt; i += 1) { + a[i] = val; + }; +}; diff --git a/vendor/tree-sitter-hare/example/names.ha b/vendor/tree-sitter-hare/example/names.ha new file mode 100644 index 000000000..f2cc50429 --- /dev/null +++ b/vendor/tree-sitter-hare/example/names.ha @@ -0,0 +1,85 @@ +use bytes; +use encoding::utf8; +use strings; + +// Returns the directory name for a given path. For a path to a file name, this +// returns the directory in which that file resides. For a path to a directory, +// this returns the path to its parent directory. The return value is borrowed +// from the input, use [dup] to extend its lifetime. +export fn dirname(path: str) str = { + let b = strings::toutf8(path); + let i = match (bytes::rindex(b, PATHSEP)) { + void => return path, + z: size => z, + }; + if (i == 0) { + i += 1; + }; + return strings::fromutf8_unsafe(b[..i]); +}; + +@test fn dirname() void = { + assert(dirname("/foo/bar") == "/foo"); + assert(dirname("/foo") == "/"); + assert(dirname("/") == "/"); + assert(dirname("foo/bar") == "foo"); + assert(dirname("foo") == "foo"); +}; + +// Returns the final component of a given path. For a path to a file name, this +// returns the file name. For a path to a directory, this returns the directory +// name. The return value is borrowed from the input, use [dup] to extend its +// lifetime. +export fn basename(path: str) str = { + let b = strings::toutf8(path); + let i = match (bytes::rindex(b, PATHSEP)) { + void => return path, + z: size => if (z + 1 < len(b)) z + 1z else 0z, + }; + return strings::fromutf8_unsafe(b[i..]); +}; + +@test fn basename() void = { + assert(basename("/foo/bar") == "bar"); + assert(basename("/foo") == "foo"); + assert(basename("/") == "/"); + assert(basename("foo/bar") == "bar"); + assert(basename("foo") == "foo"); +}; + +// Returns the file name and extension for a path. The return value is borrowed +// from the input, see [strings::dup] to extend its lifetime. +// +// The extension includes the '.' character. +// +// extension("foo/example") => ("example", "") +// extension("foo/example.txt") => ("example", ".txt") +// extension("foo/example.tar.gz") => ("example", ".tar.gz") +export fn extension(p: str) (str, str) = { + let p = basename(p); + let b = strings::toutf8(p); + if (len(b) == 0 || b[len(b) - 1] == PATHSEP) { + return (p, ""); + }; + let b = strings::toutf8(p); + let i = match (bytes::index(b, '.': u32: u8)) { + void => return (p, ""), + z: size => z, + }; + let e = b[i..]; + let n = b[..i]; + return (strings::fromutf8_unsafe(n), strings::fromutf8_unsafe(e)); +}; + +@test fn extension() void = { + assert(extension("").0 == ""); + assert(extension("").1 == ""); + assert(extension("foo/bar").0 == "bar"); + assert(extension("foo/bar").1 == ""); + assert(extension("foo/bar.txt").0 == "bar"); + assert(extension("foo/bar.txt").1 == ".txt"); + assert(extension("foo/bar.tar.gz").0 == "bar"); + assert(extension("foo/bar.tar.gz").1 == ".tar.gz"); + assert(extension("foo.bar/baz.ha").0 == "baz"); + assert(extension("foo.bar/baz.ha").1 == ".ha"); +}; diff --git a/vendor/tree-sitter-hare/example/network.ha b/vendor/tree-sitter-hare/example/network.ha new file mode 100644 index 000000000..bc7143816 --- /dev/null +++ b/vendor/tree-sitter-hare/example/network.ha @@ -0,0 +1,40 @@ +// Converts a u16 from host order to network order. +export fn htonu16(in: u16) u16 = { + if (host == &big) return in; + return in >> 8 | (in & 0xFF) << 8; +}; + +// Converts a u32 from host order to network order. +export fn htonu32(in: u32) u32 = { + if (host == &big) return in; + return in >> 24 | in >> 8 & 0xFF00 | in << 8 & 0xFF0000 | in << 24; +}; + +// Converts a u64 from host order to network order. +export fn htonu64(in: u64) u64 = { + if (host == &big) return in; + return (htonu32(in: u32): u64 << 32u64) | htonu32((in >> 32): u32): u64; +}; + +@test fn hton() void = { + if (host == &big) return; + assert(htonu16(0xCAFE) == 0xFECA); + assert(htonu32(0xDEADBEEF) == 0xEFBEADDE); + assert(htonu64(0xCAFEBABEDEADBEEF) == 0xEFBEADDEBEBAFECA); +}; + +// Converts a u16 from network order to host order. +export fn ntohu16(in: u16) u16 = htonu16(in); + +// Converts a u32 from network order to host order. +export fn ntohu32(in: u32) u32 = htonu32(in); + +// Converts a u64 from network order to host order. +export fn ntohu64(in: u64) u64 = htonu64(in); + +@test fn ntoh() void = { + if (host == &big) return; + assert(htonu16(0xFECA) == 0xCAFE); + assert(htonu32(0xEFBEADDE) == 0xDEADBEEF); + assert(htonu64(0xEFBEADDEBEBAFECA) == 0xCAFEBABEDEADBEEF); +}; diff --git a/vendor/tree-sitter-hare/example/nice+linux.ha b/vendor/tree-sitter-hare/example/nice+linux.ha new file mode 100644 index 000000000..bcfd38244 --- /dev/null +++ b/vendor/tree-sitter-hare/example/nice+linux.ha @@ -0,0 +1,23 @@ +use errors; +use rt; + +// Adds the argument to the niceness of the current process. The input should be +// between -20 and 19 (inclusive); lower numbers represent a higher priority. +// Generally, you must have elevated permissions to reduce your niceness, but +// not to increase it. +export fn nice(inc: int) (void | errors::opaque) = { + let prio = inc; + if (inc > -40 && inc <= 40) { + prio += rt::getpriority(rt::PRIO_PROCESS, 0) as int; + }; + if (prio > 19) { + prio = 19; + }; + if (prio < -20) { + prio = -20; + }; + return match (rt::setpriority(rt::PRIO_PROCESS, 0, prio)) { + void => void, + err: rt::errno => errors::errno(err), + }; +}; diff --git a/vendor/tree-sitter-hare/example/numeric.ha b/vendor/tree-sitter-hare/example/numeric.ha new file mode 100644 index 000000000..31710546d --- /dev/null +++ b/vendor/tree-sitter-hare/example/numeric.ha @@ -0,0 +1,96 @@ +use types; + +// Converts any [types::signed] to a string in a given base. The return value is +// statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn signedtosb(n: types::signed, b: base) const str = { + return match (n) { + i: int => itosb(i, b), + i: i8 => i8tosb(i, b), + i: i16 => i16tosb(i, b), + i: i32 => i32tosb(i, b), + i: i64 => i64tosb(i, b), + }; +}; + +// Converts any [types::signed] to a string in base 10. The return value is +// statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn signedtos(n: types::signed) const str = signedtosb(n, base::DEC); + +// Converts any [types::unsigned] to a string in a given base. The return value +// is statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn unsignedtosb(n: types::unsigned, b: base) const str = { + return match (n) { + u: size => ztosb(u, b), + u: uint => utosb(u, b), + u: u8 => u8tosb(u, b), + u: u16 => u16tosb(u, b), + u: u32 => u32tosb(u, b), + u: u64 => u64tosb(u, b), + }; +}; + +// Converts any [types::unsigned] to a string in base 10. The return value is +// statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn unsignedtos(n: types::unsigned) const str = unsignedtosb(n, base::DEC); + +// Converts any [types::integer] to a string in a given base, which must be 2, +// 8, 10, or 16. The return value is statically allocated and will be +// overwritten on subsequent calls; see [strings::dup] to duplicate the result. +export fn integertosb(n: types::integer, b: base) const str = { + return match (n) { + s: types::signed => signedtosb(s, b), + u: types::unsigned => unsignedtosb(u, b), + }; +}; + +// Converts any [types::integer] to a string in base 10. The return value is +// statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn integertos(n: types::integer) const str = integertosb(n, base::DEC); + +// Converts any [types::floating] to a string in a given base. The return value +// is statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn floatingtosb(n: types::floating, b: base) const str = { + abort(); // TODO +}; + +// Converts any [types::floating] to a string in base 10. The return value is +// statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn floatingtos(n: types::floating) const str = floatingtosb(n, base::DEC); + +// Converts any [types::numeric] to a string in a given base. The return value +// is statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn numerictosb(n: types::numeric, b: base) const str = { + return match (n) { + i: types::integer => integertosb(i, b), + f: types::floating => floatingtosb(f, b), + }; +}; + +// Converts any [types::numeric] to a string in base 10. The return value is +// statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn numerictos(n: types::numeric) const str = numerictosb(n, base::DEC); + +@test fn numeric() void = { + const cases: [_]types::numeric = [ + 42u8, 1337u16, 1337u32, 1337u64, 42i8, -42i8, 1337i16, -1337i16, + 1337i32, -1337i32, 1337i64, -1337i64, 1337i, -1337i, 1337u, + -1337i, + ]; + const expected = [ + "42", "1337", "1337", "1337", "42", "-42", "1337", "-1337", + "1337", "-1337", "1337", "-1337", "1337", "-1337", "1337", + "-1337", + ]; + for (let i = 0z; i < len(cases); i += 1) { + assert(numerictos(cases[i]) == expected[i]); + }; +}; diff --git a/vendor/tree-sitter-hare/example/opaque.ha b/vendor/tree-sitter-hare/example/opaque.ha new file mode 100644 index 000000000..72c7c3ca8 --- /dev/null +++ b/vendor/tree-sitter-hare/example/opaque.ha @@ -0,0 +1,26 @@ +// An "opaque" error is used as a portable error type for an underlying error +// which is implementation-specific. It provides a function which can be used to +// produce a string describing the error, and a small storage area for arbitrary +// implementation-specific storage. +// +// The following example shows the usage of this type for custom errors: +// +// fn wraperror(err: myerror) error::opaque = { +// static assert(size(myerror) <= size(error::opaque_data)); +// let wrapped = opaque { strerror = &opaque_strerror, ... }; +// let myptr = &wrapped.data: *myerror; +// *myptr = err; +// }; +// +// fn opaque_strerror(err: *opaque_data) const str = { +// let ptr = &err: *myerr; +// return strerror(*ptr); +// }; +export type opaque = struct { + strerror: *fn(op: *opaque_data) const str, + data: opaque_data, +}!; + +// Up to 24 bytes of arbitrary data that the opaque error type may use for +// domain-specific storage. +export type opaque_data = [24]u8; diff --git a/vendor/tree-sitter-hare/example/open.ha b/vendor/tree-sitter-hare/example/open.ha new file mode 100644 index 000000000..54cdfbc0e --- /dev/null +++ b/vendor/tree-sitter-hare/example/open.ha @@ -0,0 +1,27 @@ +use fs; +use io; +use path; + +// Opens a file. +// +// If no flags are provided, [fs::flags::RDONLY], [fs::flags::NOCTTY], +// [fs::flags::CLOEXEC] are used when opening the file. If you pass your own +// flags, it is recommended that you add the latter two unless you know that you +// do not want them. +export fn open(path: str, flags: fs::flags...) (*io::stream | fs::error) = + fs::open(cwd, path, flags...); + +// Creates a new file and opens it for writing. +// +// If no flags are provided, [fs::flags::WRONLY], [fs::flags::NOCTTY], +// [fs::flags::CLOEXEC] are used when opening the file. If you pass your own +// flags, it is recommended that you add the latter two unless you know that you +// do not want them. +// +// Only the permission bits of the mode are used. If other bits are set, they +// are discarded. +export fn create( + path: str, + mode: fs::mode, + flags: fs::flags... +) (*io::stream | fs::error) = fs::create(cwd, path, mode, flags...); diff --git a/vendor/tree-sitter-hare/example/ops.ha b/vendor/tree-sitter-hare/example/ops.ha new file mode 100644 index 000000000..d8e3430a6 --- /dev/null +++ b/vendor/tree-sitter-hare/example/ops.ha @@ -0,0 +1,110 @@ +use encoding::utf8; +use io; +use strings; + +// Appends zero or more strings to an [io::stream]. The stream needn't be a +// strio stream, but it's often efficient if it is. Returns the number of bytes +// written, or an error. +export fn concat(st: *io::stream, strs: str...) (size | io::error) = { + let n = 0z; + for (let i = 0z; i < len(strs); i += 1) { + let q = 0z; + let buf = strings::toutf8(strs[i]); + for (q < len(buf)) { + let w = io::write(st, buf[q..])?; + n += w; + q -= w; + }; + }; + return n; +}; + +@test fn concat() void = { + let st = dynamic(); + defer io::close(st); + concat(st, "hello") as size; + concat(st, " ", "world") as size; + assert(string(st) == "hello world"); +}; + +// Joins several strings together by a delimiter and writes them to a stream. +// The stream needn't be a strio stream, but it's often more efficient if it is. +// Returns the number of bytes written, or an error. +export fn join(st: *io::stream, delim: str, strs: str...) (size | io::error) = { + let n = 0z; + let delim = strings::toutf8(delim); + for (let i = 0z; i < len(strs); i += 1) { + let q = 0z; + let buf = strings::toutf8(strs[i]); + for (q < len(buf)) { + let w = io::write(st, buf[q..])?; + n += w; + q -= w; + }; + if (i + 1 < len(strs)) { + let q = 0z; + for (q < len(delim)) { + let w = io::write(st, delim[q..])?; + n += w; + q -= w; + }; + }; + }; + return n; +}; + +@test fn join() void = { + let st = dynamic(); + defer io::close(st); + join(st, "::", "hello", "world") as size; + assert(string(st) == "hello::world"); + truncate(st); + join(st, "::") as size; + assert(string(st) == ""); + truncate(st); + join(st, "::", "foo") as size; + assert(string(st) == "foo"); +}; + +// Joins several strings together by a delimiter and writes them to a stream, in +// reverse order. The stream needn't be a strio stream, but it's often more +// efficient if it is. Returns the number of bytes written, or an error. +export fn rjoin(st: *io::stream, delim: str, strs: str...) (size | io::error) = { + let n = 0z; + let delim = strings::toutf8(delim); + for (let i = len(strs); i > 0; i -= 1) { + let q = 0z; + let buf = strings::toutf8(strs[i - 1]); + for (q < len(buf)) { + let w = io::write(st, buf[q..])?; + n += w; + q -= w; + }; + if (i - 1 > 0) { + let q = 0z; + for (q < len(delim)) { + let w = io::write(st, delim[q..])?; + n += w; + q -= w; + }; + }; + }; + return n; +}; + +@test fn rjoin() void = { + let st = dynamic(); + defer io::close(st); + rjoin(st, "::", "hello", "world") as size; + assert(string(st) == "world::hello"); + truncate(st); + rjoin(st, "::") as size; + assert(string(st) == ""); + truncate(st); + rjoin(st, "::", "foo") as size; + assert(string(st) == "foo"); +}; + +// Appends a rune to a stream. +export fn appendrune(st: *io::stream, r: rune) (size | io::error) = + io::write(st, utf8::encoderune(r)); diff --git a/vendor/tree-sitter-hare/example/parser.ha b/vendor/tree-sitter-hare/example/parser.ha new file mode 100644 index 000000000..c944fbf69 --- /dev/null +++ b/vendor/tree-sitter-hare/example/parser.ha @@ -0,0 +1,199 @@ +use ascii; +use bufio; +use encoding::utf8; +use io; +use strings; +use strio; + +// Returns an XML parser which reads from a stream. The caller must call +// [parser_free] when they are finished with it. +// +// Hare's XML parser only supports UTF-8 encoded input files. +// +// This function will attempt to read the XML prologue before returning, and +// will return an error if it is not valid. +export fn parse(in: *io::stream) (*parser | error) = { + // XXX: The main reason we allocate this instead of returning it on the + // stack is so that we have a consistent address for the bufio buffer. + // This is kind of lame, maybe we can avoid that. + let par = alloc(parser { + orig = in, + in = in, + ... + }); + if (!bufio::isbuffered(in)) { + par.in = bufio::buffered(par.in, par.buf[..], []); + }; + prolog(par)?; + return par; +}; + +// Frees the resources associated with this parser. Does not close the +// underlying stream. +export fn parser_free(par: *parser) void = { + if (par.in != par.orig) { + io::close(par.in); + }; + free(par); +}; + +// Scans for and returns the next [token]. The caller must pass the returned +// token to [token_free] when they're done with it. +export fn scan(par: *parser) (token | void | error) = { + want(par, OPTWS)?; + let rn: rune = match (bufio::scanrune(par.in)?) { + io::EOF => return void, + rn: rune => rn, + }; + bufio::unreadrune(par.in, rn); + return switch (par.state) { + state::ELEMENT => switch (rn) { + '<' => { + let el = scan_element(par); + par.state = state::ATTRS; + el; + }, + * => syntaxerr, + }, + state::ATTRS => { + abort(); // TODO + }, + }; +}; + +fn scan_element(par: *parser) (token | error) = { + want(par, '<')?; + return scan_name(par)?: elementstart; +}; + +fn scan_name(par: *parser) (str | error) = { + let buf = strio::dynamic(); + + const rn = match (bufio::scanrune(par.in)?) { + io::EOF => return syntaxerr, + rn: rune => rn, + }; + if (!isnamestart(rn)) { + return syntaxerr; + }; + strio::appendrune(buf, rn); + + for (true) match (bufio::scanrune(par.in)?) { + io::EOF => return syntaxerr, + rn: rune => if (isname(rn)) { + strio::appendrune(buf, rn); + } else { + bufio::unreadrune(par.in, rn); + break; + }, + }; + + return strio::finish(buf); +}; + +fn prolog(par: *parser) (void | error) = { + want(par, " break, + rn: rune => if (!ascii::isdigit(rn)) { + bufio::unreadrune(par.in, rn); + break; + }, + }; + want(par, quot)?; + + // TODO: Replace this with attribute() when it's written + let hadws = want(par, OPTWS)?; + let encoding = match (bufio::scanrune(par.in)) { + io::EOF => false, + rn: rune => { + bufio::unreadrune(par.in, rn); + hadws && rn == 'e'; + }, + }; + if (encoding) { + want(par, "encoding", OPTWS, '=', OPTWS)?; + let quot = quote(par)?; + match (want(par, "UTF-8")) { + syntaxerr => return utf8::invalid, + err: error => return err, + bool => void, + }; + want(par, quot)?; + }; + + let hadws = want(par, OPTWS)?; + let standalone = match (bufio::scanrune(par.in)) { + io::EOF => false, + rn: rune => { + bufio::unreadrune(par.in, rn); + hadws && rn == 's'; + }, + }; + if (standalone) { + want(par, "standalone", OPTWS, '=', OPTWS)?; + let quot = quote(par)?; + // TODO: Should we support standalone="no"? + want(par, "yes", quot)?; + }; + + want(par, OPTWS, "?>")?; + // TODO: Parse doctypedecl & misc + return; +}; + +// Mandatory if true +type whitespace = bool; +def WS: whitespace = true; +def OPTWS: whitespace = false; + +fn quote(par: *parser) (rune | error) = { + return match (bufio::scanrune(par.in)?) { + * => return syntaxerr, + rn: rune => switch (rn) { + '"', '\'' => rn, + * => return syntaxerr, + }, + }; +}; + +fn want(par: *parser, tok: (rune | str | whitespace)...) (bool | error) = { + let hadws = false; + for (let i = 0z; i < len(tok); i += 1) match (tok[i]) { + x: rune => { + let have = match (bufio::scanrune(par.in)?) { + * => return syntaxerr, + rn: rune => rn, + }; + if (have != x) { + return syntaxerr; + }; + }, + x: str => { + let iter = strings::iter(x); + for (true) match (strings::next(&iter)) { + rn: rune => want(par, rn)?, + void => break, + }; + }, + ws: whitespace => { + let n = 0; + for (true; n += 1) match (bufio::scanrune(par.in)?) { + io::EOF => break, + rn: rune => if (!ascii::isspace(rn)) { + bufio::unreadrune(par.in, rn); + break; + }, + }; + if (ws && n < 1) { + return syntaxerr; + }; + hadws = n >= 1; + }, + }; + return hadws; +}; diff --git a/vendor/tree-sitter-hare/example/passwd.ha b/vendor/tree-sitter-hare/example/passwd.ha new file mode 100644 index 000000000..2ac95a8ff --- /dev/null +++ b/vendor/tree-sitter-hare/example/passwd.ha @@ -0,0 +1,135 @@ +use bufio; +use io; +use os; +use strconv; +use strings; + +// An invalid entry was encountered during parsing. +export type invalid = void!; + +// A Unix-like password database entry. +export type pwent = struct { + // Login name + username: str, + // Optional encrypted password + password: str, + // Numerical user ID + uid: uint, + // Numerical group ID + gid: uint, + // User name or comment field + comment: str, + // User home directory + homedir: str, + // Optional user command interpreter + shell: str, +}; + +// Reads a Unix-like password entry from a stream. The caller must free the +// result using [unix::passwd::pwent_finish]. +export fn nextpw(stream: *io::stream) (pwent | io::EOF | io::error | invalid) = { + let line = match (bufio::scanline(stream)?) { + io::EOF => return io::EOF, + ln: []u8 => ln, + }; + let line = match (strings::try_fromutf8(line)) { + s: str => s, + * => return invalid, + }; + + let fields = strings::split(line, ":"); + defer free(fields); + + if (len(fields) != 7) { + return invalid; + }; + + let uid = match (strconv::stou(fields[2])) { + u: uint => u, + * => return invalid, + }; + + let gid = match (strconv::stou(fields[3])) { + u: uint => u, + * => return invalid, + }; + + return pwent { + // Borrows the return value of bufio::scanline + username = fields[0], + password = fields[1], + uid = uid, + gid = gid, + comment = fields[4], + homedir = fields[5], + shell = fields[6], + }; +}; + +// Frees resources associated with [pwent]. +export fn pwent_finish(ent: pwent) void = { + // pwent fields are sliced from one allocated string returned by + // bufio::scanline. Freeing the first field frees the entire string in + // one go. + free(ent.username); +}; + +// Looks up a user by name in a Unix-like password file. It expects a password +// database file at /etc/passwd. Aborts if that file doesn't exist or is not +// properly formatted. +// +// See [unix::passwd::nextpw] for low-level parsing API. +export fn getuser(username: str) (pwent | void) = { + let file = match (os::open("/etc/passwd")) { + s: *io::stream => s, + * => abort("Can't open /etc/passwd"), + }; + defer io::close(file); + + for (true) { + let ent = match (nextpw(file)) { + e: pwent => e, + io::EOF => break, + * => abort("/etc/passwd entry is invalid"), + }; + defer pwent_finish(ent); + + if (ent.username == username) { + return ent; + }; + }; + + return; +}; + +@test fn nextpw() void = { + let buf = bufio::fixed(strings::toutf8( + "sircmpwn:x:1000:1000:sircmpwn's comment:/home/sircmpwn:/bin/mrsh\n" + "alex:x:1001:1001::/home/alex:/bin/zsh"), io::mode::READ); + defer free(buf); + + let ent = nextpw(buf) as pwent; + defer pwent_finish(ent); + + assert(ent.username == "sircmpwn"); + assert(ent.password == "x"); + assert(ent.uid == 1000); + assert(ent.gid == 1000); + assert(ent.comment == "sircmpwn's comment"); + assert(ent.homedir == "/home/sircmpwn"); + assert(ent.shell == "/bin/mrsh"); + + let ent = nextpw(buf) as pwent; + defer pwent_finish(ent); + + assert(ent.username == "alex"); + assert(ent.password == "x"); + assert(ent.uid == 1001); + assert(ent.gid == 1001); + assert(ent.comment == ""); + assert(ent.homedir == "/home/alex"); + assert(ent.shell == "/bin/zsh"); + + // No more entries + assert(nextpw(buf) is io::EOF); +}; diff --git a/vendor/tree-sitter-hare/example/plan.ha b/vendor/tree-sitter-hare/example/plan.ha new file mode 100644 index 000000000..a34e2d71a --- /dev/null +++ b/vendor/tree-sitter-hare/example/plan.ha @@ -0,0 +1,197 @@ +use fmt; +use hare::ast; +use hare::module; +use os::exec; +use os; +use path; +use strings; +use temp; + +type status = enum { + SCHEDULED, + COMPLETE, + SKIP, +}; + +type task = struct { + status: status, + depend: []*task, + output: str, + cmd: []str, +}; + +fn task_free(task: *task) void = { + free(task.depend); + free(task.output); + free(task.cmd); + free(task); +}; + +type modcache = struct { + hash: u32, + task: *task, + ident: ast::ident, + version: module::version, +}; + +type plan = struct { + context: *module::context, + workdir: str, + counter: uint, + scheduled: []*task, + complete: []*task, + script: str, + environ: [](str, str), + modmap: [64][]modcache, +}; + +fn mkplan(ctx: *module::context) plan = { + const rtdir = match (module::lookup(ctx, ["rt"])) { + err: module::error => fmt::fatal("Error resolving rt: {}", + module::strerror(err)), + ver: module::version => ver.basedir, + }; + return plan { + context = ctx, + workdir = temp::dir(), + script = path::join(rtdir, "hare.sc"), + environ = alloc([ + (strings::dup("HARECACHE"), strings::dup(ctx.cache)), + ]), + ... + }; +}; + +fn plan_finish(plan: *plan) void = { + os::rmdirall(plan.workdir); + free(plan.workdir); + + for (let i = 0z; i < len(plan.complete); i += 1) { + let task = plan.complete[i]; + task_free(task); + }; + free(plan.complete); + + for (let i = 0z; i < len(plan.scheduled); i += 1) { + let task = plan.scheduled[i]; + task_free(task); + }; + free(plan.scheduled); + + for (let i = 0z; i < len(plan.environ); i += 1) { + free(plan.environ[i].0); + free(plan.environ[i].1); + }; + free(plan.environ); + + for (let i = 0z; i < len(plan.modmap); i += 1) { + free(plan.modmap[i]); + }; +}; + +fn plan_execute(plan: *plan, verbose: bool) void = { + for (len(plan.scheduled) != 0) { + let next: nullable *task = null; + let i = 0z; + for (i < len(plan.scheduled); i += 1) { + let task = plan.scheduled[i]; + let eligible = true; + for (let j = 0z; j < len(task.depend); j += 1) { + if (task.depend[j].status == status::SCHEDULED) { + eligible = false; + break; + }; + }; + if (eligible) { + next = task; + break; + }; + }; + // TODO: This can be a type assertion + let task = match (next) { + null => abort(), + t: *task => t, + }; + + match (execute(plan, task, verbose)) { + err: exec::error => fmt::fatal("Error: {}: {}", + task.cmd[0], exec::strerror(err)), + err: exec::exit_status! => fmt::fatal("Error: {}: {}", + task.cmd[0], exec::exitstr(err)), + void => void, + }; + + task.status = status::COMPLETE; + + delete(plan.scheduled[i]); + append(plan.complete, task); + }; + + update_modcache(plan); +}; + +fn update_cache(plan: *plan, mod: modcache) void = { + let manifest = module::manifest { + ident = mod.ident, + inputs = mod.version.inputs, + versions = [mod.version], + }; + match (module::manifest_write(plan.context, &manifest)) { + err: module::error => fmt::fatal( + "Error updating module cache: {}", + module::strerror(err)), + void => void, + }; +}; + +fn update_modcache(plan: *plan) void = { + for (let i = 0z; i < len(plan.modmap); i += 1) { + let mods = plan.modmap[i]; + if (len(mods) == 0) { + continue; + }; + for (let j = 0z; j < len(mods); j += 1) { + if (mods[j].task.status == status::COMPLETE) { + update_cache(plan, mods[j]); + }; + }; + }; +}; + +fn execute( + plan: *plan, + task: *task, + verbose: bool, +) (void | exec::error | exec::exit_status!) = { + if (verbose) { + for (let i = 0z; i < len(task.cmd); i += 1) { + fmt::errorf("{} ", task.cmd[i]); + }; + fmt::errorln(); + }; + + let cmd = exec::cmd(task.cmd[0], task.cmd[1..]...)?; + for (let i = 0z; i < len(plan.environ); i += 1) { + let e = plan.environ[i]; + exec::setenv(&cmd, e.0, e.1); + }; + + let proc = exec::start(&cmd)?; + let st = exec::wait(&proc)?; + return exec::check(&st); +}; + +fn mkfile(plan: *plan, ext: str) str = { + static let namebuf: [32]u8 = [0...]; + const name = fmt::bsprintf(namebuf, "temp.{}.{}", + plan.counter, ext); + plan.counter += 1; + return path::join(plan.workdir, name); +}; + +fn mkdepends(t: *task...) []*task = { + // XXX: This should just be one alloc call + let deps: []*task = alloc([], len(t)); + append(deps, ...t); + return deps; +}; diff --git a/vendor/tree-sitter-hare/example/platformstart.ha b/vendor/tree-sitter-hare/example/platformstart.ha new file mode 100644 index 000000000..69a1471bc --- /dev/null +++ b/vendor/tree-sitter-hare/example/platformstart.ha @@ -0,0 +1,7 @@ +export @noreturn fn start_linux(iv: *[*]uintptr) void = { + // TODO: Find & parse auxv + argc = iv[0]: size; + argv = &iv[1]: *[*]*char; + envp = &argv[argc + 1]: *[*]nullable *char; + start_ha(); +}; diff --git a/vendor/tree-sitter-hare/example/println.ha b/vendor/tree-sitter-hare/example/println.ha new file mode 100644 index 000000000..06374aad9 --- /dev/null +++ b/vendor/tree-sitter-hare/example/println.ha @@ -0,0 +1,35 @@ +use rt; + +// Prints strings to stdout, separated by spaces, and followed by a newline. +// +// The output is unbuffered, and may not have good performance. This is only +// recommended for debugging purposes. See [fmt::println] instead. +export fn println(msgs: str...) void = { + for (let i = 0z; i < len(msgs); i += 1) { + let msg = msgs[i]; + rt::write(1, *(&msg: **void): *const char, len(msg)); + if (i + 1 < len(msgs)) { + const sp = " "; + rt::write(1, *(&sp: **void): *const char, 1); + }; + }; + const linefeed = "\n"; + rt::write(1, *(&linefeed: **void): *const char, 1); +}; + +// Prints strings to stderr, separated by spaces, and followed by a newline. +// +// The output is unbuffered, and may not have good performance. This is only +// recommended for debugging purposes. See [fmt::errorln] instead. +export fn errorln(msgs: str...) void = { + for (let i = 0z; i < len(msgs); i += 1) { + let msg = msgs[i]; + rt::write(2, *(&msg: **void): *const char, len(msg)); + if (i + 1 < len(msgs)) { + const sp = " "; + rt::write(2, *(&sp: **void): *const char, 1); + }; + }; + const linefeed = "\n"; + rt::write(2, *(&linefeed: **void): *const char, 1); +}; diff --git a/vendor/tree-sitter-hare/example/process+linux.ha b/vendor/tree-sitter-hare/example/process+linux.ha new file mode 100644 index 000000000..8f71eb4ef --- /dev/null +++ b/vendor/tree-sitter-hare/example/process+linux.ha @@ -0,0 +1,87 @@ +use errors; +use rt; +use fmt; +// TODO: Add function to wait on all/any children + +fn rusage(st: *status, ru: *rt::rusage) void = { + st.rusage.maxrss = ru.ru_maxrss; + st.rusage.minflt = ru.ru_minflt; + st.rusage.majflt = ru.ru_majflt; + st.rusage.inblock = ru.ru_inblock; + st.rusage.oublock = ru.ru_oublock; + st.rusage.nvcsw = ru.ru_nvcsw; + st.rusage.nivcsw = ru.ru_nivcsw; +}; + +// Waits for a process to complete, then returns its status information. +export fn wait(proc: *process) (status | error) = { + let ru: rt::rusage = rt::rusage { ... }; + let st: status = status { ... }; + match (rt::wait4(*proc, &st.status, 0, &ru)) { + err: rt::errno => errors::errno(err), + pid: int => assert(pid == *proc), + }; + rusage(&st, &ru); + return st; +}; + +// Checks for process completion, returning its status information on +// completion, or void if it is still running. +export fn peek(proc: *process) (status | void | error) = { + let ru: rt::rusage = rt::rusage { ... }; + let st: status = status { ... }; + match (rt::wait4(*proc, &st.status, 0, &ru)) { + err: rt::errno => errors::errno(err), + pid: int => switch (pid) { + 0 => return void, + * => assert(pid == *proc), + }, + }; + rusage(&st, &ru); + return st; +}; + +// The exit status code of a process. +export type exited = int; + +// The signal number which caused a process to terminate. +export type signaled = int; + +// The exit status of a process. +export type exit_status = (exited | signaled); + +// Returns a human friendly string describing the exit status. +export fn exitstr(status: exit_status) const str = { + static let buf: [1024]u8 = [0...]; + return match (status) { + i: exited => switch (i) { + 0 => "exited normally", + * => fmt::bsprintf(buf, "exited with status {}", i: int), + }, + // TODO: Add signal name + s: signaled => fmt::bsprintf(buf, "exited with signal {}", s: int), + }; +}; + +// Returns the exit status of a completed process. +export fn exit(stat: *status) exit_status = { + if (rt::wifexited(stat.status)) { + return rt::wexitstatus(stat.status): exited; + }; + if (rt::wifsignaled(stat.status)) { + return rt::wtermsig(stat.status): signaled; + }; + abort("Unexpected exit status"); +}; + +// Checks the exit status of a completed process, returning void if successful, +// or its status code as an error type if not. +export fn check(stat: *status) (void | exit_status!) = { + if (rt::wifexited(stat.status)) { + return switch (rt::wexitstatus(stat.status)) { + 0 => void, + * => exit(stat), + }; + }; + return exit(stat); +}; diff --git a/vendor/tree-sitter-hare/example/properties.ha b/vendor/tree-sitter-hare/example/properties.ha new file mode 100644 index 000000000..ca6ff8c64 --- /dev/null +++ b/vendor/tree-sitter-hare/example/properties.ha @@ -0,0 +1,1130 @@ +// Unicode character blocks. See Blocks.txt in the UCD. +export type blk = enum { + ADLAM, + AEGEAN_NUMBERS, + AHOM, + ALCHEMICAL, + ALPHABETIC_PF, + ANATOLIAN_HIEROGLYPHS, + ANCIENT_GREEK_MUSIC, + ANCIENT_GREEK_NUMBERS, + ANCIENT_SYMBOLS, + ARABIC, + ARABIC_EXT_A, + ARABIC_MATH, + ARABIC_PF_A, + ARABIC_PF_B, + ARABIC_SUP, + ARMENIAN, + ARROWS, + ASCII, + AVESTAN, + BALINESE, + BAMUM, + BAMUM_SUP, + BASSA_VAH, + BATAK, + BENGALI, + BHAIKSUKI, + BLOCK_ELEMENTS, + BOPOMOFO, + BOPOMOFO_EXT, + BOX_DRAWING, + BRAHMI, + BRAILLE, + BUGINESE, + BUHID, + BYZANTINE_MUSIC, + CARIAN, + CAUCASIAN_ALBANIAN, + CHAKMA, + CHAM, + CHEROKEE, + CHEROKEE_SUP, + CHESS_SYMBOLS, + CHORASMIAN, + CJK, + CJK_COMPAT, + CJK_COMPAT_FORMS, + CJK_COMPAT_IDEOGRAPHS, + CJK_COMPAT_IDEOGRAPHS_SUP, + CJK_EXT_A, + CJK_EXT_B, + CJK_EXT_C, + CJK_EXT_D, + CJK_EXT_E, + CJK_EXT_F, + CJK_EXT_G, + CJK_RADICALS_SUP, + CJK_STROKES, + CJK_SYMBOLS, + COMPAT_JAMO, + CONTROL_PICTURES, + COPTIC, + COPTIC_EPACT_NUMBERS, + COUNTING_ROD, + CUNEIFORM, + CUNEIFORM_NUMBERS, + CURRENCY_SYMBOLS, + CYPRIOT_SYLLABARY, + CYRILLIC, + CYRILLIC_EXT_A, + CYRILLIC_EXT_B, + CYRILLIC_EXT_C, + CYRILLIC_SUP, + DESERET, + DEVANAGARI, + DEVANAGARI_EXT, + DIACRITICALS, + DIACRITICALS_FOR_SYMBOLS, + DIACRITICALS_SUP, + DIACRITICALS_EXT, + DINGBATS, + DIVES_AKURU, + DOGRA, + DOMINO, + DUPLOYAN, + EARLY_DYNASTIC_CUNEIFORM, + EGYPTIAN_HIEROGLYPHS, + EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS, + ELBASAN, + ELYMAIC, + EMOTICONS, + ENCLOSED_ALPHANUM, + ENCLOSED_ALPHANUM_SUP, + ENCLOSED_CJK, + ENCLOSED_IDEOGRAPHIC_SUP, + ETHIOPIC, + ETHIOPIC_EXT, + ETHIOPIC_EXT_A, + ETHIOPIC_SUP, + GEOMETRIC_SHAPES, + GEOMETRIC_SHAPES_EXT, + GEORGIAN, + GEORGIAN_EXT, + GEORGIAN_SUP, + GLAGOLITIC, + GLAGOLITIC_SUP, + GOTHIC, + GRANTHA, + GREEK, + GREEK_EXT, + GUJARATI, + GUNJALA_GONDI, + GURMUKHI, + HALF_AND_FULL_FORMS, + HALF_MARKS, + HANGUL, + HANIFI_ROHINGYA, + HANUNOO, + HATRAN, + HEBREW, + HIGH_PU_SURROGATES, + HIGH_SURROGATES, + HIRAGANA, + IDC, + IDEOGRAPHIC_SYMBOLS, + IMPERIAL_ARAMAIC, + INDIC_NUMBER_FORMS, + INDIC_SIYAQ_NUMBERS, + INSCRIPTIONAL_PAHLAVI, + INSCRIPTIONAL_PARTHIAN, + IPA_EXT, + JAMO, + JAMO_EXT_A, + JAMO_EXT_B, + JAVANESE, + KAITHI, + KANA_EXT_A, + KANA_SUP, + KANBUN, + KANGXI, + KANNADA, + KATAKANA, + KATAKANA_EXT, + KAYAH_LI, + KHAROSHTHI, + KHITAN_SMALL_SCRIPT, + KHMER, + KHMER_SYMBOLS, + KHOJKI, + KHUDAWADI, + LAO, + LATIN_1_SUP, + LATIN_EXT_A, + LATIN_EXT_ADDITIONAL, + LATIN_EXT_B, + LATIN_EXT_C, + LATIN_EXT_D, + LATIN_EXT_E, + LEPCHA, + LETTERLIKE_SYMBOLS, + LIMBU, + LINEAR_A, + LINEAR_B_IDEOGRAMS, + LINEAR_B_SYLLABARY, + LISU, + LISU_SUP, + LOW_SURROGATES, + LYCIAN, + LYDIAN, + MAHAJANI, + MAHJONG, + MAKASAR, + MALAYALAM, + MANDAIC, + MANICHAEAN, + MARCHEN, + MASARAM_GONDI, + MATH_ALPHANUM, + MATH_OPERATORS, + MAYAN_NUMERALS, + MEDEFAIDRIN, + MEETEI_MAYEK, + MEETEI_MAYEK_EXT, + MENDE_KIKAKUI, + MEROITIC_CURSIVE, + MEROITIC_HIEROGLYPHS, + MIAO, + MISC_ARROWS, + MISC_MATH_SYMBOLS_A, + MISC_MATH_SYMBOLS_B, + MISC_PICTOGRAPHS, + MISC_SYMBOLS, + MISC_TECHNICAL, + MODI, + MODIFIER_LETTERS, + MODIFIER_TONE_LETTERS, + MONGOLIAN, + MONGOLIAN_SUP, + MRO, + MUSIC, + MULTANI, + MYANMAR, + MYANMAR_EXT_A, + MYANMAR_EXT_B, + NABATAEAN, + NANDINAGARI, + NB, + NEW_TAI_LUE, + NEWA, + NKO, + NUMBER_FORMS, + NUSHU, + NYIAKENG_PUACHUE_HMONG, + OCR, + OGHAM, + OL_CHIKI, + OLD_HUNGARIAN, + OLD_ITALIC, + OLD_NORTH_ARABIAN, + OLD_PERMIC, + OLD_PERSIAN, + OLD_SOGDIAN, + OLD_SOUTH_ARABIAN, + OLD_TURKIC, + ORIYA, + ORNAMENTAL_DINGBATS, + OSAGE, + OSMANYA, + OTTOMAN_SIYAQ_NUMBERS, + PAHAWH_HMONG, + PALMYRENE, + PAU_CIN_HAU, + PHAGS_PA, + PHAISTOS, + PHOENICIAN, + PHONETIC_EXT, + PHONETIC_EXT_SUP, + PLAYING_CARDS, + PSALTER_PAHLAVI, + PUA, + PUNCTUATION, + REJANG, + RUMI, + RUNIC, + SAMARITAN, + SAURASHTRA, + SHARADA, + SHAVIAN, + SHORTHAND_FORMAT_CONTROLS, + SIDDHAM, + SINHALA, + SINHALA_ARCHAIC_NUMBERS, + SMALL_FORMS, + SMALL_KANA_EXT, + SOGDIAN, + SORA_SOMPENG, + SOYOMBO, + SPECIALS, + SUNDANESE, + SUNDANESE_SUP, + SUP_ARROWS_A, + SUP_ARROWS_B, + SUP_ARROWS_C, + SUP_MATH_OPERATORS, + SUP_PUA_A, + SUP_PUA_B, + SUP_PUNCTUATION, + SUP_SYMBOLS_AND_PICTOGRAPHS, + SUPER_AND_SUB, + SUTTON_SIGNWRITING, + SYLOTI_NAGRI, + SYMBOLS_AND_PICTOGRAPHS_EXT_A, + SYMBOLS_FOR_LEGACY_COMPUTING, + SYRIAC, + SYRIAC_SUP, + TAGALOG, + TAGBANWA, + TAGS, + TAI_LE, + TAI_THAM, + TAI_VIET, + TAI_XUAN_JING, + TAKRI, + TAMIL, + TAMIL_SUP, + TANGUT, + TANGUT_COMPONENTS, + TANGUT_SUP, + TELUGU, + THAANA, + THAI, + TIBETAN, + TIFINAGH, + TIRHUTA, + TRANSPORT_AND_MAP, + UCAS, + UCAS_EXT, + UGARITIC, + VAI, + VEDIC_EXT, + VERTICAL_FORMS, + VS, + VS_SUP, + WANCHO, + WARANG_CITI, + YEZIDI, + YI_RADICALS, + YI_SYLLABLES, + YIJING, + ZANABAZAR_SQUARE, +}; + +// Unicode general character categories. See Unicode section 4.5. +export type gc = enum { + // Letter, uppercase + LU, + // Letter, lowercase + LL, + // Letter, titlecase + LT, + // Letter, modifier + LM, + // Letter, other + LO, + // Mark, nonspacing + MN, + // Mark, spacing combining + MC, + // Mark, enclosing + ME, + // Number, decimal digit + ND, + // Number, letter + NL, + // Number, other + NO, + // Punctuation, connector + PC, + // Punctuation, dash + PD, + // Punctuation, open + PS, + // Punctuation, close + PE, + // Punctuation, initial quote + PI, + // Punctuation, final quote + PF, + // Punctuation, other + PO, + // Symbol, math + SM, + // Symbol, currency + SC, + // Symbol, modifier + SK, + // Symbol, other + SO, + // Separator, space + ZS, + // Separator, line + ZL, + // Separator, paragraph + ZP, + // Other, control + CC, + // Other, format + CF, + // Other, surrogate + CS, + // Other, private use + CO, + // Other, not assigned (including noncharacters) + CN, +}; + +// Bidirectional class. See UAX #9. +export type bc = enum { + // Right-to-left (Arabic) + AL, + // Arabic number + AN, + // Paragraph separator + B, + // Boundary neutral + BN, + // Common number separator + CS, + // European number + EN, + // European number separator + ES, + // Euromean number terminator + ET, + // First strong isolate + FSI, + // Left-to-right + L, + // Left-to-right embedding + LRE, + // Right-to-left isolate + LRI, + // Left-to-right override + LRO, + // Nonspacing mark + NSM, + // Other neutrals + ON, + // Pop directional format + PDF, + // Pop directional isolate + PDI, + // Right-to-left + R, + // Right-to-left embedding + RLE, + // Right-to-left isolate + RLI, + // Right-to-left override + RLO, + // Segment separator + S, + // Whitespace + WS, +}; + +// Bidi paired bracket type. See BidiBrackets.txt in the UCD. +export type bpt = enum { + // Open + O, + // Closed + C, + // None + N, +}; + +// Decomposition type. See UAX #44, section 5.7.3. +export type dt = enum { + // Canonical mapping + CAN, + // Otherwise unspecified compatibility character + COM, + // Encircled form + ENC, + // Final presentation form (Arabic) + FIN, + // Font variant (for example, a blackletter form) + FONT, + // Vulgar fraction form + FRA, + // Initial presentation form (Arabic) + INIT, + // Isolated presentation form (Arabic) + ISO, + // Medial presentation form (Arabic) + MED, + // Narrow (or hankaku) compatibility character + NAR, + // No-break version of a space or hyphen + NB, + // Small variant form (CNS compatibility) + SML, + // CJK squared font variant + SQR, + // Subscript form + SUB, + // Superscript form + SUP, + // Vertical layout presentation form + VERT, + // Wide (or zenkaku) compatibility character + WIDE, + // None + NONE, +}; + +// Normalization quick-check properties. See UAX #44, section 5.7.5. +export type quickcheck = enum uint { + NO = 0b00, + MAYBE = 0b01, + YES = 0b11, +}; + +// Numeric type. See Unicode section 4.6. +export type nt = enum { + // Non-numeric + NONE, + // Decimal + DE, + // Digit + DI, + // Numeric + NU, +}; + +// Character joining class. See Unicode section 9.2. +export type jt = enum { + // Non-joining + U, + // Join causing + C, + // Transparent + T, + // Dual joining + D, + // Left joining + L, + // Right joining + R, +}; + +// Character joining group. See Unicode section 9.2. +export type jg = enum { + AFRICAN_FEH, + AFRICAN_NOON, + AFRICAN_QAF, + AIN, + ALAPH, + ALEF, + ALEF_MAQSURAH, + BEH, + BETH, + BURUSHASKI_YEH_BARREE, + DAL, + DALATH_RISH, + E, + FARSI_YEH, + FE, + FEH, + FINAL_SEMKATH, + GAF, + GAMAL, + HAH, + HAMZA_ON_HEH_GOAL, + HE, + HEH, + HEH_GOAL, + HETH, + HANIFI_ROHINGYA_KINNA_YA, + HANIFI_ROHINGYA_PA, + KAF, + KAPH, + KHAPH, + KNOTTED_HEH, + LAM, + LAMADH, + MALAYALAM_NGA, + MALAYALAM_JA, + MALAYALAM_NYA, + MALAYALAM_TTA, + MALAYALAM_NNA, + MALAYALAM_NNNA, + MALAYALAM_BHA, + MALAYALAM_RA, + MALAYALAM_LLA, + MALAYALAM_LLLA, + MALAYALAM_SSA, + MANICHAEAN_ALEPH, + MANICHAEAN_AYIN, + MANICHAEAN_BETH, + MANICHAEAN_DALETH, + MANICHAEAN_DHAMEDH, + MANICHAEAN_FIVE, + MANICHAEAN_GIMEL, + MANICHAEAN_HETH, + MANICHAEAN_HUNDRED, + MANICHAEAN_KAPH, + MANICHAEAN_LAMEDH, + MANICHAEAN_MEM, + MANICHAEAN_NUN, + MANICHAEAN_ONE, + MANICHAEAN_PE, + MANICHAEAN_QOPH, + MANICHAEAN_RESH, + MANICHAEAN_SADHE, + MANICHAEAN_SAMEKH, + MANICHAEAN_TAW, + MANICHAEAN_TEN, + MANICHAEAN_TETH, + MANICHAEAN_THAMEDH, + MANICHAEAN_TWENTY, + MANICHAEAN_WAW, + MANICHAEAN_YODH, + MANICHAEAN_ZAYIN, + MEEM, + MIM, + NO_JOINING_GROUP, + NOON, + NUN, + NYA, + PE, + QAF, + QAPH, + REH, + REVERSED_PE, + ROHINGYA_YEH, + SAD, + SADHE, + SEEN, + SEMKATH, + SHIN, + STRAIGHT_WAW, + SWASH_KAF, + SYRIAC_WAW, + TAH, + TAW, + TEH_MARBUTA, + TEH_MARBUTA_GOAL, + TETH, + WAW, + YEH, + YEH_BARREE, + YEH_WITH_TAIL, + YUDH, + YUDH_HE, + ZAIN, + ZHAIN, +}; + +// Line breaking properties. See UAX #14. +export type lb = enum { + // Ambiguous + AI, + // Alphabetic + AL, + // Break opportunity before and after + B2, + // Break after + BA, + // Break before + BB, + // Mandatory break + BK, + // Contingent break opportunity + CB, + // Conditional Japanese starter + CJ, + // Close punctuation + CL, + // Combining mark + CM, + // Close parenthesis + CP, + // Carriage return + CR, + // Emoji base + EB, + // Emoji modifier + EM, + // Exclamation/interrogation + EX, + // Non-breaking ("glue") + GL, + // Hangul LV syllable + H2, + // Hangul LVT syllable + H3, + // Hebrew letter + HL, + // Hyphen + HY, + // Ideographic + ID, + // Inseparable + IN, + // Infix numeric separator + IS, + // Hangul L Jamo + JL, + // Hangul T Jamo + JT, + // Hangul V Jamo + JV, + // Line feed + LF, + // Next line + NL, + // Nonstarter + NS, + // Numeric + NU, + // Open punctuation + OP, + // Postfix numeric + PO, + // Prefix numeric + PR, + // Quotation + QU, + // Regional indicator + RI, + // Complex context dependent (South East Asian) + SA, + // Surrogate + SG, + // Space + SP, + // Symbols allowing break after + SY, + // Word joiner + WJ, + // Unknown + XX, + // Zero width space + ZW, + // Zero width joiner + ZWJ, +}; + +// East-asian width. See UAX #11. +export type ea = enum { + // Ambiguous + A, + // Fullwidth + F, + // Halfwidth + H, + // Neutral + N, + // Narrow + NA, + // Wide + W, +}; + +// Case property. See Unicode section 4.2. +export type case = enum uint { + UPPER = 1 << 0, + LOWER = 1 << 1, + OTHER_UPPER = 1 << 2, + OTHER_LOWER = 1 << 3, +}; + +// Casing attributes. See Unicode section 4.2. +export type case_attrs = enum uint { + // Case ignorable + CI = 1 << 0, + // Cased + CASED = 1 << 1, + // Changes when casefolded + CWCF = 1 << 2, + // Changes when casemapped + CWCM = 1 << 3, + // Changes when lowercased + CWL = 1 << 4, + // Changes when NFKC casefolded + CWKCF = 1 << 5, + // Changes when titlecased + CWT = 1 << 6, + // Changes when uppercased + CWU = 1 << 7, + // NFKC casefold + NFKC_CF = 1 << 8, +}; + +// Script property. See UAX #24. +export type script = enum { + ADLM, + AGHB, + AHOM, + ARAB, + ARMI, + ARMN, + AVST, + BALI, + BAMU, + BASS, + BATK, + BENG, + BHKS, + BOPO, + BRAH, + BRAI, + BUGI, + BUHD, + CAKM, + CANS, + CARI, + CHAM, + CHER, + CHRS, + COPT, + CPRT, + CYRL, + DEVA, + DIAK, + DOGR, + DSRT, + DUPL, + ELBA, + ELYM, + EGYP, + ETHI, + GEOR, + GLAG, + GONG, + GONM, + GOTH, + GRAN, + GREK, + GUJR, + GURU, + HANG, + HANI, + HANO, + HATR, + HEBR, + HIRA, + HLUW, + HMNG, + HMNP, + HRKT, + HUNG, + ITAL, + JAVA, + KALI, + KANA, + KHAR, + KHMR, + KHOJ, + KITS, + KNDA, + KTHI, + LANA, + LAOO, + LATN, + LEPC, + LIMB, + LINA, + LINB, + LISU, + LYCI, + LYDI, + MAHJ, + MAKA, + MAND, + MANI, + MARC, + MEDF, + MEND, + MERC, + MERO, + MLYM, + MODI, + MONG, + MROO, + MTEI, + MULT, + MYMR, + NAND, + NARB, + NBAT, + NEWA, + NKOO, + NSHU, + OGAM, + OLCK, + ORKH, + ORYA, + OSGE, + OSMA, + PALM, + PAUC, + PERM, + PHAG, + PHLI, + PHLP, + PHNX, + PLRD, + PRTI, + QAAI, + ROHG, + RJNG, + RUNR, + SAMR, + SARB, + SAUR, + SGNW, + SHAW, + SHRD, + SIDD, + SIND, + SINH, + SOGD, + SOGO, + SORA, + SOYO, + SUND, + SYLO, + SYRC, + TAGB, + TAKR, + TALE, + TALU, + TAML, + TANG, + TAVT, + TELU, + TFNG, + TGLG, + THAA, + THAI, + TIBT, + TIRH, + UGAR, + VAII, + WARA, + WCHO, + XPEO, + XSUX, + YEZI, + YIII, + ZANB, + ZINH, + ZYYY, + ZZZZ, +}; + +// Hangul syllable type. See Unicode section 3.12 and 18.6. +export type hst = enum { + // Leading consonant + L, + // LV syllable + LV, + // LVT syllable + LVT, + // Trailing consonant + T, + // Vowel + V, + // Non-applicable + NA, +}; + +// Indic syllabic category. See IndicSyllabicCategory.txt in the UCD. +export type insc = enum { + AVAGRAHA, + BINDU, + BRAHMI_JOINING_NUMBER, + CANTILLATION_MARK, + CONSONANT, + CONSONANT_DEAD, + CONSONANT_FINAL, + CONSONANT_HEAD_LETTER, + CONSONANT_INITIAL_POSTFIXED, + CONSONANT_KILLER, + CONSONANT_MEDIAL, + CONSONANT_PLACEHOLDER, + CONSONANT_PRECEDING_REPHA, + CONSONANT_PREFIXED, + CONSONANT_REPHA, + CONSONANT_SUBJOINED, + CONSONANT_SUCCEEDING_REPHA, + CONSONANT_WITH_STACKER, + GEMINATION_MARK, + INVISIBLE_STACKER, + JOINER, + MODIFYING_LETTER, + NON_JOINER, + NUKTA, + NUMBER, + NUMBER_JOINER, + OTHER, + PURE_KILLER, + REGISTER_SHIFTER, + SYLLABLE_MODIFIER, + TONE_LETTER, + TONE_MARK, + VIRAMA, + VISARGA, + VOWEL, + VOWEL_DEPENDENT, + VOWEL_INDEPENDENT, +}; + +// Indic positional category. See IndicPositionalCategory.txt in the UCD. +export type inpc = enum { + BOTTOM, + BOTTOM_AND_LEFT, + BOTTOM_AND_RIGHT, + LEFT, + LEFT_AND_RIGHT, + NA, + OVERSTRUCK, + RIGHT, + TOP, + TOP_AND_BOTTOM, + TOP_AND_BOTTOM_AND_LEFT, + TOP_AND_BOTTOM_AND_RIGHT, + TOP_AND_LEFT, + TOP_AND_LEFT_AND_RIGHT, + TOP_AND_RIGHT, + VISUAL_ORDER_LEFT, +}; + +// Identifier and pattern properties. See UAX #31. +export type id = enum uint { + IDS = 1 << 0, + IDC = 1 << 1, + OIDS = 1 << 2, + OIDC = 1 << 2, + XIDS = 1 << 3, + XIDC = 1 << 4, + SYN = 1 << 5, + WS = 1 << 6, +}; + +// Properties related to function and graphics characteristics. This is a +// synethetic type based on mulitple Unicode properties listed in UAX #42 +// section 4.4.10. +export type fgc = enum uint { + DASH = 1 << 0, + HYPHEN = 1 << 1, + QUOTATION_MARK = 1 << 2, + TERMINAL_PUNCTUATION = 1 << 3, + SENTENCE_TERMINAL = 1 << 4, + DIACRITIC = 1 << 5, + EXTENDER = 1 << 6, + SOFT_DOTTED = 1 << 7, + ALPHABETIC = 1 << 8, + OTHER_ALPHABETIC = 1 << 9, + MATH = 1 << 10, + OTHER_MATH = 1 << 11, + HEX_DIGIT = 1 << 12, + ASCII_HEX_DIGIT = 1 << 13, + DEFAULT_IGNORABLE_CODE_POINT = 1 << 14, + OTHER_DEFAULT_IGNORABLE_CODE_POINT = 1 << 15, + LOGICAL_ORDER_EXCEPTION = 1 << 16, + PREPENDED_CONCATENATION_MARK = 1 << 17, + WHITE_SPACE = 1 << 18, + VERTICAL_ORIENTATION = 1 << 19, + REGIONAL_INDICATOR = 1 << 20, +}; + +// Properties related to boundaries. This is a synethetic type based on mulitple +// Unicode properties listed in UAX #42 section 4.4.20. +export type gr = enum uint { + GR_BASE = 1 << 0, + GR_EXT = 1 << 1, +}; + +// Grapheme cluster break. See UAX #29. +export type gcb = enum { + XX, + CN, + CR, + EX, + L, + LF, + LV, + LVT, + PP, + RI, + SM, + T, + V, + ZWJ, +}; + +// Word break. See UAX #29. +export type wb = enum { + XX, + CR, + DQ, + EX, + EXTEND, + FO, + HL, + KA, + LE, + LF, + MB, + ML, + MN, + NL, + NU, + RI, + SQ, + WSEGSPACE, + ZWJ, +}; + +// Sentence break. See UAX #29. +export type sb = enum { + XX, + AT, + CL, + CR, + EX, + FO, + LE, + LF, + LO, + NU, + SC, + SE, + SP, + ST, + UP, +}; + +// Properties related to ideographs. This is a synethetic type based on mulitple +// Unicode properties listed in UAX #42 section 4.4.21. +export type ideo = enum uint { + IDEO = 1 << 1, + UIDEO = 1 << 2, + IDSB = 1 << 3, + IDST = 1 << 4, + RADICAL = 1 << 5, +}; + +// Miscellaneous properties. This is a synethetic type based on mulitple Unicode +// properties listed in UAX #42 section 4.4.22. +export type misc = enum uint { + DEP = 1 << 0, + VS = 1 << 1, + NCHAR = 1 << 2, +}; + +// Properties related to Emoji. This is a synethetic type based on mulitple +// Unicode properties listed in UAX #42 section 4.4.26. +export type emoji = enum uint { + EMOJI = 1 << 0, + EPRES = 1 << 1, + EMOD = 1 << 2, + EBASE = 1 << 3, + ECOMP = 1 << 4, + EXTPICT = 1 << 5, +}; diff --git a/vendor/tree-sitter-hare/example/random.ha b/vendor/tree-sitter-hare/example/random.ha new file mode 100644 index 000000000..2d0dc1ce4 --- /dev/null +++ b/vendor/tree-sitter-hare/example/random.ha @@ -0,0 +1,35 @@ +// math::random provides a pseudorandom number generator, which yields a +// deterministic sequence of psuedo-random numbers based on a seed value. +// +// Beware! This module is NOT suitable for generating genuinely random data for +// cryptographic use. See [crypto::random] for cryptographically secure random +// number generation. + +// State for a pseudorandom number generator. +export type random = u64; + +// Initializes a pseudorandom number generator with a given seed. This seed will +// yield the same sequence of psuedo-random numbers if used again. +export fn init(seed: u64) random = seed; + +// Returns a psuedo-random 64-bit unsigned integer. +export fn next(r: *random) u64 = { + // SplitMix64 + *r += 0x9e3779b97f4a7c15; + *r = (*r ^ *r >> 30) * 0xbf58476d1ce4e5b9; + *r = (*r ^ *r >> 27) * 0x94d049bb133111eb; + return *r ^ *r >> 31; +}; + +@test fn rng() void = { + let r = init(0); + let expected: [_]u64 = [ + 16294208416658607535, + 15501543990041496116, + 15737388954706874752, + 15091258616627000950, + ]; + for (let i = 0z; i < len(expected); i += 1) { + assert(next(&r) == expected[i]); + }; +}; diff --git a/vendor/tree-sitter-hare/example/reverse.ha b/vendor/tree-sitter-hare/example/reverse.ha new file mode 100644 index 000000000..2caab57df --- /dev/null +++ b/vendor/tree-sitter-hare/example/reverse.ha @@ -0,0 +1,22 @@ +// Reverses a slice. +export fn reverse(b: []void, membsz: size) void = { + if (len(b) == 0) { + return; + }; + let a = b: *[*]u8; + for (let s = 0z, e = len(b) - 1; s < e) { + for (let i = 0z; i < membsz; i += 1z) { + let z = a[s * membsz + i]; + a[s * membsz + i] = a[e * membsz + i]; + a[e * membsz + i] = z; + }; + s += 1; + e -= 1; + }; +}; + +@test fn reverse() void = { + let a: []int = [1, 2, 3, 4]; + reverse(a, size(int)); + assert(a[0] == 4 && a[1] == 3 && a[2] == 2 && a[3] == 1); +}; diff --git a/vendor/tree-sitter-hare/example/rt.ha b/vendor/tree-sitter-hare/example/rt.ha new file mode 100644 index 000000000..f73e791ee --- /dev/null +++ b/vendor/tree-sitter-hare/example/rt.ha @@ -0,0 +1,16 @@ +use rt; + +// Wraps an [rt::errno] to produce an [errors::opaque]. This is a non-portable +// interface which is mainly provided to support internal stdlib requirements. +export fn errno(errno: rt::errno) opaque = { + static assert(size(rt::errno) <= size(opaque_data)); + let err = opaque { strerror = &rt_strerror, ... }; + let ptr = &err.data: *rt::errno; + *ptr = errno; + return err; +}; + +fn rt_strerror(err: *opaque_data) const str = { + let err = &err: *rt::errno; + return rt::strerror(*err); +}; diff --git a/vendor/tree-sitter-hare/example/run.ha b/vendor/tree-sitter-hare/example/run.ha new file mode 100644 index 000000000..b9eed39df --- /dev/null +++ b/vendor/tree-sitter-hare/example/run.ha @@ -0,0 +1,108 @@ +type test = struct { + name: str, + func: *fn() void, +}; + +type abort_reason = struct { + loc: str, + msg: str, +}; + +const @symbol("__test_array_start") test_start: [*]test; +const @symbol("__test_array_end") test_end: [*]test; + +let jmp: jmpbuf = jmpbuf { ... }; +let reason: abort_reason = abort_reason { ... }; + +export fn tests_main() size = { + const ntest = (&test_end: uintptr - &test_start: uintptr): size / size(test); + let maxname = 0z; + for (let i = 0z; i < ntest; i += 1) { + if (len(test_start[i].name) > maxname) { + maxname = len(test_start[i].name); + }; + }; + + let failures: [](str, abort_reason) = []; + let npass = 0z, nfail = 0z; + print("Running "); + print(ztos(ntest)); + print(" tests:\n\n"); + time_start(); + for (let i = 0z; i < ntest; i += 1) { + if (!should_test(test_start[i].name)) { + continue; + }; + print(test_start[i].name); + dots(maxname - len(test_start[i].name) + 3); + print(" "); + + if (setjmp(&jmp) != 0) { + nfail += 1; + append(failures, (test_start[i].name, reason)); + print("FAIL\n"); + continue; + }; + test_start[i].func(); + + npass += 1; + print("OK\n"); + }; + let end = time_stop(); + + if (nfail != 0) { + print("\n"); + print(ztos(nfail)); + if (nfail == 1) { + print(" test failed:\n"); + } else { + print(" tests failed:\n"); + }; + for (let i = 0z; i < nfail; i += 1) { + print(failures[i].0); + print(": "); + if (len(failures[i].1.loc) != 0) { + print(failures[i].1.loc); + print(": "); + }; + print(failures[i].1.msg); + print("\n"); + }; + }; + + print("\n"); + print(ztos(npass)); + print(" passed; "); + print(ztos(nfail)); + print(" failed; "); + print(ztos(ntest)); + print(" tests completed in "); + print(ztos(end.0)); + print("."); + print(ztos(end.1)); + print("s\n"); + + return nfail; +}; + +fn print(msg: str) void = write(1, *(&msg: **void): *const char, len(msg)); + +fn dots(n: size) void = { + // XXX: this is slow, I guess + for (let i = 0z; i < n; i += 1) { + print("."); + }; +}; + +fn should_test(name: str) bool = { + if (argc == 1) { + return true; + }; + for (let i = 1z; i < argc; i += 1) { + let s = from_c_unsafe(argv[i]); + if (name == s) { + return true; + }; + }; + return false; +}; diff --git a/vendor/tree-sitter-hare/example/rune.ha b/vendor/tree-sitter-hare/example/rune.ha new file mode 100644 index 000000000..f127a3b27 --- /dev/null +++ b/vendor/tree-sitter-hare/example/rune.ha @@ -0,0 +1,27 @@ +use types; + +const masks: [_]u8 = [0x7F, 0x1F, 0x0F, 0x07, 0x03, 0x01]; + +type rsize = struct { + mask: u8, + result: u8, + octets: size, +}; + +const sizes: [_]rsize = [ + rsize { mask = 0x80, result = 0x00, octets = 1 }, + rsize { mask = 0xE0, result = 0xC0, octets = 2 }, + rsize { mask = 0xF0, result = 0xE0, octets = 3 }, + rsize { mask = 0xF8, result = 0xF0, octets = 4 }, + rsize { mask = 0xFC, result = 0xF8, octets = 5 }, + rsize { mask = 0xFE, result = 0xF8, octets = 6 }, +]; + +// Returns the size of a rune, in octets, when encoded as UTF-8. +export fn runesz(r: rune) size = { + const ch = r: u32; + return if (ch < 0x80) 1 + else if (ch < 0x800) 2 + else if (ch < 0x10000) 3 + else 4; +}; diff --git a/vendor/tree-sitter-hare/example/scan.ha b/vendor/tree-sitter-hare/example/scan.ha new file mode 100644 index 000000000..78f1d48ef --- /dev/null +++ b/vendor/tree-sitter-hare/example/scan.ha @@ -0,0 +1,391 @@ +use ascii; +use bytes; +use crypto::sha256; +use encoding::utf8; +use fs; +use hare::ast; +use hare::lex; +use hare::parse; +use hash; +use io; +use path; +use slice; +use sort; +use strings; +use strio; +use fmt; + +// Scans the files in a directory for eligible build inputs and returns a +// [version] which includes all applicable files and their dependencies. +export fn scan(ctx: *context, path: str) (version | error) = { + // TODO: Incorporate defines into the hash + let sha = sha256::sha256(); + //defer! hash::close(sha); + let iter = match (fs::iter(ctx.fs, path)) { + fs::wrongtype => { + // Single file case + let inputs: []input = []; + let deps: []ast::ident = []; + let ft = match (type_for_ext(path)) { + void => return module_not_found, + ft: filetype => ft, + }; + let st = fs::stat(ctx.fs, path)?; + let in = input { + path = fs::resolve(ctx.fs, path), + stat = st, + ft = ft, + hash = scan_file(ctx, path, &deps)?, + ... + }; + append(inputs, in); + hash::write(sha, in.hash); + return version { + hash = hash::finish(sha), + basedir = path::dirname(fs::resolve(ctx.fs, path)), + depends = deps, + inputs = inputs, + }; + }, + err: fs::error => return err, + iter: *fs::iterator => iter, + }; + let ver = version { + basedir = strings::dup(path), + ... + }; + scan_directory(ctx, &ver, sha, path, iter)?; + ver.hash = hash::finish(sha); + return ver; +}; + +// Given a file or directory name, parses it into the basename, extension, and +// tag set. +fn parse_name(name: str) (str, str, []tag) = { + let ext = path::extension(name); + let base = ext.0, ext = ext.1; + + let p = strings::index(base, '+'); + let m = strings::index(base, '-'); + if (p is void && m is void) { + return (base, ext, []); + }; + let i: size = + if (p is void && m is size) m: size + else if (m is void && p is size) p: size + else if (m: size < p: size) m: size + else p: size; + let tags = strings::sub(base, i, strings::end); + let tags = match (parsetags(tags)) { + void => return (base, ext, []), + t: []tag => t, + }; + let base = strings::sub(base, 0, i); + return (base, ext, tags); +}; + +fn strcmp(a: const *void, b: const *void) int = { + const a = *(a: const *str); + const b = *(b: const *str); + return ascii::strcmp(a, b) as int; +}; + +fn scan_directory( + ctx: *context, + ver: *version, + sha: *hash::hash, + path: str, + iter: *fs::iterator, +) (void | error) = { + let files: []str = [], dirs: []str = []; + defer { + for (let i = 0z; i < len(files); i += 1) { + free(files[i]); + }; + free(files); + + for (let i = 0z; i < len(dirs); i += 1) { + free(dirs[i]); + }; + free(dirs); + }; + + for (true) { + let ent = match (fs::next(iter)) { + void => break, + ent: fs::dirent => ent, + }; + + switch (ent.ftype) { + fs::mode::LINK => abort(), // TODO + fs::mode::DIR => append(dirs, strings::dup(ent.name)), + fs::mode::REG => append(files, strings::dup(ent.name)), + }; + }; + + // Sorted to keep the hash consistent + sort::sort(dirs, size(str), &strcmp); + sort::sort(files, size(str), &strcmp); + + // Tuple of is_directory, basename, tags, and path to a candidate input. + let inputs: [](bool, str, []tag, str) = []; + defer for (let i = 0z; i < len(inputs); i += 1) { + // For file paths, these are assigned to the input, which + // assumes ownership over them. + if (inputs[i].0) { + free(inputs[i].1); + tags_free(inputs[i].2); + free(inputs[i].3); + }; + }; + + // For a given basename, only the most specific path (i.e. with the most + // tags) is used. + // + // foo.ha + // foo+linux.ha + // foo+linux+x86_64/ + // bar.ha + // baz.ha + // + // In this case, foo+linux+x86_64 is the most specific, and so its used + // as the build input and the other two files are discarded. + + for (let i = 0z; i < len(dirs); i += 1) { + let name = dirs[i]; + let parsed = parse_name(name); + let base = parsed.0, tags = parsed.2; + + let d = strings::toutf8(name); + if (len(d) == 0 || ( + !strings::has_prefix(name, "+") && + !strings::has_prefix(name, "-"))) { + continue; + }; + if (!tagcompat(ctx.tags, tags)) { + continue; + }; + + let path = path::join(path, name); + let tuple = (true, strings::dup(base), tags, path); + let superceeded = false; + for (let j = 0z; j < len(inputs); j += 1) { + if (inputs[j].1 != base) { + continue; + }; + let theirs = inputs[j].2; + if (len(theirs) < len(tags)) { + free(inputs[j].1); + tags_free(inputs[j].2); + free(inputs[j].3); + inputs[j] = tuple; + superceeded = true; + break; + } else if (len(theirs) > len(tags)) { + // They are more specific + superceeded = true; + break; + } else if (len(base) != 0) { + return (path, inputs[j].3): ambiguous; + }; + }; + if (!superceeded) { + append(inputs, tuple); + }; + }; + + for (let i = 0z; i < len(files); i += 1) { + let name = files[i]; + let parsed = parse_name(name); + let base = parsed.0, ext = parsed.1, tags = parsed.2; + + let eligible = false; + static const exts = [".ha", ".s"]; + for (let i = 0z; i < len(exts); i += 1) { + if (exts[i] == ext) { + eligible = true; + break; + }; + }; + if (!eligible || !tagcompat(ctx.tags, tags)) { + tags_free(tags); + continue; + }; + + let path = path::join(path, name); + let tuple = (false, base, tags, path); + let superceeded = false; + for (let j = 0z; j < len(inputs); j += 1) { + if (inputs[j].1 != base) { + continue; + }; + let theirs = inputs[j].2; + if (len(theirs) < len(tags)) { + // We are more specific + free(inputs[j].1); + tags_free(inputs[j].2); + free(inputs[j].3); + inputs[j] = tuple; + superceeded = true; + break; + } else if (len(theirs) > len(tags)) { + // They are more specific + superceeded = true; + break; + } else if (len(base) != 0) { + return (path, inputs[j].3): ambiguous; + }; + }; + if (!superceeded) { + append(inputs, tuple); + }; + }; + + for (let i = 0z; i < len(inputs); i += 1) { + let isdir = inputs[i].0, path = inputs[i].3; + if (isdir) { + let iter = fs::iter(ctx.fs, path)?; + scan_directory(ctx, ver, sha, path, iter)?; + } else { + let st = fs::stat(ctx.fs, path)?; + let in = input { + path = fs::resolve(ctx.fs, path), + stat = st, + ft = type_for_ext(path) as filetype, + hash = scan_file(ctx, path, &ver.depends)?, + basename = inputs[i].1, + tags = inputs[i].2, + ... + }; + append(ver.inputs, in); + hash::write(sha, in.hash); + }; + }; +}; + +// Looks up a module by its identifier from HAREPATH, and returns a [version] +// which includes all eligible build inputs. +export fn lookup(ctx: *context, name: ast::ident) (version | error) = { + let ipath = identpath(name); + for (let i = len(ctx.paths); i > 0; i -= 1) { + let cand = path::join(ctx.paths[i - 1], ipath); + defer free(cand); + match (scan(ctx, cand)) { + v: version => return v, + e: error => void, + }; + }; + return module_not_found; +}; + +fn type_for_ext(name: str) (filetype | void) = { + const ext = path::extension(name).1; + return + if (ext == ".ha") filetype::HARE + else if (ext == ".s") filetype::ASSEMBLY + else void; +}; + +fn scan_file( + ctx: *context, + path: str, + deps: *[]ast::ident, +) ([]u8 | error) = { + let f = fs::open(ctx.fs, path)?; + defer io::close(f); + let sha = sha256::sha256(); + //defer! hash::close(sha); + + hash::write(sha, strings::toutf8(path)); + + let tee = io::tee(f, hash::writer(sha)); + defer io::close(tee); + + let lexer = lex::init(tee, path); + let imports = parse::imports(&lexer)?; + for (let i = 0z; i < len(imports); i += 1) { + let ident = match (imports[i]) { + m: ast::import_module => m: ast::ident, + a: ast::import_alias => a.ident, + o: ast::import_objects => o.ident, + }; + if (!have_ident(deps, ident)) { + append(*deps, ident); + }; + }; + + io::copy(io::empty, tee)?; // Finish spooling out the file for the SHA + return hash::finish(sha); +}; + +fn have_ident(sl: *[]ast::ident, id: ast::ident) bool = { + // XXX: We shouldn't have to deref sl here + for (let i = 0z; i < len(*sl); i += 1) { + if (ast::ident_eq(sl[i], id)) { + return true; + }; + }; + return false; +}; + +// Parses a set of build tags, returning void if the string is an invalid tag +// set. The caller must free the return value with [tags_free]. +export fn parsetags(in: str) ([]tag | void) = { + let tags: []tag = []; + // defer! tags_free(tags); + let iter = strings::iter(in); + for (true) { + let t = tag { ... }; + let m = match (strings::next(&iter)) { + void => break, + r: rune => r, + }; + t.mode = switch (m) { + * => return, + '+' => tag_mode::INCLUSIVE, + '-' => tag_mode::EXCLUSIVE, + }; + let buf = strio::dynamic(); + for (true) match (strings::next(&iter)) { + void => break, + r: rune => { + if (ascii::isalnum(r) || r == '_') { + strio::appendrune(buf, r); + } else { + strings::push(&iter, r); + break; + }; + }, + }; + t.name = strio::finish(buf); + append(tags, t); + }; + return tags; +}; + +// Frees a set of tags. +export fn tags_free(tags: []tag) void = { + for (let i = 0z; i < len(tags); i += 1) { + free(tags[i].name); + }; + free(tags); +}; + +// Compares two tag sets and tells you if they are compatible. +export fn tagcompat(have: []tag, want: []tag) bool = { + // XXX: O(n²), lame + for (let i = 0z; i < len(want); i += 1) { + let present = false; + for (let j = 0z; j < len(have); j += 1) { + if (have[j].name == want[i].name) { + present = have[j].mode == tag_mode::INCLUSIVE; + break; + }; + }; + switch (want[i].mode) { + tag_mode::INCLUSIVE => if (!present) return false, + tag_mode::EXCLUSIVE => if (present) return false, + }; + }; + return true; +}; diff --git a/vendor/tree-sitter-hare/example/scanner.ha b/vendor/tree-sitter-hare/example/scanner.ha new file mode 100644 index 000000000..251c988dc --- /dev/null +++ b/vendor/tree-sitter-hare/example/scanner.ha @@ -0,0 +1,134 @@ +use bytes; +use encoding::utf8; +use io; +use strings; +use types; + +// Reads a single byte from the stream. +export fn scanbyte(stream: *io::stream) (u8 | io::EOF | io::error) = { + let buf: [1]u8 = [0...]; + + return match (io::read(stream, buf)?) { + read: size => if (read > 0) buf[0] else io::EOF, + io::EOF => io::EOF, + }; +}; + +// Reads a slice of bytes until the delimiter. Delimiter is not included. The +// return value must be freed by the caller. +export fn scantok(stream: *io::stream, delim: u8) ([]u8 | io::EOF | io::error) = { + let buf: []u8 = []; + + for (true) { + match (scanbyte(stream)?) { + res: u8 => { + if (res == delim) { + break; + }; + append(buf, res); + }, + io::EOF => { + if (len(buf) == 0) { + return io::EOF; + }; + break; + }, + }; + }; + + return buf; +}; + +// Reads a slice of bytes until a newline character (\n, 0x10). Newline itself +// is not included. The return value must be freed by the caller. +export fn scanline(stream: *io::stream) ([]u8 | io::EOF | io::error) = + scantok(stream, '\n': u32: u8); + +// Reads a rune from a UTF-8 stream. +export fn scanrune(stream: *io::stream) (rune | utf8::invalid | io::EOF | io::error) = { + let b: [4]u8 = [0...]; + match (io::read(stream, b[..1])?) { + n: size => assert(n == 1), + io::EOF => return io::EOF, + }; + + const sz = utf8::utf8sz(b[0]); + if (sz == types::SIZE_MAX) { + return utf8::invalid; + }; + + if (sz == 1) { + return b[0]: u32: rune; + }; + + match (io::read(stream, b[1..sz])) { + n: size => assert(n == sz - 1), + e: (io::error | io::EOF) => return e, + }; + + let dec = utf8::decode(b[..sz]); + return match (utf8::next(&dec)) { + r: rune => r, + utf8::invalid => utf8::invalid, + (void | utf8::more) => io::EOF, + }; +}; + +@test fn scanbyte() void = { + let buf = fixed([1, 3, 3, 7], io::mode::READ); + + assert(scanbyte(buf) as u8 == 1); + assert(scanbyte(buf) as u8 == 3); + assert(scanbyte(buf) as u8 == 3); + assert(scanbyte(buf) as u8 == 7); + assert(scanbyte(buf) is io::EOF); +}; + +@test fn scantok() void = { + let buf = fixed([1, 3, 4, 5, 3, 7], io::mode::READ); + + let tok = scantok(buf, 4) as []u8; + defer free(tok); + assert(bytes::equal(tok, [1, 3])); + + let tok = scantok(buf, 7) as []u8; + defer free(tok); + assert(bytes::equal(tok, [5, 3])); + + assert(scantok(buf, 1) is io::EOF); +}; + +@test fn scanline() void = { + let helloworld = strings::toutf8("hello\nworld"); + let buf = fixed(helloworld, io::mode::READ); + + let line = scanline(buf) as []u8; + defer free(line); + assert(bytes::equal(line, strings::toutf8("hello"))); + + let line = scanline(buf) as []u8; + defer free(line); + assert(bytes::equal(line, strings::toutf8("world"))); + + assert(scanline(buf) is io::EOF); +}; + +@test fn scanrune() void = { + let in = fixed([ + 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x93, 0xE3, 0x81, + 0xAB, 0xE3, 0x81, 0xA1, 0xE3, 0x81, 0xAF, 0x00, + ], io::mode::READ); + + const expected: [_](rune | utf8::invalid | io::EOF | io::error) = [ + 'こ', 'ん', 'に', 'ち', 'は', '\0', io::EOF, + ]; + for (let i = 0z; i < len(expected); i += 1) { + let want = expected[i]; + + match (scanrune(in)) { + r: rune => assert(want is rune && want as rune == r), + io::EOF => assert(want is io::EOF), + * => abort(), + }; + }; +}; diff --git a/vendor/tree-sitter-hare/example/schedule.ha b/vendor/tree-sitter-hare/example/schedule.ha new file mode 100644 index 000000000..ee5f138ab --- /dev/null +++ b/vendor/tree-sitter-hare/example/schedule.ha @@ -0,0 +1,262 @@ +use encoding::hex; +use fmt; +use hare::ast; +use hare::module; +use hare::unparse; +use hash::fnv; +use hash; +use os; +use path; +use strings; +use strio; + +fn ident_hash(ident: ast::ident) u32 = { + let hash = fnv::fnv32(); + defer hash::close(hash); + for (let i = 0z; i < len(ident); i += 1) { + hash::write(hash, strings::toutf8(ident[i])); + hash::write(hash, [0]); + }; + return fnv::sum32(hash); +}; + +fn sched_module(plan: *plan, ident: ast::ident, link: *[]*task) *task = { + let hash = ident_hash(ident); + // TODO: We should not have to dereference the bucket for len or append + let bucket = &plan.modmap[hash % len(plan.modmap)]; + for (let i = 0z; i < len(*bucket); i += 1) { + if (bucket[i].hash == hash) { + return bucket[i].task; + }; + }; + + let ver = match (module::lookup(plan.context, ident)) { + err: module::error => { + let ident = unparse::identstr(ident); + fmt::fatal("Error resolving {}: {}", + ident, module::strerror(err)); + }, + ver: module::version => ver, + }; + + let depends: []*task = []; + defer free(depends); + for (let i = 0z; i < len(ver.depends); i += 1) { + const dep = ver.depends[i]; + let obj = sched_module(plan, dep, link); + append(depends, obj); + }; + + let obj = sched_hare_object(plan, ver, ident, depends...); + append(*bucket, modcache { + hash = hash, + task = obj, + ident = ident, + version = ver, + }); + append(*link, obj); + return obj; +}; + +// Schedules a task which compiles objects into an executable. +fn sched_ld(plan: *plan, output: str, depend: *task...) *task = { + let task = alloc(task { + status = status::SCHEDULED, + output = output, + depend = mkdepends(depend...), + cmd = alloc([ + os::tryenv("LD", "ld"), + "-T", plan.script, + "-o", output, + ]), + }); + for (let i = 0z; i < len(depend); i += 1) { + append(task.cmd, depend[i].output); + }; + append(plan.scheduled, task); + return task; +}; + +// Schedules a task which merges objects into an archive. +fn sched_ar(plan: *plan, output: str, depend: *task...) *task = { + let task = alloc(task { + status = status::SCHEDULED, + output = output, + depend = mkdepends(depend...), + cmd = alloc([ + os::tryenv("AR", "ar"), "-csr", output, + ]), + }); + for (let i = 0z; i < len(depend); i += 1) { + assert(strings::has_suffix(depend[i].output, ".o")); + append(task.cmd, depend[i].output); + }; + append(plan.scheduled, task); + return task; +}; + +// Schedules a task which compiles assembly into an object. +fn sched_as(plan: *plan, output: str, input: str, depend: *task...) *task = { + let task = alloc(task { + status = status::SCHEDULED, + output = output, + depend = mkdepends(depend...), + cmd = alloc([ + os::tryenv("AS", "as"), "-o", output, input, + ]), + }); + append(plan.scheduled, task); + return task; +}; + +// Schedules a task which compiles an SSA file into assembly. +fn sched_qbe(plan: *plan, output: str, depend: *task) *task = { + let task = alloc(task { + status = status::SCHEDULED, + output = output, + depend = mkdepends(depend), + cmd = alloc([ + os::tryenv("QBE", "qbe"), "-o", output, depend.output, + ]), + }); + append(plan.scheduled, task); + return task; +}; + +// Schedules tasks which compiles a Hare module into an object or archive. +fn sched_hare_object( + plan: *plan, + ver: module::version, + namespace: ast::ident, + depend: *task... +) *task = { + // XXX: Do we care to support assembly-only modules? + let mixed = false; + for (let i = 0z; i < len(ver.inputs); i += 1) { + if (strings::has_suffix(ver.inputs[i].path, ".s")) { + mixed = true; + break; + }; + }; + + let ssa = mkfile(plan, "ssa"); + let harec = alloc(task { + status = status::SCHEDULED, + output = ssa, + depend = mkdepends(depend...), + cmd = alloc([ + os::tryenv("HAREC", "harec"), "-o", ssa, + ]), + }); + + let current = false; + let output = if (len(namespace) != 0) { + let version = hex::encodestr(ver.hash); + let ns = unparse::identstr(namespace); + let env = module::identuscore(namespace); + defer free(env); + + append(harec.cmd, "-N", ns); + append(plan.environ, ( + fmt::asprintf("HARE_VERSION_{}", env), version, + )); + + // TODO: Keep this around and append new versions, rather than + // overwriting with just the latest + let manifest = match (module::manifest_load( + plan.context, namespace)) { + err: module::error => fmt::fatal( + "Error reading cache entry for {}: {}", + ns, module::strerror(err)), + m: module::manifest => m, + }; + defer module::manifest_finish(&manifest); + current = module::current(&manifest, &ver); + + let name = fmt::asprintf("{}.{}", version, + if (mixed) "a" else "o"); + defer free(name); + + let td = fmt::asprintf("{}.td", version); + defer free(td); + + let path = plan.context.cache; + for (let i = 0z; i < len(namespace); i += 1) { + path = path::join(path, namespace[i]); + }; + os::mkdirs(path); + append(harec.cmd, "-t", path::join(path, td)); + path::join(path, name); + } else { + // XXX: This is probably kind of dumb + // It would be better to apply any defines which affect this + // namespace instead + for (let i = 0z; i < len(plan.context.defines); i += 1) { + append(harec.cmd, "-D", plan.context.defines[i]); + }; + + // XXX: This is kind of hacky too + for (let i = 0z; i < len(plan.context.tags); i += 1) { + if (plan.context.tags[i].mode == module::tag_mode::INCLUSIVE) { + append(harec.cmd, "-T", strings::concat("+", + plan.context.tags[i].name)); + }; + }; + + mkfile(plan, "o"); // TODO: Should exes go in the cache? + }; + + for (let i = 0z; i < len(ver.inputs); i += 1) { + let path = ver.inputs[i].path; + if (strings::has_suffix(path, ".ha")) { + append(harec.cmd, path); + }; + }; + + if (current) { + harec.status = status::COMPLETE; + harec.output = output; + append(plan.complete, harec); + return harec; + } else { + append(plan.scheduled, harec); + }; + + let s = mkfile(plan, "s"); + let qbe = sched_qbe(plan, s, harec); + let hare_obj = sched_as(plan, + if (mixed) mkfile(plan, "o") else output, + s, qbe); + if (!mixed) { + return hare_obj; + }; + + let objs: []*task = alloc([hare_obj]); + defer free(objs); + for (let i = 0z; i < len(ver.inputs); i += 1) { + // XXX: All of our assembly files don't depend on anything else, + // but that may not be generally true. We may have to address + // this at some point. + let path = ver.inputs[i].path; + if (!strings::has_suffix(path, ".s")) { + continue; + }; + append(objs, sched_as(plan, mkfile(plan, "o"), path)); + }; + return sched_ar(plan, output, objs...); +}; + +// Schedules tasks which compiles hare sources into an executable. +fn sched_hare_exe( + plan: *plan, + ver: module::version, + output: str, + depend: *task... +) *task = { + let obj = sched_hare_object(plan, ver, [], depend...); + // TODO: We should be able to use partial variadic application + let link: []*task = alloc([], len(depend)); + defer free(link); + append(link, obj, ...depend); + return sched_ld(plan, strings::dup(output), link...); +}; diff --git a/vendor/tree-sitter-hare/example/search.ha b/vendor/tree-sitter-hare/example/search.ha new file mode 100644 index 000000000..1adadd562 --- /dev/null +++ b/vendor/tree-sitter-hare/example/search.ha @@ -0,0 +1,26 @@ +// Performs a binary search over a sorted slice. 'in' shall be the sorted slice, +// and 'sz' shall be the size of each array member. The 'cmp' function will be +// called with the key value and an array member, and shall return a integer +// less than, equal to, or greater than zero if the key is, respectively, less +// than, equal to, or greater than the array member. +export fn search( + in: []void, + sz: size, + key: const *void, + cmp: *fn(a: const *void, b: const *void) int, +) nullable *void = { + let ba = in: *[*]u8; + for (let nmemb = len(in); nmemb > 0) { + let v = &ba[nmemb / 2 * sz]; + let r = cmp(key, v); + if (r < 0) { + nmemb /= 2; + } else if (r > 0) { + ba = (v: uintptr + sz: uintptr): *[*]u8; + nmemb -= nmemb / 2 + 1; + } else { + return v; + }; + }; + return null; +}; diff --git a/vendor/tree-sitter-hare/example/segmalloc.ha b/vendor/tree-sitter-hare/example/segmalloc.ha new file mode 100644 index 000000000..2017a9f2d --- /dev/null +++ b/vendor/tree-sitter-hare/example/segmalloc.ha @@ -0,0 +1,26 @@ +// Allocates a segment. +fn segmalloc(n: size) nullable *void = { + return match(mmap(null, n, + PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANON, -1, 0)) { + err: errno => { + assert(err == ENOMEM: errno); + null; + }, + p: *void => p, + }; +}; + +// Frees a segment allocated with segmalloc. +fn segfree(p: *void, s: size) void = { + match (munmap(p, s)) { + err: errno => abort("munmap failed"), + void => void, + }; +}; + +// Marks a segment as writable and drops the execute bit. +fn segwrite(seg: *void, n: size) void = mprotect(seg, n, PROT_READ | PROT_WRITE); + +// Marks a segment as executable and drops the write bit. +fn segexec(seg: *void, n: size) void = mprotect(seg, n, PROT_READ | PROT_EXEC); diff --git a/vendor/tree-sitter-hare/example/setuid.ha b/vendor/tree-sitter-hare/example/setuid.ha new file mode 100644 index 000000000..3b33659d0 --- /dev/null +++ b/vendor/tree-sitter-hare/example/setuid.ha @@ -0,0 +1,41 @@ +use rt; + +// Sets the caller's user ID to the specified value. This generally requires +// elevated permissions from the calling process. +// +// If the system returns an error, this function will abort the program. Failing +// to handle errors from setuid is a grave security issue in your program, and +// therefore we require this function to succeed. If you need to handle the +// error case gracefully, call the appropriate syscall wrapper in [rt] yourself, +// and take extreme care to handle errors correctly. +export fn setuid(uid: uint) void = rt::setresuid(uid, -1u, -1u) as void; + +// Sets the caller's effective user ID to the specified value. This generally +// requires elevated permissions from the calling process. +// +// If the system returns an error, this function will abort the program. Failing +// to handle errors from seteuid is a grave security issue in your program, and +// therefore we require this function to succeed. If you need to handle the +// error case gracefully, call the appropriate syscall wrapper in [rt] yourself, +// and take extreme care to handle errors correctly. +export fn seteuid(uid: uint) void = rt::setresuid(-1u, uid, -1u) as void; + +// Sets the caller's group ID to the specified value. This generally requires +// elevated permissions from the calling process. +// +// If the system returns an error, this function will abort the program. Failing +// to handle errors from setuid is a grave security issue in your program, and +// therefore we require this function to succeed. If you need to handle the +// error case gracefully, call the appropriate syscall wrapper in [rt] yourself, +// and take extreme care to handle errors correctly. +export fn setgid(gid: uint) void = rt::setresgid(gid, -1u, -1u) as void; + +// Sets the caller's effective group ID to the specified value. This generally +// requires elevated permissions from the calling process. +// +// If the system returns an error, this function will abort the program. Failing +// to handle errors from setegid is a grave security issue in your program, and +// therefore we require this function to succeed. If you need to handle the +// error case gracefully, call the appropriate syscall wrapper in [rt] yourself, +// and take extreme care to handle errors correctly. +export fn setegid(gid: uint) void = rt::setresgid(-1u, gid, -1u) as void; diff --git a/vendor/tree-sitter-hare/example/sha1.ha b/vendor/tree-sitter-hare/example/sha1.ha new file mode 100644 index 000000000..ffb36c842 --- /dev/null +++ b/vendor/tree-sitter-hare/example/sha1.ha @@ -0,0 +1,224 @@ +use hash; +use io; +use crypto::math; +use endian; + +// The size, in bytes, of a SHA-1 digest. +export def SIZE: size = 20; + +export def BLOCKSIZE: size = 64; + +def chunk: size = 64; +def init0: u32 = 0x67452301; +def init1: u32 = 0xEFCDAB89; +def init2: u32 = 0x98BADCFE; +def init3: u32 = 0x10325476; +def init4: u32 = 0xC3D2E1F0; + +type digest = struct { + hash: hash::hash, + h: [5]u32, + x: [chunk]u8, + nx: size, + ln: size, +}; + +// Creates a [hash::hash] which computes a SHA-1 hash. Note that this alogorithm +// is no longer considered secure. Where possible, applications are encouraged +// to use [sha256] or [sha512] instead. +export fn sha1() *hash::hash = { + let sha = alloc(digest { + hash = hash::hash { + stream = io::stream { + writer = &write, + closer = &close, + ... + }, + sum = &sum, + reset = &reset, + sz = SIZE, + ... + }, + }); + let hash = &sha.hash; + hash::reset(hash); + return hash; +}; + +fn write(st: *io::stream, buf: const []u8) (size | io::error) = { + let h = st: *digest; + let b: []u8 = buf; + let nn = len(buf); + + h.ln += nn; + + if (h.nx > 0) { + // Compute how many bytes can be copied into h.x + let r = len(h.x) - h.nx; + let n = if (nn > r) r else nn; + h.x[h.nx..] = b[..n]; + h.nx += n; + if (h.nx == chunk) { + block(h, h.x[..]); + h.nx = 0; + }; + b = b[n..]; + }; + if (len(b) >= chunk) { + let n = len(b) & ~(chunk - 1); + block(h, b[..n]); + b = b[n..]; + }; + if (len(b) > 0) { + let n = len(b); + h.x[..n] = b[..]; + h.nx = n; + }; + return nn; +}; + +fn close(st: *io::stream) void = { + free(st); +}; + +fn reset(h: *hash::hash) void = { + let h = h: *digest; + h.h[0] = init0; + h.h[1] = init1; + h.h[2] = init2; + h.h[3] = init3; + h.h[4] = init4; + h.nx = 0; + h.ln = 0; +}; + +fn sum(h: *hash::hash) []u8 = { + let h = h: *digest; + let copy = *h; + let h = © + + // Padding. Add a 1 bit and 0 bits until 56 bytes mod 64. + let ln = h.ln; + let tmp: [64]u8 = [0x80, 0...]; + const pad = if ((ln % 64z) < 56z) 56z - ln % 64z + else 64 + 56z - ln % 64z; + write(&h.hash.stream, tmp[..pad]); + + // Length in bits. + ln <<= 3; + endian::beputu64(tmp, ln: u64); + write(&h.hash.stream, tmp[..8]); + + assert(h.nx == 0); + + // Where we write the digest + let d: [SIZE]u8 = [0...]; + endian::beputu32(d[0..], h.h[0]); + endian::beputu32(d[4..], h.h[1]); + endian::beputu32(d[8..], h.h[2]); + endian::beputu32(d[12..], h.h[3]); + endian::beputu32(d[16..], h.h[4]); + + let slice: []u8 = alloc([], SIZE); + append(slice, ...d); + return slice; +}; + +let K0: u32 = 0x5A827999; +let K1: u32 = 0x6ED9EBA1; +let K2: u32 = 0x8F1BBCDC; +let K3: u32 = 0xCA62C1D6; + +// A generic, pure Hare version of the SHA-1 block step +fn block(h: *digest, p: []u8) void = { + let w: [16]u32 = [0...]; + + let h0 = h.h[0]; + let h1 = h.h[1]; + let h2 = h.h[2]; + let h3 = h.h[3]; + let h4 = h.h[4]; + + for (len(p) >= chunk) { + for (let i = 0z; i < 16; i += 1) { + let j = i * 4; + w[i] = p[j]: u32 << 24 + | p[j+1]: u32 << 16 + | p[j+2]: u32 << 8 + | p[j+3]: u32; + }; + let a = h0; + let b = h1; + let c = h2; + let d = h3; + let e = h4; + + // Each of the four 20-iteration rounds differs only in the + // computation of f and the choice of Ki for i=0..5 + let i = 0z; + for (i < 16; i += 1) { + let f = (b & c) | (~b & d); + let t = math::rotl32(a, 5) + f + e + w[i & 0xf] + K0; + // The order matters here! + e = d; d = c; c = math::rotl32(b, 30); b = a; a = t; + }; + for (i < 20; i += 1) { + let tmp = w[(i - 3) & 0xf] + ^ w[(i - 8) & 0xf] + ^ w[(i - 14) & 0xf] + ^ w[i & 0xf]; + w[i & 0xf] = tmp << 1 | tmp >> 31; + + let f = (b & c) | (~b & d); + let t = math::rotl32(a, 5) + f + e + w[i & 0xf] + K0; + e = d; d = c; c = math::rotl32(b, 30); b = a; a = t; + }; + for (i < 40; i += 1) { + let tmp = w[(i - 3) & 0xf] + ^ w[(i - 8) & 0xf] + ^ w[(i - 14) & 0xf] + ^ w[i & 0xf]; + w[i & 0xf] = tmp << 1 | tmp >> 31; + + let f = b ^ c ^ d; + let t = math::rotl32(a, 5) + f + e + w[i & 0xf] + K1; + e = d; d = c; c = math::rotl32(b, 30); b = a; a = t; + }; + for (i < 60; i += 1) { + let tmp = w[(i - 3) & 0xf] + ^ w[(i - 8) & 0xf] + ^ w[(i - 14) & 0xf] + ^ w[i & 0xf]; + w[i & 0xf] = tmp << 1 | tmp >> 31; + + let f = ((b | c) & d) | (b & c); + let t = math::rotl32(a, 5) + f + e + w[i & 0xf] + K2; + e = d; d = c; c = math::rotl32(b, 30); b = a; a = t; + }; + for (i < 80; i += 1) { + let tmp = w[(i - 3) & 0xf] + ^ w[(i - 8) & 0xf] + ^ w[(i - 14) & 0xf] + ^ w[i & 0xf]; + w[i & 0xf] = tmp << 1 | tmp >> 31; + + let f = b ^ c ^ d; + let t = math::rotl32(a, 5) + f + e + w[i & 0xf] + K3; + e = d; d = c; c = math::rotl32(b, 30); b = a; a = t; + }; + + h0 += a; + h1 += b; + h2 += c; + h3 += d; + h4 += e; + + p = p[chunk..]; + }; + + h.h[0] = h0; + h.h[1] = h1; + h.h[2] = h2; + h.h[3] = h3; + h.h[4] = h4; +}; diff --git a/vendor/tree-sitter-hare/example/sha256.ha b/vendor/tree-sitter-hare/example/sha256.ha new file mode 100644 index 000000000..a463524b6 --- /dev/null +++ b/vendor/tree-sitter-hare/example/sha256.ha @@ -0,0 +1,212 @@ +use crypto::math; +use endian; +use hash; +use io; + +// The size, in bytes, of a SHA-256 digest. +export def SIZE: size = 32; + +// Loosely based on the Go implementation +def chunk: size = 64; +def init0: u32 = 0x6A09E667; +def init1: u32 = 0xBB67AE85; +def init2: u32 = 0x3C6EF372; +def init3: u32 = 0xA54FF53A; +def init4: u32 = 0x510E527F; +def init5: u32 = 0x9B05688C; +def init6: u32 = 0x1F83D9AB; +def init7: u32 = 0x5BE0CD19; + +const k: [_]u32 = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, + 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, + 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, + 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, + 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, + 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, +]; + +type state = struct { + hash: hash::hash, + h: [8]u32, + x: [chunk]u8, + nx: size, + ln: size, +}; + +// Creates a [hash::hash] which computes a SHA-256 hash. +export fn sha256() *hash::hash = { + let sha = alloc(state { + hash = hash::hash { + stream = io::stream { + writer = &write, + closer = &close, + ... + }, + sum = &sum, + reset = &reset, + sz = SIZE, + ... + }, + }); + let hash = &sha.hash; + hash::reset(hash); + return hash; +}; + +fn reset(h: *hash::hash) void = { + let h = h: *state; + h.h[0] = init0; + h.h[1] = init1; + h.h[2] = init2; + h.h[3] = init3; + h.h[4] = init4; + h.h[5] = init5; + h.h[6] = init6; + h.h[7] = init7; + h.nx = 0; + h.ln = 0; +}; + +fn write(st: *io::stream, buf: const []u8) (size | io::error) = { + let h = st: *state; + let b: []u8 = buf; + let n = len(b); + h.ln += n; + if (h.nx > 0) { + let n = if (len(b) > len(h.x) - h.nx) { + len(h.x) - h.nx; + } else len(b); + h.x[h.nx..] = b[..n]; + h.nx += n; + if (h.nx == chunk) { + block(h, h.x[..]); + h.nx = 0; + }; + b = b[n..]; + }; + if (len(b) >= chunk) { + let n = len(b) & ~(chunk - 1); + block(h, b[..n]); + b = b[n..]; + }; + if (len(b) > 0) { + let n = len(b); + h.x[..n] = b[..]; + h.nx = n; + }; + return n; +}; + +fn close(st: *io::stream) void = { + free(st); +}; + +fn sum(h: *hash::hash) []u8 = { + let h = h: *state; + let copy = *h; + let h = © + + // Add padding + let ln = h.ln; + let tmp: [64]u8 = [0...]; + tmp[0] = 0x80; + const n = if ((ln % 64z) < 56z) 56z - ln % 64z + else 64z + 56z - ln % 64z; + write(&h.hash.stream, tmp[..n]); + + ln <<= 3; + endian::beputu64(tmp, ln: u64); + write(&h.hash.stream, tmp[..8]); + + assert(h.nx == 0); + + let digest: [SIZE]u8 = [0...]; + endian::beputu32(digest[0..], h.h[0]); + endian::beputu32(digest[4..], h.h[1]); + endian::beputu32(digest[8..], h.h[2]); + endian::beputu32(digest[12..], h.h[3]); + endian::beputu32(digest[16..], h.h[4]); + endian::beputu32(digest[20..], h.h[5]); + endian::beputu32(digest[24..], h.h[6]); + endian::beputu32(digest[28..], h.h[7]); + + let slice: []u8 = alloc([], SIZE); + append(slice, ...digest); + return slice; +}; + +// TODO: Rewrite me in assembly +fn block(h: *state, buf: []u8) void = { + let w: [64]u32 = [0...]; + let h0 = h.h[0], h1 = h.h[1], h2 = h.h[2], h3 = h.h[3], + h4 = h.h[4], h5 = h.h[5], h6 = h.h[6], h7 = h.h[7]; + for (len(buf) >= chunk) { + for (let i = 0; i < 16; i += 1) { + let j = i * 4; + w[i] = buf[j]: u32 << 24 + | buf[j+1]: u32 << 16 + | buf[j+2]: u32 << 8 + | buf[j+3]: u32; + }; + + for (let i = 16; i < 64; i += 1) { + let v1 = w[i - 2]; + let t1 = (math::rotr32(v1, 17)) + ^ (math::rotr32(v1, 19)) + ^ (v1 >> 10); + let v2 = w[i - 15]; + let t2 = (math::rotr32(v2, 7)) + ^ (math::rotr32(v2, 18)) + ^ (v2 >> 3); + w[i] = t1 + w[i - 7] + t2 + w[i - 16]; + }; + + let a = h0, b = h1, c = h2, d = h3, + e = h4, f = h5, g = h6, h = h7; + for (let i = 0; i < 64; i += 1) { + let t1 = h + ((math::rotr32(e, 6)) + ^ (math::rotr32(e, 11)) + ^ (math::rotr32(e, 25))) + + ((e & f) ^ (~e & g)) + k[i] + w[i]; + + let t2 = ((math::rotr32(a, 2)) + ^ (math::rotr32(a, 13)) + ^ (math::rotr32(a, 22))) + + ((a & b) ^ (a & c) ^ (b & c)); + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + }; + + h0 += a; + h1 += b; + h2 += c; + h3 += d; + h4 += e; + h5 += f; + h6 += g; + h7 += h; + + buf = buf[chunk..]; + }; + + h.h[0] = h0; + h.h[1] = h1; + h.h[2] = h2; + h.h[3] = h3; + h.h[4] = h4; + h.h[5] = h5; + h.h[6] = h6; + h.h[7] = h7; +}; diff --git a/vendor/tree-sitter-hare/example/sha512.ha b/vendor/tree-sitter-hare/example/sha512.ha new file mode 100644 index 000000000..f553b42c6 --- /dev/null +++ b/vendor/tree-sitter-hare/example/sha512.ha @@ -0,0 +1,333 @@ +use crypto::math; +use endian; +use hash; +use io; + +// Package sha512 implements the SHA-384, SHA-512, SHA-512/224, and SHA-512/256 +// hash algorithms as defined in FIPS 180-4. + +type variant = enum { + SHA384, + SHA512, + SHA512_224, + SHA512_256, +}; + +// The size, in bytes, of the SHA-512 checksum. +export def SIZE: size = 64; + +// The size, in bytes, of the SHA-512/224 checksum. +export def SIZE224: size = 28; + +// The size, in bytes, of the SHA-512/256 checksum. +export def SIZE256: size = 32; + +// The size, in bytes, of the SHA-384 checksum. +export def SIZE384: size = 48; + +def chunk: size = 128; +def init0: u64 = 0x6a09e667f3bcc908; +def init1: u64 = 0xbb67ae8584caa73b; +def init2: u64 = 0x3c6ef372fe94f82b; +def init3: u64 = 0xa54ff53a5f1d36f1; +def init4: u64 = 0x510e527fade682d1; +def init5: u64 = 0x9b05688c2b3e6c1f; +def init6: u64 = 0x1f83d9abfb41bd6b; +def init7: u64 = 0x5be0cd19137e2179; +def init0_224: u64 = 0x8c3d37c819544da2; +def init1_224: u64 = 0x73e1996689dcd4d6; +def init2_224: u64 = 0x1dfab7ae32ff9c82; +def init3_224: u64 = 0x679dd514582f9fcf; +def init4_224: u64 = 0x0f6d2b697bd44da8; +def init5_224: u64 = 0x77e36f7304c48942; +def init6_224: u64 = 0x3f9d85a86a1d36c8; +def init7_224: u64 = 0x1112e6ad91d692a1; +def init0_256: u64 = 0x22312194fc2bf72c; +def init1_256: u64 = 0x9f555fa3c84c64c2; +def init2_256: u64 = 0x2393b86b6f53b151; +def init3_256: u64 = 0x963877195940eabd; +def init4_256: u64 = 0x96283ee2a88effe3; +def init5_256: u64 = 0xbe5e1e2553863992; +def init6_256: u64 = 0x2b0199fc2c85b8aa; +def init7_256: u64 = 0x0eb72ddc81c52ca2; +def init0_384: u64 = 0xcbbb9d5dc1059ed8; +def init1_384: u64 = 0x629a292a367cd507; +def init2_384: u64 = 0x9159015a3070dd17; +def init3_384: u64 = 0x152fecd8f70e5939; +def init4_384: u64 = 0x67332667ffc00b31; +def init5_384: u64 = 0x8eb44a8768581511; +def init6_384: u64 = 0xdb0c2e0d64f98fa7; +def init7_384: u64 = 0x47b5481dbefa4fa4; + +type digest = struct { + hash: hash::hash, + h: [8]u64, + x: [chunk]u8, + nx: size, + ln: size, + var: variant, +}; + +// Creates a [hash::hash] which computes a SHA-512 hash. +export fn sha512() *hash::hash = init(variant::SHA512, SIZE); + +// Creates a [hash::hash] which computes a SHA-512/224 hash. +export fn sha512_224() *hash::hash = init(variant::SHA512_224, SIZE224); + +// Creates a [hash::hash] which computes a SHA-512/256 hash. +export fn sha512_256() *hash::hash = init(variant::SHA512_256, SIZE256); + +// Creates a [hash::hash] which computes a SHA-384 hash. +export fn sha384() *hash::hash = init(variant::SHA384, SIZE384); + +// Internal initialization function +fn init(var: variant, sz: size) *hash::hash = { + let sha = alloc(digest { + hash = hash::hash { + stream = io::stream { + writer = &write, + closer = &close, + ... + }, + sum = &sum, + reset = &reset, + sz = sz, + ... + }, + var = var, + }); + + let hash = &sha.hash; + hash::reset(hash); + return hash; +}; + +fn write(st: *io::stream, buf: const []u8) (size | io::error) = { + let h = st: *digest; + let b: []u8 = buf; + let nn = len(buf); + + h.ln += nn; + + if (h.nx > 0) { + // Compute how many bytes can be copied into h.x + let r = len(h.x) - h.nx; + let n = if (nn > r) r else nn; + h.x[h.nx..] = b[..n]; + h.nx += n; + if (h.nx == chunk) { + block(h, h.x[..]); + h.nx = 0; + }; + b = b[n..]; + }; + if (len(b) >= chunk) { + let n = len(b) & ~(chunk - 1); + block(h, b[..n]); + b = b[n..]; + }; + if (len(b) > 0) { + let n = len(b); + h.x[..n] = b[..]; + h.nx = n; + }; + return nn; +}; + +fn close(st: *io::stream) void = free(st); + +fn sum(h: *hash::hash) []u8 = { + let d = h: *digest; + let copy = *d; + let d = © + + // Padding. Add a 1 bit and 0 bits until 112 bytes mod 128 + let ln = d.ln; + let tmp: [chunk]u8 = [0x80, 0...]; + if ((ln % 128) < 112) { + const n = 112 - (ln % 128); + write(&d.hash.stream, tmp[..n]); + } else { + const n = 128 + 112 - (ln % 128); + write(&d.hash.stream, tmp[..n]); + }; + + // Length in bits + ln <<= 3; + endian::beputu64(tmp, 0u64); // upper 64 bits are always zero + endian::beputu64(tmp[8..], ln : u64); + write(&d.hash.stream, tmp[..16]); + + assert(d.nx == 0); + + let dig: [SIZE]u8 = [0...]; + endian::beputu64(dig[0..], d.h[0]); + endian::beputu64(dig[8..], d.h[1]); + endian::beputu64(dig[16..], d.h[2]); + endian::beputu64(dig[24..], d.h[3]); + endian::beputu64(dig[32..], d.h[4]); + endian::beputu64(dig[40..], d.h[5]); + if (d.var != variant::SHA384) { + endian::beputu64(dig[48..], d.h[6]); + endian::beputu64(dig[56..], d.h[7]); + }; + + // We only copy the necessary bytes from fixed-size array into the + // returned slice. The size is already found in the inner hash struct. + let slice: []u8 = alloc([], d.hash.sz); + append(slice, ...dig[..d.hash.sz]); + return slice; +}; + +fn reset(h: *hash::hash) void = { + let d = h: *digest; + switch (d.var) { + variant::SHA384 => { + d.h[0] = init0_384; + d.h[1] = init1_384; + d.h[2] = init2_384; + d.h[3] = init3_384; + d.h[4] = init4_384; + d.h[5] = init5_384; + d.h[6] = init6_384; + d.h[7] = init7_384; + }, + variant::SHA512_224 => { + d.h[0] = init0_224; + d.h[1] = init1_224; + d.h[2] = init2_224; + d.h[3] = init3_224; + d.h[4] = init4_224; + d.h[5] = init5_224; + d.h[6] = init6_224; + d.h[7] = init7_224; + }, + variant::SHA512_256 => { + d.h[0] = init0_256; + d.h[1] = init1_256; + d.h[2] = init2_256; + d.h[3] = init3_256; + d.h[4] = init4_256; + d.h[5] = init5_256; + d.h[6] = init6_256; + d.h[7] = init7_256; + }, + * => { + d.h[0] = init0; + d.h[1] = init1; + d.h[2] = init2; + d.h[3] = init3; + d.h[4] = init4; + d.h[5] = init5; + d.h[6] = init6; + d.h[7] = init7; + } + }; + d.nx = 0; + d.ln = 0; +}; + +const k: [_]u64 = [ + 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, + 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, + 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, + 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, + 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, + 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, + 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, + 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, + 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, + 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, + 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, + 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, + 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, + 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, + 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, + 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, + 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, + 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, + 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, + 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817, +]; + +fn block(h: *digest, p: []u8) void = { + let w: [80]u64 = [0...]; + + let h0 = h.h[0]; + let h1 = h.h[1]; + let h2 = h.h[2]; + let h3 = h.h[3]; + let h4 = h.h[4]; + let h5 = h.h[5]; + let h6 = h.h[6]; + let h7 = h.h[7]; + + for (len(p) >= chunk; p = p[chunk..]) { + for (let i = 0z; i < 16; i += 1) { + let j = i * 8; + w[i] = p[j]: u64 << 56 + | p[j+1]: u64 << 48 + | p[j+2]: u64 << 40 + | p[j+3]: u64 << 32 + | p[j+4]: u64 << 24 + | p[j+5]: u64 << 16 + | p[j+6]: u64 << 8 + | p[j+7]: u64; + }; + for (let i = 16z; i < 80; i += 1) { + let v1 = w[i - 2]; + let t1 = math::rotr64(v1, 19) ^ math::rotr64(v1, 61) ^ (v1 >> 6); + let v2 = w[i - 15]; + let t2 = math::rotr64(v2, 1) ^ math::rotr64(v2, 8) ^ (v2 >> 7); + + w[i] = t1 + w[i - 7] + t2 + w[i - 16]; + }; + + let a = h0; + let b = h1; + let c = h2; + let d = h3; + let e = h4; + let f = h5; + let g = h6; + let h = h7; + + for (let i = 0z; i < 80; i += 1) { + let t1 = h + (math::rotr64(e, 14) + ^ math::rotr64(e, 18) + ^ math::rotr64(e, 41)) + + ((e & f) ^ (~e & g)) + + k[i] + w[i]; + + let t2 = (math::rotr64(a, 28) + ^ math::rotr64(a, 34) + ^ math::rotr64(a, 39)) + + ((a & b) ^ (a & c) ^ (b & c)); + + h = g; + g = f; + f = e; + e = d + t1; + d = c; + c = b; + b = a; + a = t1 + t2; + }; + h0 += a; + h1 += b; + h2 += c; + h3 += d; + h4 += e; + h5 += f; + h6 += g; + h7 += h; + }; + h.h[0] = h0; + h.h[1] = h1; + h.h[2] = h2; + h.h[3] = h3; + h.h[4] = h4; + h.h[5] = h5; + h.h[6] = h6; + h.h[7] = h7; +}; diff --git a/vendor/tree-sitter-hare/example/signal.ha b/vendor/tree-sitter-hare/example/signal.ha new file mode 100644 index 000000000..3331b95ed --- /dev/null +++ b/vendor/tree-sitter-hare/example/signal.ha @@ -0,0 +1,44 @@ +// TODO: work when _NSIG != 64 + +export fn sigemptyset(set: *sigset) int = { + if (set.__val[0] == 0) { + return 1; + }; + set.__val[0] = 0; + return 0; +}; + +export fn sigaddset(set: *sigset, signum: int) (int | errno) = { + if (signum > NSIG) { + return EINVAL; + }; + signum -= 1; + set.__val[0] |= (1 << signum): u64; + return 0; +}; + +export fn sigdelset(set: *sigset, signum: int) (int | errno) = { + if (signum > NSIG) { + return EINVAL; + }; + signum -= 1; + set.__val[0] &= ~(1 << signum: u64); + return 0; +}; + +export fn sigismember(set: *sigset, signum: int) (int | errno) = { + if (signum > NSIG) { + return EINVAL; + }; + signum -= 1; + if ((set.__val[0] & (1 << signum: u64)) != 0) { + return 1; + } else { + return 0; + }; +}; + +export fn sigfillset(set: *sigset) (int | errno) = { + set.__val[0] = 0xffffffffffffffff: u64; + return 0; +}; diff --git a/vendor/tree-sitter-hare/example/socket.ha b/vendor/tree-sitter-hare/example/socket.ha new file mode 100644 index 000000000..f58dfa3b6 --- /dev/null +++ b/vendor/tree-sitter-hare/example/socket.ha @@ -0,0 +1,189 @@ +export type sa_family_t = u16; + +export type in_addr = struct { + s_addr: u32 +}; + +export type sockaddr_in = struct { + sin_family: sa_family_t, + sin_port: u16, + sin_addr: in_addr, + __pad: [16]char, +}; + +export type in6_addr = struct { + union { + s6_addr: [16]u8, + s6_addr16: [8]u16, + s6_addr32: [4]u32, + } +}; + +export type sockaddr_in6 = struct { + sin6_family: sa_family_t, + sin6_port: u16, + sin6_flowinfo: u32, + sin6_addr: in6_addr, + sin6_scope_id: u32, +}; + +export def UNIX_PATH_MAX: size = 108; + +export type sockaddr_un = struct { + sun_family: sa_family_t, + sun_path: [UNIX_PATH_MAX]char, +}; + +export type sockaddr = struct { + union { + in: sockaddr_in, + in6: sockaddr_in6, + un: sockaddr_un, + }, +}; + +// domain for socket(2) +export def AF_UNSPEC: u16 = 0; +export def AF_UNIX: u16 = 1; // Unix domain sockets +export def AF_LOCAL: u16 = 1; // POSIX name for AF_UNIX +export def AF_INET: u16 = 2; // Internet IP Protocol +export def AF_AX25: u16 = 3; // Amateur Radio AX.25 +export def AF_IPX: u16 = 4; // Novell IPX +export def AF_APPLETALK: u16 = 5; // AppleTalk DDP +export def AF_NETROM: u16 = 6; // Amateur Radio NET/ROM +export def AF_BRIDGE: u16 = 7; // Multiprotocol bridge +export def AF_ATMPVC: u16 = 8; // ATM PVCs +export def AF_X25: u16 = 9; // Reserved for X.25 project +export def AF_INET6: u16 = 10; // IP version 6 +export def AF_ROSE: u16 = 11; // Amateur Radio X.25 PLP +export def AF_DECnet: u16 = 12; // Reserved for DECnet project +export def AF_NETBEUI: u16 = 13; // Reserved for 802.2LLC project +export def AF_SECURITY: u16 = 14; // Security callback pseudo AF +export def AF_KEY: u16 = 15; // PF_KEY key management API +export def AF_NETLINK: u16 = 16; +export def AF_ROUTE: u16 = AF_NETLINK; // Alias to emulate 4.4BSD +export def AF_PACKET: u16 = 17; // Packet family +export def AF_ASH: u16 = 18; // Ash +export def AF_ECONET: u16 = 19; // Acorn Econet +export def AF_ATMSVC: u16 = 20; // ATM SVCs +export def AF_RDS: u16 = 21; // RDS sockets +export def AF_SNA: u16 = 22; // Linux SNA Project (nutters!) +export def AF_IRDA: u16 = 23; // IRDA sockets +export def AF_PPPOX: u16 = 24; // PPPoX sockets +export def AF_WANPIPE: u16 = 25; // Wanpipe API Sockets +export def AF_LLC: u16 = 26; // Linux LLC +export def AF_IB: u16 = 27; // Native InfiniBand address +export def AF_MPLS: u16 = 28; // MPLS +export def AF_CAN: u16 = 29; // Controller Area Network +export def AF_TIPC: u16 = 30; // TIPC sockets +export def AF_BLUETOOTH: u16 = 31; // Bluetooth sockets +export def AF_IUCV: u16 = 32; // IUCV sockets +export def AF_RXRPC: u16 = 33; // RxRPC sockets +export def AF_ISDN: u16 = 34; // mISDN sockets +export def AF_PHONET: u16 = 35; // Phonet sockets +export def AF_IEEE802154: u16 = 36; // IEEE802154 sockets +export def AF_CAIF: u16 = 37; // CAIF sockets +export def AF_ALG: u16 = 38; // Algorithm sockets +export def AF_NFC: u16 = 39; // NFC sockets +export def AF_VSOCK: u16 = 40; // vSockets +export def AF_KCM: u16 = 41; // Kernel Connection Multiplexor +export def AF_QIPCRTR: u16 = 42; // Qualcomm IPC Router +export def AF_SMC: u16 = 43; // smc sockets +export def AF_XDP: u16 = 44; // XDP sockets + +// type for socket(2) +export def SOCK_STREAM: int = 1; +export def SOCK_DGRAM: int = 2; +export def SOCK_RAW: int = 3; +export def SOCK_RDM: int = 4; +export def SOCK_SEQPACKET: int = 5; +export def SOCK_DCCP: int = 6; +export def SOCK_PACKET: int = 10; + +// protocol for socket(2) +export def IPPROTO_IP: int = 0; // Dummy protocol for TCP +export def IPPROTO_ICMP: int = 1; // Internet Control Message Protocol +export def IPPROTO_IGMP: int = 2; // Internet Group Management Protocol +export def IPPROTO_IPIP: int = 4; // IPIP tunnels (older KA9Q tunnels use 94) +export def IPPROTO_TCP: int = 6; // Transmission Control Protocol +export def IPPROTO_EGP: int = 8; // Exterior Gateway Protocol +export def IPPROTO_PUP: int = 12; // PUP protocol +export def IPPROTO_UDP: int = 17; // User Datagram Protocol +export def IPPROTO_IDP: int = 22; // XNS IDP protocol +export def IPPROTO_TP: int = 29; // SO Transport Protocol Class 4 +export def IPPROTO_DCCP: int = 33; // Datagram Congestion Control Protocol +export def IPPROTO_IPV6: int = 41; // IPv6-in-IPv4 tunnelling +export def IPPROTO_RSVP: int = 46; // RSVP Protocol +export def IPPROTO_GRE: int = 47; // Cisco GRE tunnels (rfc 1701,1702) +export def IPPROTO_ESP: int = 50; // Encapsulation Security Payload protocol +export def IPPROTO_AH: int = 51; // Authentication Header protocol +export def IPPROTO_MTP: int = 92; // Multicast Transport Protocol +export def IPPROTO_BEETPH: int = 94; // IP option pseudo header for BEET +export def IPPROTO_ENCAP: int = 98; // Encapsulation Header +export def IPPROTO_PIM: int = 103; // Protocol Independent Multicast +export def IPPROTO_COMP: int = 108; // Compression Header Protocol +export def IPPROTO_SCTP: int = 132; // Stream Control Transport Protocol +export def IPPROTO_UDPLITE: int = 136; // UDP-Lite (RFC 3828) +export def IPPROTO_MPLS: int = 137; // MPLS in IP (RFC 4023) +export def IPPROTO_ETHERNET: int = 143; // Ethernet-within-IPv6 Encapsulation +export def IPPROTO_RAW: int = 255; // Raw IP packets +export def IPPROTO_MPTCP: int = 262; // Multipath TCP connection + +// send/rcv flags +export def MSG_OOB: int = 1; +export def MSG_PEEK: int = 2; +export def MSG_DONTROUTE: int = 4; +export def MSG_TRYHARD: int = 4; // Synonym for MSG_DONTROUTE for DECnet +export def MSG_CTRUNC: int = 8; +export def MSG_PROBE: int = 0x10; // Do not send. Only probe path f.e. for MTU +export def MSG_TRUNC: int = 0x20; +export def MSG_DONTWAIT: int = 0x40; // Nonblocking io +export def MSG_EOR: int = 0x80; // End of record +export def MSG_WAITALL: int = 0x100; // Wait for a full request +export def MSG_FIN: int = 0x200; +export def MSG_SYN: int = 0x400; +export def MSG_CONFIRM: int = 0x800; // Confirm path validity +export def MSG_RST: int = 0x1000; +export def MSG_ERRQUEUE: int = 0x2000; // Fetch message from error queue +export def MSG_NOSIGNAL: int = 0x4000; // Do not generate SIGPIPE +export def MSG_MORE: int = 0x8000; // Sender will send more +export def MSG_WAITFORONE: int = 0x10000; // recvmmsg(): block until 1+ packets avail +export def MSG_SENDPAGE_NOPOLICY: int = 0x10000; // sendpage() internal : do no apply policy +export def MSG_SENDPAGE_NOTLAST: int = 0x20000; // sendpage() internal : not the last page +export def MSG_BATCH: int = 0x40000; // sendmmsg(): more messages coming +export def MSG_EOF: int = MSG_FIN; +export def MSG_NO_SHARED_FRAGS: int = 0x80000; // sendpage() internal : page frags are not shared +export def MSG_SENDPAGE_DECRYPTED: int = 0x100000; // sendpage() internal : page may carry * plain text and require encryption +export def MSG_ZEROCOPY: int = 0x4000000; // Use user data in kernel path +export def MSG_FASTOPEN: int = 0x20000000; // Send data in TCP SYN +export def MSG_CMSG_CLOEXEC: int = 0x40000000; // Set close_on_exec for file descriptor received through SCM_RIGHTS + +// setsockopt levels +export def SOL_SOCKET: int = 1; + +// setsockopt options +export def SO_DEBUG: int = 1; +export def SO_REUSEADDR: int = 2; +export def SO_TYPE: int = 3; +export def SO_ERROR: int = 4; +export def SO_DONTROUTE: int = 5; +export def SO_BROADCAST: int = 6; +export def SO_SNDBUF: int = 7; +export def SO_RCVBUF: int = 8; +export def SO_SNDBUFFORCE: int = 32; +export def SO_RCVBUFFORCE: int = 33; +export def SO_KEEPALIVE: int = 9; +export def SO_OOBINLINE: int = 10; +export def SO_NO_CHECK: int = 11; +export def SO_PRIORITY: int = 12; +export def SO_LINGER: int = 13; +export def SO_BSDCOMPAT: int = 14; +export def SO_REUSEPORT: int = 15; + +// the following differ on ppc +export def SO_PASSCRED: int = 16; +export def SO_PEERCRED: int = 17; +export def SO_RCVLOWAT: int = 18; +export def SO_SNDLOWAT: int = 19; +export def SO_RCVTIMEO_OLD: int = 20; +export def SO_SNDTIMEO_OLD: int = 21; diff --git a/vendor/tree-sitter-hare/example/sort.ha b/vendor/tree-sitter-hare/example/sort.ha new file mode 100644 index 000000000..3fd613197 --- /dev/null +++ b/vendor/tree-sitter-hare/example/sort.ha @@ -0,0 +1,48 @@ +// Sorts a slice of items in place. Provide a slice of 'items', the size of each +// member, and a function to compare one member to another. The 'cmp' function +// will be called with two pointers to values within the items slice, and shall +// return an integer less than, equal to, or greater than zero if the first +// argument is, respectively, less than, equal to, or greater than the second +// argument. +// +// This implementation provides a stable sort. +export fn sort( + items: []void, + itemsz: size, + cmp: *fn(a: const *void, b: const *void) int, +) void = { + if (len(items) < 256) { + insort(items, itemsz, cmp); + return; + }; + + // TODO: Timsort + insort(items, itemsz, cmp); +}; + +fn swap(a: *void, b: *void, sz: size) void = { + let a = a: *[*]u8, b = b: *[*]u8; + for (let i = 0z; i < sz; i += 1) { + let c = a[i]; + a[i] = b[i]; + b[i] = c; + }; +}; + +fn insort( + items: []void, + itemsz: size, + cmp: *fn(a: const *void, b: const *void) int, +) void = { + let ba = items: *[*]u8; + for (let i = 0z; i < len(items); i += 1) { + for (let j = i; j > 0; j -= 1) { + let a = &ba[(j - 1) * itemsz]; + let b = &ba[j * itemsz]; + if (cmp(a, b) <= 0) { + break; + }; + swap(a, b, itemsz); + }; + }; +}; diff --git a/vendor/tree-sitter-hare/example/start+test.ha b/vendor/tree-sitter-hare/example/start+test.ha new file mode 100644 index 000000000..423e247d3 --- /dev/null +++ b/vendor/tree-sitter-hare/example/start+test.ha @@ -0,0 +1,22 @@ +const @symbol("__init_array_start") init_start: [*]*fn() void; +const @symbol("__init_array_end") init_end: [*]*fn() void; +const @symbol("__fini_array_start") fini_start: [*]*fn() void; +const @symbol("__fini_array_end") fini_end: [*]*fn() void; + +export @noreturn fn start_ha() void = { + const ninit = (&init_end: uintptr - &init_start: uintptr): size + / size(*fn() void); + for (let i = 0z; i < ninit; i += 1) { + init_start[i](); + }; + + let nfail = tests_main(); + + const nfini = (&fini_end: uintptr - &fini_start: uintptr): size + / size(*fn() void); + for (let i = 0z; i < nfini; i += 1) { + fini_start[i](); + }; + + exit(if (nfail > 0) 1 else 0); +}; diff --git a/vendor/tree-sitter-hare/example/start.ha b/vendor/tree-sitter-hare/example/start.ha new file mode 100644 index 000000000..61319e07c --- /dev/null +++ b/vendor/tree-sitter-hare/example/start.ha @@ -0,0 +1,10 @@ +use rt; +use format::elf; + +@init fn init_linux() void = { + let i = 0; + for (rt::envp[i] != null) { + i += 1; + }; + auxv = &rt::envp[i + 1]: *[*]elf::auxv64; +}; diff --git a/vendor/tree-sitter-hare/example/stat.ha b/vendor/tree-sitter-hare/example/stat.ha new file mode 100644 index 000000000..6f7ae049c --- /dev/null +++ b/vendor/tree-sitter-hare/example/stat.ha @@ -0,0 +1,55 @@ +fn mkdev(major: u32, minor: u32) dev_t = + ((major: u64 & 0xFFFFF000) << 32) | + ((major: u64 & 0x00000FFF) << 8) | + ((minor: u64 & 0xFFFFFF00) << 12) | + (minor: u64 & 0x000000FF); + +fn fstatat_statx( + dirfd: int, + path: path, + flags: int, + mask: uint, + statbuf: *stx, +) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall5(SYS_statx, + dirfd: u64, path: uintptr: u64, flags: u64, + mask: u64, statbuf: uintptr: u64))?; + return; +}; + +export fn fstatat( + dirfd: int, + path: path, + statbuf: *st, + flags: int, +) (errno | void) = { + let path = kpath(path)?; + let statxbuf = stx { ... }; + fstatat_statx(dirfd, path, flags, STATX_BASIC_STATS, &statxbuf)?; + statbuf.dev = mkdev(statxbuf.dev_major, statxbuf.dev_minor); + statbuf.ino = statxbuf.ino; + statbuf.mode = statxbuf.mode; + statbuf.nlink = statxbuf.nlink; + statbuf.uid = statxbuf.uid; + statbuf.gid = statxbuf.gid; + statbuf.rdev = mkdev(statxbuf.dev_major, statxbuf.dev_minor); + statbuf.sz = statxbuf.sz; + statbuf.blksz = statxbuf.blksize; + statbuf.blocks = statxbuf.blocks; + statbuf.atime.tv_sec = statxbuf.atime.tv_sec; + statbuf.atime.tv_nsec = statxbuf.atime.tv_nsec: i64; + statbuf.mtime.tv_sec = statxbuf.mtime.tv_sec; + statbuf.mtime.tv_nsec = statxbuf.mtime.tv_nsec: i64; + statbuf.ctime.tv_sec = statxbuf.ctime.tv_sec; + statbuf.ctime.tv_nsec = statxbuf.ctime.tv_nsec: i64; +}; + +export fn stat(path: path, statbuf: *st) (errno | void) = + fstatat(AT_FDCWD, path, statbuf, 0); + +export fn fstat(fd: int, statbuf: *st) (errno | void) = + fstatat(fd, "", statbuf, AT_EMPTY_PATH); + +export fn lstat(path: path, statbuf: *st) (errno | void) = + fstatat(AT_FDCWD, path, statbuf, AT_SYMLINK_NOFOLLOW); diff --git a/vendor/tree-sitter-hare/example/stdfd.ha b/vendor/tree-sitter-hare/example/stdfd.ha new file mode 100644 index 000000000..9eb6fbf5a --- /dev/null +++ b/vendor/tree-sitter-hare/example/stdfd.ha @@ -0,0 +1,26 @@ +use bufio; +use io; + +let static_stdin_fd: fd_stream = fd_stream { ... }; +let static_stdout_fd: fd_stream = fd_stream { ... }; +let static_stderr_fd: fd_stream = fd_stream { ... }; + +let static_stdin_bufio: bufio::bufstream = bufio::bufstream { ... }; +let static_stdout_bufio: bufio::bufstream = bufio::bufstream { ... }; + +@init fn init_stdfd() void = { + stdin = static_fdopen(0, "", io::mode::READ, &static_stdin_fd); + stdout = static_fdopen(1, "", io::mode::WRITE, &static_stdout_fd); + stderr = static_fdopen(2, "", io::mode::WRITE, &static_stderr_fd); + + static let stdinbuf: [4096]u8 = [0...]; + stdin = bufio::static_buffered(stdin, stdinbuf, [], &static_stdin_bufio); + + static let stdoutbuf: [4096]u8 = [0...]; + stdout = bufio::static_buffered(stdout, [], stdoutbuf, &static_stdout_bufio); +}; + +@fini fn fini_stdfd() void = { + // Flush any pending writes + io::close(stdout); +}; diff --git a/vendor/tree-sitter-hare/example/stoi.ha b/vendor/tree-sitter-hare/example/stoi.ha new file mode 100644 index 000000000..86d296606 --- /dev/null +++ b/vendor/tree-sitter-hare/example/stoi.ha @@ -0,0 +1,20 @@ +@test fn stoi() void = { + assert(stoi64("") as invalid == 0: strconv::invalid); + assert(stoi64("abc") as invalid == 0: strconv::invalid); + assert(stoi64("1a") as invalid == 1: strconv::invalid); + + assert(stoi64("9223372036854775808") is overflow); + assert(stoi64("-9223372036854775809") is overflow); + + assert(stoi64("0") as i64 == 0); + assert(stoi64("1") as i64 == 1); + assert(stoi64("-1") as i64 == -1); + assert(stoi64("9223372036854775807") as i64 == 9223372036854775807); + assert(stoi64("-9223372036854775808") as i64 == -9223372036854775808); + + assert(stoi32("2147483648") is overflow); + assert(stoi32("-2147483649") is overflow); + + assert(stoi32("2147483647") as i32 == 2147483647); + assert(stoi32("-2147483648") as i32 == -2147483648); +}; diff --git a/vendor/tree-sitter-hare/example/stou.ha b/vendor/tree-sitter-hare/example/stou.ha new file mode 100644 index 000000000..0b3be895f --- /dev/null +++ b/vendor/tree-sitter-hare/example/stou.ha @@ -0,0 +1,20 @@ +@test fn stou() void = { + assert(stou64("") as invalid == 0: strconv::invalid); + assert(stou64("abc") as invalid == 0: strconv::invalid); + assert(stou64("1a") as invalid == 1: strconv::invalid); + assert(stou64("-1") as invalid == 0: strconv::invalid); + + assert(stou64("18446744073709551616") is overflow); + assert(stou64("184467440737095516150") is overflow); + + assert(stou64("0") as u64 == 0); + assert(stou64("1") as u64 == 1); + assert(stou64("18446744073709551615") as u64 == 18446744073709551615); +}; + +@test fn stoub() void = { + assert(stou64b("7f", 16) as u64 == 0x7f); + assert(stou64b("7F", 16u) as u64 == 0x7f); + assert(stou64b("37", 8) as u64 == 0o37); + assert(stou64b("110101", 2) as u64 == 0b110101); +}; diff --git a/vendor/tree-sitter-hare/example/strcmp.ha b/vendor/tree-sitter-hare/example/strcmp.ha new file mode 100644 index 000000000..25ff287dd --- /dev/null +++ b/vendor/tree-sitter-hare/example/strcmp.ha @@ -0,0 +1,36 @@ +use strings; + +// Compares two strings by their ASCII sort order. If either string is not +// entirely composed of ASCII characters, void is returned. Otherwise, zero is +// returned if the strings are equal, a negative value if a is less than b, or a +// positive value if a is greater than b. +export fn strcmp(a: str, b: str) (int | void) = { + let a = strings::iter(a), b = strings::iter(b); + for (true) { + let ra = match (strings::next(&a)) { + void => return match (strings::next(&b)) { + void => 0, + rune => -1, + }, + r: rune => r, + }; + let rb = match (strings::next(&b)) { + void => return 1, + r: rune => r, + }; + if (!isascii(ra) || !isascii(rb)) { + return; + }; + if (ra != rb) { + return ra: u32: int - rb: u32: int; + }; + }; +}; + +@test fn strcmp() void = { + assert(strcmp("ABC", "ABC") as int == 0); + assert(strcmp("ABC", "AB") as int == 1); + assert(strcmp("AB", "ABC") as int == -1); + assert(strcmp("BCD", "ABC") as int == 1); + assert(strcmp("ABC", "こんにちは") is void); +}; diff --git a/vendor/tree-sitter-hare/example/stream.ha b/vendor/tree-sitter-hare/example/stream.ha new file mode 100644 index 000000000..034390258 --- /dev/null +++ b/vendor/tree-sitter-hare/example/stream.ha @@ -0,0 +1,95 @@ +use errors; + +// A stream of bytes which supports some subset of read, write, close, or seek +// operations. To create a custom stream, embed this type as the first member of +// a struct with user-specific data and fill out these fields as appropriate. +// +// type my_stream = struct { +// io::stream, +// fd: int, +// }; +// +// fn open(path: str) *io::stream = { +// let fd = // ... +// let stream = alloc(*my_stream, my_stream { +// name = strings::dup(path), +// reader = &my_stream_read, +// writer = &my_stream_write, +// closer = null, +// fd: fd, +// ... +// }); +// return &stream.stream; +// }; +export type stream = struct { + name: str, + reader: nullable *reader, + writer: nullable *writer, + closer: nullable *closer, + copier: nullable *copier, + seeker: nullable *seeker, + unwrap: nullable *unwrap, +}; + +// Reads up to len(buf) bytes from the reader into the given buffer, returning +// the number of bytes read. +export fn read(s: *stream, buf: []u8) (size | EOF | error) = { + return match (s.reader) { + null => errors::unsupported, + r: *reader => r(s, buf), + }; +}; + +// Writes up to len(buf) bytes to the stream from the given buffer, returning +// the number of bytes written. +export fn write(s: *stream, buf: const []u8) (size | error) = { + return match (s.writer) { + null => errors::unsupported, + w: *writer => w(s, buf), + }; +}; + +// Closes the stream. +export fn close(s: *stream) (error | void) = { + return match (s.closer) { + null => errors::unsupported, + c: *closer => c(s), + }; +}; + +// Sets the offset within the stream. +export fn seek(s: *stream, off: off, w: whence) (off | error) = { + return match (s.seeker) { + null => errors::unsupported, + sk: *seeker => sk(s, off, w), + }; +}; + +// Returns the current offset within the stream. +export fn tell(s: *stream) (off | error) = { + return match (s.seeker) { + null => errors::unsupported, + sk: *seeker => sk(s, 0, whence::CUR), + }; +}; + +// Returns the underlying stream for a stream which wraps another stream. +export fn source(s: *stream) (*io::stream | errors::unsupported) = { + return match (s.unwrap) { + null => errors::unsupported, + uw: *unwrap => uw(s), + }; +}; + +let _empty: io::stream = io::stream { + reader = &empty_read, + writer = &empty_write, + ... +}; + +// A [stream] which always reads EOF and discards any writes. +export let empty: *io::stream = &_empty; + +fn empty_read(s: *stream, buf: []u8) (size | EOF | error) = EOF; + +fn empty_write(s: *stream, buf: const []u8) (size | error) = len(buf); diff --git a/vendor/tree-sitter-hare/example/string.ha b/vendor/tree-sitter-hare/example/string.ha new file mode 100644 index 000000000..3f4149907 --- /dev/null +++ b/vendor/tree-sitter-hare/example/string.ha @@ -0,0 +1,20 @@ +// Converts an [error] into a human-friendly string representation. +// +// Note that this strerror implementation lacks any context-specific information +// about the error types supported. For example, [exists] is stringified as "An +// attempt was made to create a resource which already exists", but if source of +// the error is, say, creating a file, it would likely be more appropriate to +// use the term "file" rather than "resource". For this reason, it is preferred +// that modules which return an error type from this module provide their own +// strerror function which provides more context-appropriate error messages for +// each of those types. +export fn strerror(err: error) const str = match (err) { + busy => "The requested resource is not available", + exists => "An attempt was made to create a resource which already exists", + invalid => "An function was called with an invalid combination of arguments", + noaccess => "The user does not have permission to use this resource", + noentry => "An entry was requested which does not exist", + overflow => "The requested operation caused a numeric overflow condition", + unsupported => "The requested operation is not supported", + op: opaque => op.strerror(&op.data), +}; diff --git a/vendor/tree-sitter-hare/example/sub.ha b/vendor/tree-sitter-hare/example/sub.ha new file mode 100644 index 000000000..ec5ec8614 --- /dev/null +++ b/vendor/tree-sitter-hare/example/sub.ha @@ -0,0 +1,55 @@ +use encoding::utf8; + +export type end = void; + +fn utf8_byte_len_bounded(iter: *iterator, end: size) size = { + let pos = 0z; + for (let i = 0z; i < end; i += 1) { + let r: rune = match (strings::next(iter)) { + void => break, + r: rune => r, + }; + + pos += utf8::runesz(r); + }; + return pos; +}; + +fn utf8_byte_len_unbounded(iter: *iterator) size = { + let pos = 0z; + for (true) { + let r: rune = match (strings::next(iter)) { + void => break, + r: rune => r, + }; + + pos += utf8::runesz(r); + }; + return pos; +}; + +// Returns a substring in the range [start, end - 1], where each argument is the +// index of the Nth rune. If the end argument is given as [strings::end], the +// end of the substring is the end of the original string. The lifetime of the +// substring is the same as that of the original string. +// +// Note that substringing runewise is not always the correct thing to do, and it +// may cause unexpected linguistic errors to arise. You may need to use +// [unicode::graphsub] instead. +export fn sub(s: str, start: size, end: (size | end)) str = { + let iter = iter(s); + let starti = utf8_byte_len_bounded(&iter, start); + let endi = match (end) { + sz: size => starti + utf8_byte_len_bounded(&iter, sz - start), + end => starti + utf8_byte_len_unbounded(&iter), + }; + let bytes = toutf8(s); + return fromutf8_unsafe(bytes[starti..endi]); +}; + +@test fn sub() void = { + assert(sub("a string", 2, end) == "string"); + assert(sub("a string", 0, 1) == "a"); + assert(sub("a string", 0, 3) == "a s"); + assert(sub("a string", 2, 8) == "string"); +}; diff --git a/vendor/tree-sitter-hare/example/subcmds.ha b/vendor/tree-sitter-hare/example/subcmds.ha new file mode 100644 index 000000000..ff0736715 --- /dev/null +++ b/vendor/tree-sitter-hare/example/subcmds.ha @@ -0,0 +1,334 @@ +use fmt; +use getopt; +use hare::module; +use os; +use os::exec; +use path; + +fn default_tags() []module::tag = { + return alloc([module::tag { + name = os::machine(), + mode = module::tag_mode::INCLUSIVE, + }, module::tag { + name = PLATFORM, + mode = module::tag_mode::INCLUSIVE, + }]); +}; + +type goal = enum { + OBJ, + EXE, +}; + +fn build(args: []str) void = { + let help: []getopt::help = [ + "compiles Hare programs", + ('c', "build object instead of executable"), + ('v', "print executed commands"), + ('D', "ident:type=value", "define a constant"), + ('j', "jobs", "set parallelism for build"), + ('l', "name", "link with a system library"), + ('o', "path", "set output file name"), + ('t', "arch", "set target architecture"), + ('T', "tags...", "set build tags"), + ('X', "tags...", "unset build tags"), + "path" + ]; + let cmd = getopt::parse(args, help...); + defer getopt::finish(&cmd); + + let verbose = false; + let output = ""; + let goal = goal::EXE; + let defines: []str = []; + for (let i = 0z; i < len(cmd.opts); i += 1) { + let opt = cmd.opts[i]; + switch (opt.0) { + 'c' => goal = goal::OBJ, + 'v' => verbose = true, + 'D' => append(defines, opt.1), + 'j' => abort(), // TODO + 'l' => abort(), // TODO + 'o' => output = opt.1, + 't' => abort(), // TODO + 'T' => abort(), // TODO + 'X' => abort(), // TODO + * => abort(), + }; + }; + + assert(goal == goal::EXE); // TODO + + let input = + if (len(cmd.args) == 0) os::getcwd() + else if (len(cmd.args) == 1) cmd.args[0] + else { + getopt::printusage(os::stderr, args[0], help...); + os::exit(1); + }; + + let tags = default_tags(); + defer free(tags); + + let ctx = module::context_init(tags, defines, HAREPATH); + defer module::context_finish(&ctx); + + let plan = mkplan(&ctx); + defer plan_finish(&plan); + + let ver = match (module::scan(&ctx, input)) { + ver: module::version => ver, + err: module::error => fmt::fatal( + "Error scanning input module: {}", + module::strerror(err)), + }; + + let depends: []*task = []; + sched_module(&plan, ["rt"], &depends); + + for (let i = 0z; i < len(ver.depends); i += 1z) { + const dep = ver.depends[i]; + sched_module(&plan, dep, &depends); + }; + + // TODO: Choose this more intelligently + if (output == "") { + output = path::basename(ver.basedir); + }; + sched_hare_exe(&plan, ver, output, depends...); + plan_execute(&plan, verbose); +}; + +fn cache(args: []str) void = { + let help: []getopt::help = [ + "manages the build cache", + ('c', "cleans the specified modules"), + "modules...", + ]; + let cmd = getopt::parse(args, help...); + defer getopt::finish(&cmd); + + abort(); // TODO +}; + +fn deps(args: []str) void = { + let help: []getopt::help = [ + "prints dependency information for Hare programs", + ('d', "print dot syntax for use with graphviz"), + ('M', "print rules for POSIX make"), + ('T', "tags...", "set build tags"), + ('X', "tags...", "unset build tags"), + "path", + ]; + let cmd = getopt::parse(args, help...); + defer getopt::finish(&cmd); + + abort(); // TODO +}; + +fn run(args: []str) void = { + let help: []getopt::help = [ + "compiles and runs Hare programs", + ('v', "print executed commands"), + ('D', "ident:type=value", "define a constant"), + ('j', "jobs", "set parallelism for build"), + ('l', "name", "link with a system library"), + ('T', "tags...", "set build tags"), + ('X', "tags...", "unset build tags"), + "path", "args...", + ]; + let cmd = getopt::parse(args, help...); + defer getopt::finish(&cmd); + + let verbose = false; + let defines: []str = []; + for (let i = 0z; i < len(cmd.opts); i += 1) { + let opt = cmd.opts[i]; + switch (opt.0) { + 'v' => verbose = true, + 'D' => append(defines, opt.1), + 'j' => abort(), // TODO + 'l' => abort(), // TODO + 't' => abort(), // TODO + 'T' => abort(), // TODO + 'X' => abort(), // TODO + * => abort(), + }; + }; + + let input = ""; + let runargs: []str = []; + if (len(cmd.args) == 0) { + input = os::getcwd(); + } else { + input = cmd.args[0]; + runargs = cmd.args[1..]; + }; + + let tags = default_tags(); + defer free(tags); + + let ctx = module::context_init(tags, defines, HAREPATH); + defer module::context_finish(&ctx); + + let plan = mkplan(&ctx); + defer plan_finish(&plan); + + let ver = match (module::scan(&ctx, input)) { + ver: module::version => ver, + err: module::error => fmt::fatal( + "Error scanning input module: {}", + module::strerror(err)), + }; + + let depends: []*task = []; + sched_module(&plan, ["rt"], &depends); + + for (let i = 0z; i < len(ver.depends); i += 1z) { + const dep = ver.depends[i]; + sched_module(&plan, dep, &depends); + }; + + let output = mkfile(&plan, "out"); + sched_hare_exe(&plan, ver, output, depends...); + plan_execute(&plan, verbose); + let cmd = match (exec::cmd(output, runargs...)) { + err: exec::error => fmt::fatal("exec: {}", exec::strerror(err)), + cmd: exec::command => cmd, + }; + exec::setname(&cmd, input); + exec::exec(&cmd); +}; + +fn test(args: []str) void = { + let help: []getopt::help = [ + "compiles and runs tests for Hare programs", + ('v', "print executed commands"), + ('D', "ident:type=value", "define a constant"), + ('j', "jobs", "set parallelism for build"), + ('l', "name", "link with a system library"), + ('T', "tags...", "set build tags"), + ('X', "tags...", "unset build tags"), + "[tests...]" + ]; + let cmd = getopt::parse(args, help...); + defer getopt::finish(&cmd); + + let verbose = false; + let defines: []str = []; + for (let i = 0z; i < len(cmd.opts); i += 1) { + let opt = cmd.opts[i]; + switch (opt.0) { + 'v' => verbose = true, + 'D' => append(defines, opt.1), + 'j' => abort(), // TODO + 'l' => abort(), // TODO + 't' => abort(), // TODO + 'T' => abort(), // TODO + 'X' => abort(), // TODO + * => abort(), + }; + }; + + let input = ""; + let runargs: []str = []; + if (len(cmd.args) == 0) { + input = os::getcwd(); + } else { + input = cmd.args[0]; + runargs = cmd.args[1..]; + }; + + let tags = default_tags(); + defer free(tags); + append(tags, module::tag { + name = "test", + mode = module::tag_mode::INCLUSIVE, + }); + + let ctx = module::context_init(tags, defines, HAREPATH); + defer module::context_finish(&ctx); + + let plan = mkplan(&ctx); + defer plan_finish(&plan); + + let ver = match (module::scan(&ctx, input)) { + ver: module::version => ver, + err: module::error => fmt::fatal( + "Error scanning input module: {}", + module::strerror(err)), + }; + + let depends: []*task = []; + sched_module(&plan, ["rt"], &depends); + + for (let i = 0z; i < len(ver.depends); i += 1z) { + const dep = ver.depends[i]; + sched_module(&plan, dep, &depends); + }; + + let output = mkfile(&plan, "out"); + sched_hare_exe(&plan, ver, output, depends...); + plan_execute(&plan, verbose); + let cmd = match (exec::cmd(output, runargs...)) { + err: exec::error => fmt::fatal("exec: {}", exec::strerror(err)), + cmd: exec::command => cmd, + }; + exec::setname(&cmd, input); + exec::exec(&cmd); +}; + +fn version(args: []str) void = { + fmt::printfln("Hare version {}", VERSION); + fmt::errorln(); + fmt::printf("Build tags\t"); + const tags = default_tags(); + for (let i = 0z; i < len(tags); i += 1) { + const tag = tags[i]; + const inclusive = (tag.mode & module::tag_mode::INCLUSIVE) == module::tag_mode::INCLUSIVE; + fmt::printf("{}{}", if (inclusive) '+' else '-', tag.name); + }; + fmt::println(); + + match (os::getenv("HAREPATH")) { + void => fmt::printfln("HAREPATH\t{}", HAREPATH), + s: str => fmt::printfln("HAREPATH\t{}\t(from environment)", s), + }; + if (len(args) > 1 && args[1] == "-v") { + fmt::errorln(" +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⡀⠀⠀⠀⠀⠀⢀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠊⠀⠀⠁⠀⢱⢄⠀⠀⠀⣷⠓⠀⠌⠓⢄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠊⠀⠀⠀⠀⠀⠀⠀⠀⠡⡀⢰⠛⠀⠀⠀⠀⠀⢡⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡰⠁⠀⠀⢠⢠⠀⡄⢴⢠⣦⠀⢁⢸⢸⠀⠀⠀⠀⠀⠀⢁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠀⠀⡀⢰⠈⠌⠀⠇⣹⡞⡟⠀⢸⢸⡏⠂⠀⠀⡄⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡄⠀⡒⠀⢴⠏⠄⠘⠁⣾⣿⡆⠀⣸⣷⢠⠀⠀⡀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⢡⠀⡀⢢⠁⢟⢡⣸⢹⡇⠀⢿⡆⡄⡀⠀⠁⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⡐⠀⢌⡖⡐⠐⠀⢾⠂⣿⣿⡧⠀⢠⠗⡁⠁⠰⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢣⠀⢘⢻⢠⣧⡆⡘⡐⣿⣽⣷⠀⢸⢸⠃⡀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⡄⠀⠈⣏⢿⣿⡔⣼⣿⣿⣿⠀⠸⡿⡿⢷⢀⡄⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠠⢤⡶⠒⠞⠓⢱⠀⠀⠸⣿⣻⣿⠿⣯⠆⠀⠀⡠⠿⠷⠜⠎⠰⠰⡄⣀⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⠈⡠⠅⡢⠄⠌⠀⠦⠀⢀⢇⠀⠀⡙⡯⠋⠀⢀⠨⠒⠑⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠣⡂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣐⣄⢽⠿⡰⡍⠐⠈⠀⠀⠀⠀⠀⠈⠃⠈⢆⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢢⡀⠀⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠐⠶⠿⠫⠠⠀⡐⠀⠀⠀⠀⠀⠉⠀⠀⠀⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⣄⠀⠈⠱⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠐⠂⠒⠑⠂⠄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢤⡏⠀⠀⠀ ⢠⣾⣿⣿⣿⠶⣄⠀⠀⠀⠀⠀⠀⠊⠀⢸⣾⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⣰⠂⠀⢔⣊⠉⠀⠒⠂⠀⠀⠀⠀⢤⡀⡀⠀⠐⠔⢒⠀⠂⠀⠀ ⢸⣿⣿⣿⣧⠀⣼⡀⠀⠀⠀⠀⠀⠀⠣⡀⠻⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⢐⡂⠴⠀⡚⠛⠀⠀⠈⠀⠀⠀⠀⠀⠐⠢⠠⠀⠀⠀⢱⡦⠀⠂⠀⠀⠀⠀⢻⣿⣿⣿⣷⣿⡧⠀⠀⠀⠀⠀⠀⠠⠉⠐⠘⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠄⠨⠍⠙⠷⠟⠀⠐⠀⠀⠀⠤⡀⠀⠀⠠⣌⡁⠀⠀⢠⡶⠀⢀⡂⠀⠀⠀⠈⠛⠻⠿⠟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⢂⠀⠫⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⢐⣭⡁⠥⣀⠻⣿⡄⣅⣤⠀⠈⠌⡂⠀⠀⠀⢀⡒⠠⠀⠂⣰⣡⡀⠀⠀⠀⠀⠀⠀⡠⠀⢄⢀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⢢⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⢱⣏⣹⣯⢗⡩⣥⠄⠘⢓⠩⡀⠁⠀⠀⡀⠀⠂⡐⠠⠀⠀⢘⡻⣼⠄⡀⠂⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⣤⣄⠀⢀⡤⠙⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⢰⣺⣿⣾⣮⡷⣖⣿⠂⡂⢚⣽⠆⠨⠀⠫⠀⠀⠘⠈⢢⠘⠀⠰⡲⡫⢾⣴⣀⠀⠀⠀⠀⠀⠀⡀⣀⢀⢀⠀⠀⠀⠈⢻⣷⠟⠡⡘⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⡽⣾⣷⣶⣯⣾⢞⣿⡾⠊⣈⢄⡂⠀⠢⢀⠄⡄⠀⠀⠈⠰⡁⡀⡘⠱⣱⡟⣝⢷⣧⣆⡔⡄⡀⡈⠀⠀⠀⠈⠀⠀⡀⠸⣇⣴⠴⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠈⡿⢿⣿⣿⣿⣕⣺⣗⣴⡿⣿⣈⣴⢆⠁⠊⠔⡖⠀⠁⡂⠈⠬⣾⣶⢹⣾⣮⣿⣿⣿⢿⣷⣷⣷⣦⣧⣶⣴⣧⣼⣷⣿⣿⢿⡗⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⢀⠀⠀⠤⠄⢪⢿⣿⣿⣿⣯⣗⡽⢻⣍⡿⣯⠱⣣⡢⢂⢈⠚⠠⠐⢐⠡⢀⢌⠋⢀⣿⡏⠹⣿⣿⣷⣿⣿⣿⠿⣿⣿⣿⣿⣿⣿⣿⣾⠿⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠐⠂⣀⣀⣀⠜⣯⣿⢿⣵⣿⣿⣭⡾⣙⠼⣼⡆⡄⣤⡏⠈⠈⠠⠞⠔⡈⠨⡀⠠⡼⣎⡀⣳⢘⣿⣽⣿⣿⣿⣿⣟⣿⣯⣻⣿⣼⣮⣿⡍⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠤⠀⠉⠙⠃⠸⣵⣿⣿⣿⣿⣭⣴⣷⣞⢍⠰⣅⡛⡿⣷⣈⡟⢓⣔⠁⡇⣣⣟⠆⣿⡼⣤⣤⣻⣨⣿⣿⣿⣿⣿⣿⣿⣿⣿⣻⣾⠯⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠐⠶⢘⢿⣿⣿⣿⣿⣿⣎⣯⡞⣾⣧⣟⣧⣿⡽⡹⢻⢠⢠⣤⣿⠻⠿⢻⠿⣾⣿⣿⣿⣷⣿⣟⣿⣿⣿⣿⣿⣿⡿⢏⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⢀⣡⡭⣭⣉⣉⣈⠹⢿⣿⣿⣿⣾⣼⣿⣾⣷⣿⡿⢿⣿⣿⢿⣿⣾⣿⣿⣿⢷⣿⣄⣿⣬⣭⡜⡿⡟⢻⣿⣟⣿⣿⠿⡟⠜⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠤⠌⠭⠭⢭⢭⣥⣘⣻⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⣿⣿⣿⣷⣷⣹⣧⣧⣽⣿⣿⣿⡿⢟⣃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠐⠒⢒⣒⣀⣈⣉⣉⣋⣙⡻⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⡿⣿⢿⢿⣿⠿⠻⠛⠯⠹⠁⢑⠐⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⣀⣈⣀⣒⣓⡒⡒⠒⠒⢒⡀⠀⠀⠀⠀⠴⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠁⠀⣀⠀⠀⠤⠀⠤⠤⠀⠀⠒⠒⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠄⠀⠀⠀⠐⠒⠒⠒⠀⠀⠀⠀⠀⠀⠈⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠁"); + }; +}; diff --git a/vendor/tree-sitter-hare/example/suffix.ha b/vendor/tree-sitter-hare/example/suffix.ha new file mode 100644 index 000000000..d8644548e --- /dev/null +++ b/vendor/tree-sitter-hare/example/suffix.ha @@ -0,0 +1,48 @@ +// Returns true if 'in' has the given prefix. +export fn has_prefix(in: str, prefix: str) bool = { + let a = toutf8(in), b = toutf8(prefix); + if (len(a) < len(b)) { + return false; + }; + for (let i = 0z; i < len(b); i += 1) { + if (a[i] != b[i]) { + return false; + }; + }; + return true; +}; + +@test fn prefix() void = { + assert(has_prefix("abcde", "abc")); + assert(has_prefix("abcde", "abcde")); + assert(has_prefix("abcde", "")); + assert(has_prefix("", "")); + assert(!has_prefix("abcde", "cde")); + assert(!has_prefix("abcde", "abcdefg")); + assert(!has_prefix("", "abc")); +}; + +// Returns true if 'in' has the given prefix. +export fn has_suffix(in: str, suff: str) bool = { + let a = toutf8(in), b = toutf8(suff); + if (len(a) < len(b)) { + return false; + }; + for (let i = 0z; i < len(b); i += 1) { + if (a[len(a) - len(b) + i] != b[i]) { + return false; + }; + }; + return true; +}; + +@test fn suffix() void = { + assert(has_suffix("abcde", "cde")); + assert(has_suffix("abcde", "abcde")); + assert(has_suffix("abcde", "")); + assert(has_suffix("", "")); + assert(has_suffix("abcde", "")); + assert(!has_suffix("abcde", "abc")); + assert(!has_suffix("abcde", "fabcde")); + assert(!has_suffix("", "abc")); +}; diff --git a/vendor/tree-sitter-hare/example/syscallno+aarch64.ha b/vendor/tree-sitter-hare/example/syscallno+aarch64.ha new file mode 100644 index 000000000..23fab56ea --- /dev/null +++ b/vendor/tree-sitter-hare/example/syscallno+aarch64.ha @@ -0,0 +1,293 @@ +export def SYS_io_setup: u64 = 0; +export def SYS_io_destroy: u64 = 1; +export def SYS_io_submit: u64 = 2; +export def SYS_io_cancel: u64 = 3; +export def SYS_io_getevents: u64 = 4; +export def SYS_setxattr: u64 = 5; +export def SYS_lsetxattr: u64 = 6; +export def SYS_fsetxattr: u64 = 7; +export def SYS_getxattr: u64 = 8; +export def SYS_lgetxattr: u64 = 9; +export def SYS_fgetxattr: u64 = 10; +export def SYS_listxattr: u64 = 11; +export def SYS_llistxattr: u64 = 12; +export def SYS_flistxattr: u64 = 13; +export def SYS_removexattr: u64 = 14; +export def SYS_lremovexattr: u64 = 15; +export def SYS_fremovexattr: u64 = 16; +export def SYS_getcwd: u64 = 17; +export def SYS_lookup_dcookie: u64 = 18; +export def SYS_eventfd2: u64 = 19; +export def SYS_epoll_create1: u64 = 20; +export def SYS_epoll_ctl: u64 = 21; +export def SYS_epoll_pwait: u64 = 22; +export def SYS_dup: u64 = 23; +export def SYS_dup3: u64 = 24; +export def SYS_fcntl: u64 = 25; +export def SYS_inotify_init1: u64 = 26; +export def SYS_inotify_add_watch: u64 = 27; +export def SYS_inotify_rm_watch: u64 = 28; +export def SYS_ioctl: u64 = 29; +export def SYS_ioprio_set: u64 = 30; +export def SYS_ioprio_get: u64 = 31; +export def SYS_flock: u64 = 32; +export def SYS_mknodat: u64 = 33; +export def SYS_mkdirat: u64 = 34; +export def SYS_unlinkat: u64 = 35; +export def SYS_symlinkat: u64 = 36; +export def SYS_linkat: u64 = 37; +export def SYS_renameat: u64 = 38; +export def SYS_umount2: u64 = 39; +export def SYS_mount: u64 = 40; +export def SYS_pivot_root: u64 = 41; +export def SYS_nfsservctl: u64 = 42; +export def SYS_statfs: u64 = 43; +export def SYS_fstatfs: u64 = 44; +export def SYS_truncate: u64 = 45; +export def SYS_ftruncate: u64 = 46; +export def SYS_fallocate: u64 = 47; +export def SYS_faccessat: u64 = 48; +export def SYS_chdir: u64 = 49; +export def SYS_fchdir: u64 = 50; +export def SYS_chroot: u64 = 51; +export def SYS_fchmod: u64 = 52; +export def SYS_fchmodat: u64 = 53; +export def SYS_fchownat: u64 = 54; +export def SYS_fchown: u64 = 55; +export def SYS_openat: u64 = 56; +export def SYS_close: u64 = 57; +export def SYS_vhangup: u64 = 58; +export def SYS_pipe2: u64 = 59; +export def SYS_quotactl: u64 = 60; +export def SYS_getdents64: u64 = 61; +export def SYS_lseek: u64 = 62; +export def SYS_read: u64 = 63; +export def SYS_write: u64 = 64; +export def SYS_readv: u64 = 65; +export def SYS_writev: u64 = 66; +export def SYS_pread64: u64 = 67; +export def SYS_pwrite64: u64 = 68; +export def SYS_preadv: u64 = 69; +export def SYS_pwritev: u64 = 70; +export def SYS_sendfile: u64 = 71; +export def SYS_pselect6: u64 = 72; +export def SYS_ppoll: u64 = 73; +export def SYS_signalfd4: u64 = 74; +export def SYS_vmsplice: u64 = 75; +export def SYS_splice: u64 = 76; +export def SYS_tee: u64 = 77; +export def SYS_readlinkat: u64 = 78; +export def SYS_newfstatat: u64 = 79; +export def SYS_fstat: u64 = 80; +export def SYS_sync: u64 = 81; +export def SYS_fsync: u64 = 82; +export def SYS_fdatasync: u64 = 83; +export def SYS_sync_file_range: u64 = 84; +export def SYS_timerfd_create: u64 = 85; +export def SYS_timerfd_settime: u64 = 86; +export def SYS_timerfd_gettime: u64 = 87; +export def SYS_utimensat: u64 = 88; +export def SYS_acct: u64 = 89; +export def SYS_capget: u64 = 90; +export def SYS_capset: u64 = 91; +export def SYS_personality: u64 = 92; +export def SYS_exit: u64 = 93; +export def SYS_exit_group: u64 = 94; +export def SYS_waitid: u64 = 95; +export def SYS_set_tid_address: u64 = 96; +export def SYS_unshare: u64 = 97; +export def SYS_futex: u64 = 98; +export def SYS_set_robust_list: u64 = 99; +export def SYS_get_robust_list: u64 = 100; +export def SYS_nanosleep: u64 = 101; +export def SYS_getitimer: u64 = 102; +export def SYS_setitimer: u64 = 103; +export def SYS_kexec_load: u64 = 104; +export def SYS_init_module: u64 = 105; +export def SYS_delete_module: u64 = 106; +export def SYS_timer_create: u64 = 107; +export def SYS_timer_gettime: u64 = 108; +export def SYS_timer_getoverrun: u64 = 109; +export def SYS_timer_settime: u64 = 110; +export def SYS_timer_delete: u64 = 111; +export def SYS_clock_settime: u64 = 112; +export def SYS_clock_gettime: u64 = 113; +export def SYS_clock_getres: u64 = 114; +export def SYS_clock_nanosleep: u64 = 115; +export def SYS_syslog: u64 = 116; +export def SYS_ptrace: u64 = 117; +export def SYS_sched_setparam: u64 = 118; +export def SYS_sched_setscheduler: u64 = 119; +export def SYS_sched_getscheduler: u64 = 120; +export def SYS_sched_getparam: u64 = 121; +export def SYS_sched_setaffinity: u64 = 122; +export def SYS_sched_getaffinity: u64 = 123; +export def SYS_sched_yield: u64 = 124; +export def SYS_sched_get_priority_max: u64 = 125; +export def SYS_sched_get_priority_min: u64 = 126; +export def SYS_sched_rr_get_interval: u64 = 127; +export def SYS_restart_syscall: u64 = 128; +export def SYS_kill: u64 = 129; +export def SYS_tkill: u64 = 130; +export def SYS_tgkill: u64 = 131; +export def SYS_sigaltstack: u64 = 132; +export def SYS_rt_sigsuspend: u64 = 133; +export def SYS_rt_sigaction: u64 = 134; +export def SYS_rt_sigprocmask: u64 = 135; +export def SYS_rt_sigpending: u64 = 136; +export def SYS_rt_sigtimedwait: u64 = 137; +export def SYS_rt_sigqueueinfo: u64 = 138; +export def SYS_rt_sigreturn: u64 = 139; +export def SYS_setpriority: u64 = 140; +export def SYS_getpriority: u64 = 141; +export def SYS_reboot: u64 = 142; +export def SYS_setregid: u64 = 143; +export def SYS_setgid: u64 = 144; +export def SYS_setreuid: u64 = 145; +export def SYS_setuid: u64 = 146; +export def SYS_setresuid: u64 = 147; +export def SYS_getresuid: u64 = 148; +export def SYS_setresgid: u64 = 149; +export def SYS_getresgid: u64 = 150; +export def SYS_setfsuid: u64 = 151; +export def SYS_setfsgid: u64 = 152; +export def SYS_times: u64 = 153; +export def SYS_setpgid: u64 = 154; +export def SYS_getpgid: u64 = 155; +export def SYS_getsid: u64 = 156; +export def SYS_setsid: u64 = 157; +export def SYS_getgroups: u64 = 158; +export def SYS_setgroups: u64 = 159; +export def SYS_uname: u64 = 160; +export def SYS_sethostname: u64 = 161; +export def SYS_setdomainname: u64 = 162; +export def SYS_getrlimit: u64 = 163; +export def SYS_setrlimit: u64 = 164; +export def SYS_getrusage: u64 = 165; +export def SYS_umask: u64 = 166; +export def SYS_prctl: u64 = 167; +export def SYS_getcpu: u64 = 168; +export def SYS_gettimeofday: u64 = 169; +export def SYS_settimeofday: u64 = 170; +export def SYS_adjtimex: u64 = 171; +export def SYS_getpid: u64 = 172; +export def SYS_getppid: u64 = 173; +export def SYS_getuid: u64 = 174; +export def SYS_geteuid: u64 = 175; +export def SYS_getgid: u64 = 176; +export def SYS_getegid: u64 = 177; +export def SYS_gettid: u64 = 178; +export def SYS_sysinfo: u64 = 179; +export def SYS_mq_open: u64 = 180; +export def SYS_mq_unlink: u64 = 181; +export def SYS_mq_timedsend: u64 = 182; +export def SYS_mq_timedreceive: u64 = 183; +export def SYS_mq_notify: u64 = 184; +export def SYS_mq_getsetattr: u64 = 185; +export def SYS_msgget: u64 = 186; +export def SYS_msgctl: u64 = 187; +export def SYS_msgrcv: u64 = 188; +export def SYS_msgsnd: u64 = 189; +export def SYS_semget: u64 = 190; +export def SYS_semctl: u64 = 191; +export def SYS_semtimedop: u64 = 192; +export def SYS_semop: u64 = 193; +export def SYS_shmget: u64 = 194; +export def SYS_shmctl: u64 = 195; +export def SYS_shmat: u64 = 196; +export def SYS_shmdt: u64 = 197; +export def SYS_socket: u64 = 198; +export def SYS_socketpair: u64 = 199; +export def SYS_bind: u64 = 200; +export def SYS_listen: u64 = 201; +export def SYS_accept: u64 = 202; +export def SYS_connect: u64 = 203; +export def SYS_getsockname: u64 = 204; +export def SYS_getpeername: u64 = 205; +export def SYS_sendto: u64 = 206; +export def SYS_recvfrom: u64 = 207; +export def SYS_setsockopt: u64 = 208; +export def SYS_getsockopt: u64 = 209; +export def SYS_shutdown: u64 = 210; +export def SYS_sendmsg: u64 = 211; +export def SYS_recvmsg: u64 = 212; +export def SYS_readahead: u64 = 213; +export def SYS_brk: u64 = 214; +export def SYS_munmap: u64 = 215; +export def SYS_mremap: u64 = 216; +export def SYS_add_key: u64 = 217; +export def SYS_request_key: u64 = 218; +export def SYS_keyctl: u64 = 219; +export def SYS_clone: u64 = 220; +export def SYS_execve: u64 = 221; +export def SYS_mmap: u64 = 222; +export def SYS_fadvise64: u64 = 223; +export def SYS_swapon: u64 = 224; +export def SYS_swapoff: u64 = 225; +export def SYS_mprotect: u64 = 226; +export def SYS_msync: u64 = 227; +export def SYS_mlock: u64 = 228; +export def SYS_munlock: u64 = 229; +export def SYS_mlockall: u64 = 230; +export def SYS_munlockall: u64 = 231; +export def SYS_mincore: u64 = 232; +export def SYS_madvise: u64 = 233; +export def SYS_remap_file_pages: u64 = 234; +export def SYS_mbind: u64 = 235; +export def SYS_get_mempolicy: u64 = 236; +export def SYS_set_mempolicy: u64 = 237; +export def SYS_migrate_pages: u64 = 238; +export def SYS_move_pages: u64 = 239; +export def SYS_rt_tgsigqueueinfo: u64 = 240; +export def SYS_perf_event_open: u64 = 241; +export def SYS_accept4: u64 = 242; +export def SYS_recvmmsg: u64 = 243; +export def SYS_wait4: u64 = 260; +export def SYS_prlimit64: u64 = 261; +export def SYS_fanotify_init: u64 = 262; +export def SYS_fanotify_mark: u64 = 263; +export def SYS_name_to_handle_at: u64 = 264; +export def SYS_open_by_handle_at: u64 = 265; +export def SYS_clock_adjtime: u64 = 266; +export def SYS_syncfs: u64 = 267; +export def SYS_setns: u64 = 268; +export def SYS_sendmmsg: u64 = 269; +export def SYS_process_vm_readv: u64 = 270; +export def SYS_process_vm_writev: u64 = 271; +export def SYS_kcmp: u64 = 272; +export def SYS_finit_module: u64 = 273; +export def SYS_sched_setattr: u64 = 274; +export def SYS_sched_getattr: u64 = 275; +export def SYS_renameat2: u64 = 276; +export def SYS_seccomp: u64 = 277; +export def SYS_getrandom: u64 = 278; +export def SYS_memfd_create: u64 = 279; +export def SYS_bpf: u64 = 280; +export def SYS_execveat: u64 = 281; +export def SYS_userfaultfd: u64 = 282; +export def SYS_membarrier: u64 = 283; +export def SYS_mlock2: u64 = 284; +export def SYS_copy_file_range: u64 = 285; +export def SYS_preadv2: u64 = 286; +export def SYS_pwritev2: u64 = 287; +export def SYS_pkey_mprotect: u64 = 288; +export def SYS_pkey_alloc: u64 = 289; +export def SYS_pkey_free: u64 = 290; +export def SYS_statx: u64 = 291; +export def SYS_io_pgetevents: u64 = 292; +export def SYS_rseq: u64 = 293; +export def SYS_kexec_file_load: u64 = 294; +export def SYS_pidfd_send_signal: u64 = 424; +export def SYS_io_uring_setup: u64 = 425; +export def SYS_io_uring_enter: u64 = 426; +export def SYS_io_uring_register: u64 = 427; +export def SYS_open_tree: u64 = 428; +export def SYS_move_mount: u64 = 429; +export def SYS_fsopen: u64 = 430; +export def SYS_fsconfig: u64 = 431; +export def SYS_fsmount: u64 = 432; +export def SYS_fspick: u64 = 433; +export def SYS_pidfd_open: u64 = 434; +export def SYS_clone3: u64 = 435; +export def SYS_openat2: u64 = 437; +export def SYS_faccessat2: u64 = 439; diff --git a/vendor/tree-sitter-hare/example/syscallno+x86_64.ha b/vendor/tree-sitter-hare/example/syscallno+x86_64.ha new file mode 100644 index 000000000..e4bea24e9 --- /dev/null +++ b/vendor/tree-sitter-hare/example/syscallno+x86_64.ha @@ -0,0 +1,347 @@ +export def SYS_read: u64 = 0; +export def SYS_write: u64 = 1; +export def SYS_open: u64 = 2; +export def SYS_close: u64 = 3; +export def SYS_stat: u64 = 4; +export def SYS_fstat: u64 = 5; +export def SYS_lstat: u64 = 6; +export def SYS_poll: u64 = 7; +export def SYS_lseek: u64 = 8; +export def SYS_mmap: u64 = 9; +export def SYS_mprotect: u64 = 10; +export def SYS_munmap: u64 = 11; +export def SYS_brk: u64 = 12; +export def SYS_rt_sigaction: u64 = 13; +export def SYS_rt_sigprocmask: u64 = 14; +export def SYS_rt_sigreturn: u64 = 15; +export def SYS_ioctl: u64 = 16; +export def SYS_pread64: u64 = 17; +export def SYS_pwrite64: u64 = 18; +export def SYS_readv: u64 = 19; +export def SYS_writev: u64 = 20; +export def SYS_access: u64 = 21; +export def SYS_pipe: u64 = 22; +export def SYS_select: u64 = 23; +export def SYS_sched_yield: u64 = 24; +export def SYS_mremap: u64 = 25; +export def SYS_msync: u64 = 26; +export def SYS_mincore: u64 = 27; +export def SYS_madvise: u64 = 28; +export def SYS_shmget: u64 = 29; +export def SYS_shmat: u64 = 30; +export def SYS_shmctl: u64 = 31; +export def SYS_dup: u64 = 32; +export def SYS_dup2: u64 = 33; +export def SYS_pause: u64 = 34; +export def SYS_nanosleep: u64 = 35; +export def SYS_getitimer: u64 = 36; +export def SYS_alarm: u64 = 37; +export def SYS_setitimer: u64 = 38; +export def SYS_getpid: u64 = 39; +export def SYS_sendfile: u64 = 40; +export def SYS_socket: u64 = 41; +export def SYS_connect: u64 = 42; +export def SYS_accept: u64 = 43; +export def SYS_sendto: u64 = 44; +export def SYS_recvfrom: u64 = 45; +export def SYS_sendmsg: u64 = 46; +export def SYS_recvmsg: u64 = 47; +export def SYS_shutdown: u64 = 48; +export def SYS_bind: u64 = 49; +export def SYS_listen: u64 = 50; +export def SYS_getsockname: u64 = 51; +export def SYS_getpeername: u64 = 52; +export def SYS_socketpair: u64 = 53; +export def SYS_setsockopt: u64 = 54; +export def SYS_getsockopt: u64 = 55; +export def SYS_clone: u64 = 56; +export def SYS_fork: u64 = 57; +export def SYS_vfork: u64 = 58; +export def SYS_execve: u64 = 59; +export def SYS_exit: u64 = 60; +export def SYS_wait4: u64 = 61; +export def SYS_kill: u64 = 62; +export def SYS_uname: u64 = 63; +export def SYS_semget: u64 = 64; +export def SYS_semop: u64 = 65; +export def SYS_semctl: u64 = 66; +export def SYS_shmdt: u64 = 67; +export def SYS_msgget: u64 = 68; +export def SYS_msgsnd: u64 = 69; +export def SYS_msgrcv: u64 = 70; +export def SYS_msgctl: u64 = 71; +export def SYS_fcntl: u64 = 72; +export def SYS_flock: u64 = 73; +export def SYS_fsync: u64 = 74; +export def SYS_fdatasync: u64 = 75; +export def SYS_truncate: u64 = 76; +export def SYS_ftruncate: u64 = 77; +export def SYS_getdents: u64 = 78; +export def SYS_getcwd: u64 = 79; +export def SYS_chdir: u64 = 80; +export def SYS_fchdir: u64 = 81; +export def SYS_rename: u64 = 82; +export def SYS_mkdir: u64 = 83; +export def SYS_rmdir: u64 = 84; +export def SYS_creat: u64 = 85; +export def SYS_link: u64 = 86; +export def SYS_unlink: u64 = 87; +export def SYS_symlink: u64 = 88; +export def SYS_readlink: u64 = 89; +export def SYS_chmod: u64 = 90; +export def SYS_fchmod: u64 = 91; +export def SYS_chown: u64 = 92; +export def SYS_fchown: u64 = 93; +export def SYS_lchown: u64 = 94; +export def SYS_umask: u64 = 95; +export def SYS_gettimeofday: u64 = 96; +export def SYS_getrlimit: u64 = 97; +export def SYS_getrusage: u64 = 98; +export def SYS_sysinfo: u64 = 99; +export def SYS_times: u64 = 100; +export def SYS_ptrace: u64 = 101; +export def SYS_getuid: u64 = 102; +export def SYS_syslog: u64 = 103; +export def SYS_getgid: u64 = 104; +export def SYS_setuid: u64 = 105; +export def SYS_setgid: u64 = 106; +export def SYS_geteuid: u64 = 107; +export def SYS_getegid: u64 = 108; +export def SYS_setpgid: u64 = 109; +export def SYS_getppid: u64 = 110; +export def SYS_getpgrp: u64 = 111; +export def SYS_setsid: u64 = 112; +export def SYS_setreuid: u64 = 113; +export def SYS_setregid: u64 = 114; +export def SYS_getgroups: u64 = 115; +export def SYS_setgroups: u64 = 116; +export def SYS_setresuid: u64 = 117; +export def SYS_getresuid: u64 = 118; +export def SYS_setresgid: u64 = 119; +export def SYS_getresgid: u64 = 120; +export def SYS_getpgid: u64 = 121; +export def SYS_setfsuid: u64 = 122; +export def SYS_setfsgid: u64 = 123; +export def SYS_getsid: u64 = 124; +export def SYS_capget: u64 = 125; +export def SYS_capset: u64 = 126; +export def SYS_rt_sigpending: u64 = 127; +export def SYS_rt_sigtimedwait: u64 = 128; +export def SYS_rt_sigqueueinfo: u64 = 129; +export def SYS_rt_sigsuspend: u64 = 130; +export def SYS_sigaltstack: u64 = 131; +export def SYS_utime: u64 = 132; +export def SYS_mknod: u64 = 133; +export def SYS_uselib: u64 = 134; +export def SYS_personality: u64 = 135; +export def SYS_ustat: u64 = 136; +export def SYS_statfs: u64 = 137; +export def SYS_fstatfs: u64 = 138; +export def SYS_sysfs: u64 = 139; +export def SYS_getpriority: u64 = 140; +export def SYS_setpriority: u64 = 141; +export def SYS_sched_setparam: u64 = 142; +export def SYS_sched_getparam: u64 = 143; +export def SYS_sched_setscheduler: u64 = 144; +export def SYS_sched_getscheduler: u64 = 145; +export def SYS_sched_get_priority_max: u64 = 146; +export def SYS_sched_get_priority_min: u64 = 147; +export def SYS_sched_rr_get_interval: u64 = 148; +export def SYS_mlock: u64 = 149; +export def SYS_munlock: u64 = 150; +export def SYS_mlockall: u64 = 151; +export def SYS_munlockall: u64 = 152; +export def SYS_vhangup: u64 = 153; +export def SYS_modify_ldt: u64 = 154; +export def SYS_pivot_root: u64 = 155; +export def SYS__sysctl: u64 = 156; +export def SYS_prctl: u64 = 157; +export def SYS_arch_prctl: u64 = 158; +export def SYS_adjtimex: u64 = 159; +export def SYS_setrlimit: u64 = 160; +export def SYS_chroot: u64 = 161; +export def SYS_sync: u64 = 162; +export def SYS_acct: u64 = 163; +export def SYS_settimeofday: u64 = 164; +export def SYS_mount: u64 = 165; +export def SYS_umount2: u64 = 166; +export def SYS_swapon: u64 = 167; +export def SYS_swapoff: u64 = 168; +export def SYS_reboot: u64 = 169; +export def SYS_sethostname: u64 = 170; +export def SYS_setdomainname: u64 = 171; +export def SYS_iopl: u64 = 172; +export def SYS_ioperm: u64 = 173; +export def SYS_create_module: u64 = 174; +export def SYS_init_module: u64 = 175; +export def SYS_delete_module: u64 = 176; +export def SYS_get_kernel_syms: u64 = 177; +export def SYS_query_module: u64 = 178; +export def SYS_quotactl: u64 = 179; +export def SYS_nfsservctl: u64 = 180; +export def SYS_getpmsg: u64 = 181; +export def SYS_putpmsg: u64 = 182; +export def SYS_afs_syscall: u64 = 183; +export def SYS_tuxcall: u64 = 184; +export def SYS_security: u64 = 185; +export def SYS_gettid: u64 = 186; +export def SYS_readahead: u64 = 187; +export def SYS_setxattr: u64 = 188; +export def SYS_lsetxattr: u64 = 189; +export def SYS_fsetxattr: u64 = 190; +export def SYS_getxattr: u64 = 191; +export def SYS_lgetxattr: u64 = 192; +export def SYS_fgetxattr: u64 = 193; +export def SYS_listxattr: u64 = 194; +export def SYS_llistxattr: u64 = 195; +export def SYS_flistxattr: u64 = 196; +export def SYS_removexattr: u64 = 197; +export def SYS_lremovexattr: u64 = 198; +export def SYS_fremovexattr: u64 = 199; +export def SYS_tkill: u64 = 200; +export def SYS_time: u64 = 201; +export def SYS_futex: u64 = 202; +export def SYS_sched_setaffinity: u64 = 203; +export def SYS_sched_getaffinity: u64 = 204; +export def SYS_set_thread_area: u64 = 205; +export def SYS_io_setup: u64 = 206; +export def SYS_io_destroy: u64 = 207; +export def SYS_io_getevents: u64 = 208; +export def SYS_io_submit: u64 = 209; +export def SYS_io_cancel: u64 = 210; +export def SYS_get_thread_area: u64 = 211; +export def SYS_lookup_dcookie: u64 = 212; +export def SYS_epoll_create: u64 = 213; +export def SYS_epoll_ctl_old: u64 = 214; +export def SYS_epoll_wait_old: u64 = 215; +export def SYS_remap_file_pages: u64 = 216; +export def SYS_getdents64: u64 = 217; +export def SYS_set_tid_address: u64 = 218; +export def SYS_restart_syscall: u64 = 219; +export def SYS_semtimedop: u64 = 220; +export def SYS_fadvise64: u64 = 221; +export def SYS_timer_create: u64 = 222; +export def SYS_timer_settime: u64 = 223; +export def SYS_timer_gettime: u64 = 224; +export def SYS_timer_getoverrun: u64 = 225; +export def SYS_timer_delete: u64 = 226; +export def SYS_clock_settime: u64 = 227; +export def SYS_clock_gettime: u64 = 228; +export def SYS_clock_getres: u64 = 229; +export def SYS_clock_nanosleep: u64 = 230; +export def SYS_exit_group: u64 = 231; +export def SYS_epoll_wait: u64 = 232; +export def SYS_epoll_ctl: u64 = 233; +export def SYS_tgkill: u64 = 234; +export def SYS_utimes: u64 = 235; +export def SYS_vserver: u64 = 236; +export def SYS_mbind: u64 = 237; +export def SYS_set_mempolicy: u64 = 238; +export def SYS_get_mempolicy: u64 = 239; +export def SYS_mq_open: u64 = 240; +export def SYS_mq_unlink: u64 = 241; +export def SYS_mq_timedsend: u64 = 242; +export def SYS_mq_timedreceive: u64 = 243; +export def SYS_mq_notify: u64 = 244; +export def SYS_mq_getsetattr: u64 = 245; +export def SYS_kexec_load: u64 = 246; +export def SYS_waitid: u64 = 247; +export def SYS_add_key: u64 = 248; +export def SYS_request_key: u64 = 249; +export def SYS_keyctl: u64 = 250; +export def SYS_ioprio_set: u64 = 251; +export def SYS_ioprio_get: u64 = 252; +export def SYS_inotify_init: u64 = 253; +export def SYS_inotify_add_watch: u64 = 254; +export def SYS_inotify_rm_watch: u64 = 255; +export def SYS_migrate_pages: u64 = 256; +export def SYS_openat: u64 = 257; +export def SYS_mkdirat: u64 = 258; +export def SYS_mknodat: u64 = 259; +export def SYS_fchownat: u64 = 260; +export def SYS_futimesat: u64 = 261; +export def SYS_newfstatat: u64 = 262; +export def SYS_unlinkat: u64 = 263; +export def SYS_renameat: u64 = 264; +export def SYS_linkat: u64 = 265; +export def SYS_symlinkat: u64 = 266; +export def SYS_readlinkat: u64 = 267; +export def SYS_fchmodat: u64 = 268; +export def SYS_faccessat: u64 = 269; +export def SYS_pselect6: u64 = 270; +export def SYS_ppoll: u64 = 271; +export def SYS_unshare: u64 = 272; +export def SYS_set_robust_list: u64 = 273; +export def SYS_get_robust_list: u64 = 274; +export def SYS_splice: u64 = 275; +export def SYS_tee: u64 = 276; +export def SYS_sync_file_range: u64 = 277; +export def SYS_vmsplice: u64 = 278; +export def SYS_move_pages: u64 = 279; +export def SYS_utimensat: u64 = 280; +export def SYS_epoll_pwait: u64 = 281; +export def SYS_signalfd: u64 = 282; +export def SYS_timerfd_create: u64 = 283; +export def SYS_eventfd: u64 = 284; +export def SYS_fallocate: u64 = 285; +export def SYS_timerfd_settime: u64 = 286; +export def SYS_timerfd_gettime: u64 = 287; +export def SYS_accept4: u64 = 288; +export def SYS_signalfd4: u64 = 289; +export def SYS_eventfd2: u64 = 290; +export def SYS_epoll_create1: u64 = 291; +export def SYS_dup3: u64 = 292; +export def SYS_pipe2: u64 = 293; +export def SYS_inotify_init1: u64 = 294; +export def SYS_preadv: u64 = 295; +export def SYS_pwritev: u64 = 296; +export def SYS_rt_tgsigqueueinfo: u64 = 297; +export def SYS_perf_event_open: u64 = 298; +export def SYS_recvmmsg: u64 = 299; +export def SYS_fanotify_init: u64 = 300; +export def SYS_fanotify_mark: u64 = 301; +export def SYS_prlimit64: u64 = 302; +export def SYS_name_to_handle_at: u64 = 303; +export def SYS_open_by_handle_at: u64 = 304; +export def SYS_clock_adjtime: u64 = 305; +export def SYS_syncfs: u64 = 306; +export def SYS_sendmmsg: u64 = 307; +export def SYS_setns: u64 = 308; +export def SYS_getcpu: u64 = 309; +export def SYS_process_vm_readv: u64 = 310; +export def SYS_process_vm_writev: u64 = 311; +export def SYS_kcmp: u64 = 312; +export def SYS_finit_module: u64 = 313; +export def SYS_sched_setattr: u64 = 314; +export def SYS_sched_getattr: u64 = 315; +export def SYS_renameat2: u64 = 316; +export def SYS_seccomp: u64 = 317; +export def SYS_getrandom: u64 = 318; +export def SYS_memfd_create: u64 = 319; +export def SYS_kexec_file_load: u64 = 320; +export def SYS_bpf: u64 = 321; +export def SYS_execveat: u64 = 322; +export def SYS_userfaultfd: u64 = 323; +export def SYS_membarrier: u64 = 324; +export def SYS_mlock2: u64 = 325; +export def SYS_copy_file_range: u64 = 326; +export def SYS_preadv2: u64 = 327; +export def SYS_pwritev2: u64 = 328; +export def SYS_pkey_mprotect: u64 = 329; +export def SYS_pkey_alloc: u64 = 330; +export def SYS_pkey_free: u64 = 331; +export def SYS_statx: u64 = 332; +export def SYS_io_pgetevents: u64 = 333; +export def SYS_rseq: u64 = 334; +export def SYS_pidfd_send_signal: u64 = 424; +export def SYS_io_uring_setup: u64 = 425; +export def SYS_io_uring_enter: u64 = 426; +export def SYS_io_uring_register: u64 = 427; +export def SYS_open_tree: u64 = 428; +export def SYS_move_mount: u64 = 429; +export def SYS_fsopen: u64 = 430; +export def SYS_fsconfig: u64 = 431; +export def SYS_fsmount: u64 = 432; +export def SYS_fspick: u64 = 433; +export def SYS_openat2: u64 = 437; +export def SYS_faccessat2: u64 = 439; diff --git a/vendor/tree-sitter-hare/example/syscalls.ha b/vendor/tree-sitter-hare/example/syscalls.ha new file mode 100644 index 000000000..f62dd4fae --- /dev/null +++ b/vendor/tree-sitter-hare/example/syscalls.ha @@ -0,0 +1,587 @@ +fn syscall0(_: u64) u64; +fn syscall1(_: u64, _: u64) u64; +fn syscall2(_: u64, _: u64, _: u64) u64; +fn syscall3(_: u64, _: u64, _: u64, _: u64) u64; +fn syscall4(_: u64, _: u64, _: u64, _: u64, _: u64) u64; +fn syscall5(_: u64, _: u64, _: u64, _: u64, _: u64, _: u64) u64; +fn syscall6(_: u64, _: u64, _: u64, _: u64, _: u64, _: u64, _: u64) u64; + +def PATH_MAX: size = 4096z; +export type path = (str | []u8 | *const char); +let pathbuf: [PATH_MAX + 1]u8 = [0...]; + +// NUL terminates a string and stores it in a static buffer of PATH_MAX+1 bytes +// in length. +fn kpath(path: path) (*const char | errno) = { + let path = match (path) { + c: *const char => return c, + s: str => { + let ptr = &s: *struct { + buf: *[*]u8, + length: size, + capacity: size, + }; + ptr.buf[..ptr.length]; + }, + b: []u8 => b, + }; + if (len(path) + 1 >= len(pathbuf)) { + return ENAMETOOLONG; + }; + memcpy(&pathbuf, path: *[*]u8, len(path)); + pathbuf[len(path)] = 0; + return &pathbuf: *const char; +}; + +export fn read(fd: int, buf: *void, count: size) (size | errno) = { + return wrap_return(syscall3(SYS_read, + fd: u64, buf: uintptr: u64, count: u64))?: size; +}; + +export fn write(fd: int, buf: *const void, count: size) (size | errno) = { + return wrap_return(syscall3(SYS_write, + fd: u64, buf: uintptr: u64, count: u64))?: size; +}; + +export fn open(path: path, flags: int, mode: uint) (int | errno) = { + let path = kpath(path)?; + return wrap_return(syscall4(SYS_openat, AT_FDCWD: u64, + path: uintptr: u64, flags: u64, mode: u64))?: int; +}; + +fn openat( + dirfd: int, + path: *const char, + flags: int, + mode: uint, +) (int | errno) = wrap_return(syscall4(SYS_openat, dirfd: u64, + path: uintptr: u64, flags: u64, mode: u64))?: int; + +export fn openat2( + dirfd: int, + path: path, + how: *open_how, + how_sz: size, +) (int | errno) = { + let path = kpath(path)?; + return openat(dirfd, path, how.flags: int, how.mode: uint); +}; + +export fn unlink(path: path) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall3(SYS_unlinkat, + AT_FDCWD: u64, path: uintptr: u64, 0u64)); + return; +}; + +export fn unlinkat(dirfd: int, path: path, flags: int) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall3(SYS_unlinkat, + dirfd: u64, path: uintptr: u64, flags: u64)); + return; +}; + +export fn chmod(path: path, mode: uint) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall3(SYS_fchmodat, + AT_FDCWD: u64, path: uintptr: u64, mode: u64)); + return; +}; + +export fn fchmodat(dirfd: int, path: path, mode: uint) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall3(SYS_fchmodat, + dirfd: u64, path: uintptr: u64, mode: u64))?; + return; +}; + +export fn chown(path: path, uid: uint, gid: uint) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall4(SYS_fchownat, + AT_FDCWD: u64, path: uintptr: u64, uid: u32, gid: u32)); + return; +}; + +export fn fchownat(dirfd: int, path: path, uid: uint, gid: uint) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall4(SYS_fchownat, + dirfd: u64, path: uintptr: u64, uid: u32, gid: u32))?; + return; +}; + +export fn dup(fd: int) (int | errno) = { + return wrap_return(syscall1(SYS_dup, fd: u64))?: int; +}; + +export fn close(fd: int) (void | errno) = { + wrap_return(syscall1(SYS_close, fd: u64))?; + return; +}; + +export fn chdir(path: path) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall1(SYS_chdir, path: uintptr: u64))?; + return; +}; + +export fn fchdir(fd: int) (void | errno) = { + wrap_return(syscall1(SYS_fchdir, fd: u64))?; + return; +}; + +export fn chroot(path: path) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall1(SYS_chroot, path: uintptr: u64))?; + return; +}; + +export fn mkdir(path: path, mode: uint) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall3(SYS_mkdirat, AT_FDCWD: u64, + path: uintptr: u64, mode: u64))?; + return; +}; + +export fn mkdirat(dirfd: int, path: path, mode: uint) (void | errno) = { + let path = kpath(path)?; + wrap_return(syscall3(SYS_mkdirat, + dirfd: u64, path: uintptr: u64, mode: u64))?; + return; +}; + +export fn execveat(dirfd: int, path: path, argv: *[*]nullable *const char, + envp: *[*]nullable *const char, flags: int) errno = { + let path = kpath(path)?; + return match (wrap_return(syscall5(SYS_execveat, dirfd: u64, + path: uintptr: u64, argv: uintptr: u64, + envp: uintptr: u64, flags: u64))) { + err: errno => err, + u64 => abort("unreachable"), + }; +}; + +// Returns the new PID to the parent, void to the child, or errno if something +// goes wrong. +export fn fork() (int | void | errno) = clone(null, SIGCHLD, null, null, 0); + +export fn getpid() int = syscall0(SYS_getpid): int; + +export fn wait4( + pid: int, + wstatus: *int, + options: int, + rusage: *rusage, +) (int | errno) = { + return wrap_return(syscall4(SYS_wait4, + pid: u64, wstatus: uintptr: u64, + options: u64, rusage: uintptr: u64))?: int; +}; + +export fn sendfile( + out: int, + in: int, + offs: nullable *size, + count: size, +) (size | errno) = wrap_return(syscall4(SYS_sendfile, + out: u64, in: u64, offs: uintptr: u64, count: u64))?: size; + +export @noreturn fn exit(status: int) void = syscall1(SYS_exit, status: u64); + +export fn kill(pid: int, signal: int) (void | errno) = { + wrap_return(syscall2(SYS_kill, pid: u64, signal: u64))?; + return; +}; + +export fn pipe2(pipefd: *[2]int, flags: int) (void | errno) = { + wrap_return(syscall2(SYS_pipe2, pipefd: uintptr: u64, flags: u64))?; + return; +}; + +export fn mmap( + addr: nullable *void, + length: size, + prot: uint, + flags: uint, + fd: int, + offs: size +) (*void | errno) = { + let r = syscall6(SYS_mmap, addr: uintptr: u64, + length: u64, prot: u64, flags: u64, fd: u64, offs: u64); + match (wrap_return(r)) { + err: errno => { + // XXX: Type promotion would simplify this + return if (r: int == -EPERM + && addr: uintptr == null: uintptr + && (flags & MAP_ANON) > 0 + && (flags & MAP_FIXED) == 0) { + // Fix up incorrect EPERM from kernel: + wrap_errno(ENOMEM); + } else err; + }, + n: u64 => n: uintptr: *void, + }; +}; + +export fn munmap(addr: *void, length: size) (void | errno) = { + wrap_return(syscall2(SYS_munmap, + addr: uintptr: u64, length: u64))?; + return; +}; + + +export fn mprotect(addr: *void, length: size, prot: uint) (void | errno) = { + wrap_return(syscall3(SYS_mprotect, + addr: uintptr: u64, length: u64, prot: u64))?; + return; +}; + + +export fn lseek(fd: int, off: i64, whence: uint) (i64 | errno) = { + return wrap_return(syscall3(SYS_lseek, + fd: u64, off: u64, whence: u64))?: i64; +}; + +fn faccessat1(dirfd: int, path: *const char, mode: int) (bool | errno) = { + return match (wrap_return(syscall3(SYS_faccessat, dirfd: u64, + path: uintptr: u64, mode: u64))) { + err: errno => switch (err) { + EACCES => false, + * => err, + }, + n: u64 => { + assert(n == 0); + true; + }, + }; +}; + +// The use of this function is discouraged, as it can create race conditions. +// TOCTOU is preferred: attempt to simply use the resource you need and handle +// any access errors which occur. +export fn faccessat( + dirfd: int, + path: path, + mode: int, + flags: int, +) (bool | errno) = { + let path = kpath(path)?; + return match (wrap_return(syscall4(SYS_faccessat2, dirfd: u64, + path: uintptr: u64, mode: u64, flags: u64))) { + err: errno => switch (err) { + EACCES => false, + ENOSYS => + if (flags == 0) faccessat1(dirfd, path, mode) + else err, + * => err, + }, + n: u64 => { + assert(n == 0); + true; + }, + }; +}; + +export fn getdents64(dirfd: int, dirp: *void, count: size) (size | errno) = { + return wrap_return(syscall3(SYS_getdents64, dirfd: u64, + dirp: uintptr: u64, count: u64))?: size; +}; + +// The use of this function is discouraged, as it can create race conditions. +// TOCTOU is preferred: attempt to simply use the resource you need and handle +// any access errors which occur. +export fn access(path: path, mode: int) (bool | errno) = + faccessat(AT_FDCWD, path, mode, 0); + +export type fcntl_arg = (void | int | *st_flock | *f_owner_ex | *u64); + +export fn fcntl(fd: int, cmd: int, arg: fcntl_arg) (int | errno) = { + let _fd = fd: u64, _cmd = cmd: u64; + return wrap_return(match (arg) { + void => syscall2(SYS_fcntl, _fd, _cmd), + i: int => syscall3(SYS_fcntl, _fd, _cmd, i: u64), + l: *st_flock => syscall3(SYS_fcntl, _fd, _cmd, l: uintptr: u64), + o: *f_owner_ex => syscall3(SYS_fcntl, _fd, _cmd, o: uintptr: u64), + u: *u64 => syscall3(SYS_fcntl, _fd, _cmd, u: uintptr: u64), + })?: int; +}; + +export fn getrandom(buf: *void, bufln: size, flags: uint) (size | errno) = { + return wrap_return(syscall3(SYS_getrandom, + buf: uintptr: u64, bufln: u64, flags: u64))?: size; +}; + +// TODO: Implement me with VDSO +export fn clock_gettime(clock_id: int, tp: *timespec) (void | errno) = { + wrap_return(syscall2(SYS_clock_gettime, + clock_id: u64, tp: uintptr: u64))?; + return; +}; + +export fn nanosleep(req: *const timespec, rem: *timespec) (void | errno) = { + wrap_return(syscall2(SYS_nanosleep, + req: uintptr: u64, rem: uintptr: u64))?; + return; +}; + +export fn uname(uts: *utsname) (void | errno) = { + wrap_return(syscall1(SYS_uname, uts: uintptr: u64))?; + return; +}; + +// The return value is statically allocated and must be duplicated before +// calling getcwd again. +export fn getcwd() (*const char | errno) = { + static let pathbuf: [PATH_MAX + 1]u8 = [0...]; + wrap_return(syscall2(SYS_getcwd, + &pathbuf: *[*]u8: uintptr: u64, + PATH_MAX + 1))?; + return &pathbuf: *const char; +}; + +export fn ppoll( + fds: *pollfd, + nfds: nfds_t, + timeout: const nullable *timespec, + sigmask: const nullable *sigset, +) (int | errno) = { + return wrap_return(syscall4(SYS_ppoll, fds: uintptr: u64, nfds: u64, + timeout: uintptr: u64, sigmask: uintptr: u64))?: int; +}; + +export fn poll(fds: *pollfd, nfds: nfds_t, timeout: int) (int | errno) = { + const ts = timespec { + tv_sec = timeout % 1000, + tv_nsec = timeout * 1000000, + }; + return ppoll(fds, nfds, (if (timeout != -1) &ts else null), null); +}; + +export fn epoll_create1(flags: int) (int | errno) = { + return wrap_return(syscall1(SYS_epoll_create1, flags: u64))?: int; +}; + +export fn epoll_create(size_: int) (int | errno) = { + return epoll_create1(0); +}; + +export fn epoll_ctl( + epfd: int, + op: int, + fd: int, + event: nullable *epoll_event +) (int | errno) = { + return wrap_return(syscall4(SYS_epoll_ctl, + epfd: u64, op: u64, fd: u64, event: uintptr: u64))?: int; +}; + +export fn epoll_pwait( + epfd: int, + events: *epoll_event, + maxevents: int, + timeout: int, + sigmask: nullable *sigset +) (int | errno) = { + return wrap_return(syscall6(SYS_epoll_pwait, + epfd: u64, events: uintptr: u64, + maxevents: u64, timeout: u64, + sigmask: uintptr: u64, size(sigset): u64))?: int; +}; + +export fn epoll_wait( + epfd: int, + events: *epoll_event, + maxevents: int, + timeout: int, +) (int | errno) = { + return epoll_pwait(epfd, events, maxevents, timeout, null); +}; + +export fn timerfd_create(clock_id: int, flags: int) (int | errno) = { + return wrap_return(syscall2(SYS_timerfd_create, + clock_id: u64, flags: u64))?: int; +}; + +export fn timerfd_settime( + fd: int, + flags: int, + new_value: *const itimerspec, + old_value: nullable *itimerspec +) (int | errno) = { + return wrap_return(syscall4(SYS_timerfd_settime, + fd: u64, flags: u64, + new_value: uintptr: u64, old_value: uintptr: u64))?: int; +}; + +export fn timerfd_gettime(fd: int, curr_value: *itimerspec) (int | errno) = { + return wrap_return(syscall2(SYS_timerfd_gettime, + fd: u64, curr_value: uintptr: u64))?: int; +}; + +export fn signalfd(fd: int, mask: *const sigset, flags: int) (int | errno) = { + return wrap_return(syscall4(SYS_signalfd4, + fd: u64, mask: uintptr: u64, size(sigset): u64, + flags: u64))?: int; +}; + +export fn sigprocmask( + how: int, + set: *const sigset, + old: nullable *sigset +) (int | errno) = { + return wrap_return(syscall4(SYS_rt_sigprocmask, + how: u64, set: uintptr: u64, old: uintptr: u64, + size(sigset): u64))?: int; +}; + +fn restore() void; +fn restore_si() void; + +export fn sigaction( + signum: int, + act: *const sigact, + old: nullable *sigact +) (int | errno) = { + let real_act = *act; + real_act.sa_flags |= SA_RESTORER; + let restore_fn = if ((act.sa_flags & SA_SIGINFO) != 0) &restore_si else &restore; + real_act.sa_restorer = &restore; + return wrap_return(syscall4(SYS_rt_sigaction, + signum: u64, &real_act: uintptr: u64, old: uintptr: u64, + size(sigset): u64))?: int; +}; + +export fn socket(domain: int, type_: int, protocol: int) (int | errno) = { + return wrap_return(syscall3(SYS_socket, + domain: u64, type_: u64, protocol: u64))?: int; +}; + +export fn connect(sockfd: int, addr: *const sockaddr, addrlen: u32) (int | errno) = { + return wrap_return(syscall3(SYS_connect, + sockfd: u64, addr: uintptr: u64, addrlen: u64))?: int; +}; + +export fn bind(sockfd: int, addr: *const sockaddr, addrlen: u32) (int | errno) = { + return wrap_return(syscall3(SYS_bind, + sockfd: u64, addr: uintptr: u64, addrlen: u64))?: int; +}; + +export fn listen(sockfd: int, backlog: u32) (int | errno) = { + return wrap_return(syscall2(SYS_listen, + sockfd: u64, backlog: u64))?: int; +}; + +export fn accept(sockfd: int, addr: nullable *sockaddr, addrlen: nullable *u32) (int | errno) = { + return wrap_return(syscall3(SYS_accept, + sockfd: u64, addr: uintptr: u64, addrlen: uintptr: u64))?: int; +}; + +export fn recvfrom(sockfd: int, buf: *void, len_: size, flags: int, + src_addr: nullable *sockaddr, addrlen: nullable *u32 +) (size | errno) = { + return wrap_return(syscall6(SYS_recvfrom, + sockfd: u64, buf: uintptr: u64, len_: u64, flags: u64, + src_addr: uintptr: u64, addrlen: uintptr: u64))?: size; +}; + +export fn sendto(sockfd: int, buf: *void, len_: size, flags: int, + dest_addr: nullable *sockaddr, addrlen: nullable *u32 +) (size | errno) = { + return wrap_return(syscall6(SYS_sendto, + sockfd: u64, buf: uintptr: u64, len_: u64, flags: u64, + dest_addr: uintptr: u64, addrlen: uintptr: u64))?: size; +}; + +export fn recv(sockfd: int, buf: *void, len_: size, flags: int) (size | errno) = { + return recvfrom(sockfd, buf, len_, flags, null, null); +}; + +export fn send(sockfd: int, buf: *void, len_: size, flags: int) (size | errno) = { + return sendto(sockfd, buf, len_, flags, null, null); +}; + +export fn getsockopt(sockfd: int, level: int, optname: int, optval: nullable *void, optlen: nullable *u32) (int | errno) = { + return wrap_return(syscall5(SYS_getsockopt, + sockfd: u64, level: u64, optname: u64, + optval: uintptr: u64, optlen: uintptr: u64))?: int; +}; + +export fn setsockopt(sockfd: int, level: int, optname: int, optval: *void, optlen: u32) (int | errno) = { + return wrap_return(syscall5(SYS_setsockopt, + sockfd: u64, level: u64, optname: u64, + optval: uintptr: u64, optlen: u64))?: int; +}; + +export fn ioctl(fd: int, req: u64, arg: nullable *void) (int | errno) = { + return wrap_return(syscall3(SYS_ioctl, fd: u64, + req, arg: uintptr: u64))?: int; +}; + +export fn getsockname(sockfd: int, addr: nullable *sockaddr, addrlen: nullable *u32) (int | errno) = { + return wrap_return(syscall3(SYS_getsockname, + sockfd: u64, addr: uintptr: u64, addrlen: uintptr: u64))?: int; +}; + +export fn getpeername(sockfd: int, addr: nullable *sockaddr, addrlen: nullable *u32) (int | errno) = { + return wrap_return(syscall3(SYS_getpeername, + sockfd: u64, addr: uintptr: u64, addrlen: uintptr: u64))?: int; +}; + +export fn readv(fd: int, iov: *const iovec, iovcnt: int) (int | errno) = { + return wrap_return(syscall3(SYS_readv, + fd: u64, iov: uintptr: u64, iovcnt: u64))?: int; +}; + +export fn writev(fd: int, iov: *const iovec, iovcnt: int) (int | errno) = { + return wrap_return(syscall3(SYS_writev, + fd: u64, iov: uintptr: u64, iovcnt: u64))?: int; +}; + +export fn sendmsg(fd: int, msg: *const msghdr, flags: int) (int | errno) = { + return wrap_return(syscall3(SYS_sendmsg, + fd: u64, msg: uintptr: u64, flags: u64))?: int; +}; + +export fn recvmsg(fd: int, msg: *const msghdr, flags: int) (int | errno) = { + return wrap_return(syscall3(SYS_recvmsg, + fd: u64, msg: uintptr: u64, flags: u64))?: int; +}; + +export fn umask(mode: mode_t) (mode_t | errno) = { + return wrap_return(syscall1(SYS_umask, mode: u64))?: mode_t; +}; + +export fn setresuid(uid: uid_t, euid: uid_t, suid: uid_t) (void | errno) = { + wrap_return(syscall3(SYS_setresuid, uid: u64, euid: u64, suid: u64))?; + return; +}; + +export fn setresgid(gid: gid_t, egid: gid_t, sgid: gid_t) (void | errno) = { + wrap_return(syscall3(SYS_setresgid, gid: u64, egid: u64, sgid: u64))?; + return; +}; + +export fn getresuid(uid: *uid_t, euid: *uid_t, suid: *uid_t) (void | errno) = { + wrap_return(syscall3(SYS_getresuid, + uid: uintptr: u64, + euid: uintptr: u64, + suid: uintptr: u64))?; + return; +}; + +export fn getresgid(gid: *gid_t, egid: *gid_t, sgid: *gid_t) (void | errno) = { + wrap_return(syscall3(SYS_getresgid, + gid: uintptr: u64, + egid: uintptr: u64, + sgid: uintptr: u64))?; + return; +}; + +export fn getpriority(which: int, who: id_t) (int | errno) = { + return wrap_return(syscall2(SYS_setpriority, + which: u64, who: u64))?: int; +}; + +export fn setpriority(which: int, who: id_t, prio: int) (void | errno) = { + wrap_return(syscall3(SYS_setpriority, which: u64, who: u64, prio: u64))?; + return; +}; diff --git a/vendor/tree-sitter-hare/example/tee.ha b/vendor/tree-sitter-hare/example/tee.ha new file mode 100644 index 000000000..1e595eb24 --- /dev/null +++ b/vendor/tree-sitter-hare/example/tee.ha @@ -0,0 +1,34 @@ +type tee_stream = struct { + stream: stream, + source: *stream, + sink: *stream, +}; + +// Creates a reader which copies reads into a sink before forwarding them to the +// caller. Does not close the secondary streams when the tee stream is closed. +export fn tee(source: *stream, sink: *stream) *stream = { + return alloc(tee_stream { + stream = stream { + reader = &tee_read, + closer = &tee_close, + ... + }, + source = source, + sink = sink, + }): *io::stream; +}; + +fn tee_read(s: *stream, buf: []u8) (size | EOF | error) = { + let s = s: *tee_stream; + let z = match (read(s.source, buf)) { + err: error => return err, + EOF => return EOF, + z: size => z, + }; + for (let n = 0z; n < z) { + n += write(s.sink, buf[n..z])?; + }; + return z; +}; + +fn tee_close(s: *stream) void = free(s); diff --git a/vendor/tree-sitter-hare/example/token.ha b/vendor/tree-sitter-hare/example/token.ha new file mode 100644 index 000000000..3d3ed46e4 --- /dev/null +++ b/vendor/tree-sitter-hare/example/token.ha @@ -0,0 +1,283 @@ +use encoding::utf8; +use strings; + +// A token with no additional context, such as '+' +export type btoken = enum { + // Keep ordered with bmap + // Alpha sorted + ATTR_FINI, + ATTR_INIT, + ATTR_NORETURN, + ATTR_OFFSET, + ATTR_SYMBOL, + ATTR_TEST, + UNDERSCORE, + ABORT, + ALLOC, + APPEND, + AS, + ASSERT, + BOOL, + BREAK, + CHAR, + CONST, + CONTINUE, + DEF, + DEFER, + DELETE, + ELSE, + ENUM, + EXPORT, + F32, + F64, + FALSE, + FN, + FOR, + FREE, + I16, + I32, + I64, + I8, + IF, + INT, + IS, + LEN, + LET, + MATCH, + NULL, + NULLABLE, + OFFSET, + RETURN, + RUNE, + SIZE, + STATIC, + STR, + STRUCT, + SWITCH, + TRUE, + TYPE, + U16, + U32, + U64, + U8, + UINT, + UINTPTR, + UNION, + USE, + VOID, + LAST_KEYWORD = VOID, + + // Operators + ANDEQ, + BAND, + BNOT, + BOR, + BXOR, + BXOREQ, + CASE, + COLON, + COMMA, + DIV, + DIVEQ, + DOT, + DOUBLE_COLON, + ELLIPSIS, + EQUAL, + GREATER, + GREATEREQ, + LAND, + LBRACE, + LBRACKET, + LEQUAL, + LESS, + LESSEQ, + LNOT, + LOR, + LPAREN, + LSHIFT, + LSHIFTEQ, + LXOR, + MINUS, + MINUSEQ, + MINUSMINUS, + MODEQ, + MODULO, + NEQUAL, + OREQ, + PLUS, + PLUSEQ, + PLUSPLUS, + QUESTION, + RBRACE, + RBRACKET, + RPAREN, + RSHIFT, + RSHIFTEQ, + SEMICOLON, + SLICE, + TIMES, + TIMESEQ, +}; + +const bmap: [_]str = [ + // Keep ordered with btoken + "@fini", + "@init", + "@noreturn", + "@offset", + "@symbol", + "@test", + "_", + "abort", + "alloc", + "append", + "as", + "assert", + "bool", + "break", + "char", + "const", + "continue", + "def", + "defer", + "delete", + "else", + "enum", + "export", + "f32", + "f64", + "false", + "fn", + "for", + "free", + "i16", + "i32", + "i64", + "i8", + "if", + "int", + "is", + "len", + "let", + "match", + "null", + "nullable", + "offset", + "return", + "rune", + "size", + "static", + "str", + "struct", + "switch", + "true", + "type", + "u16", + "u32", + "u64", + "u8", + "uint", + "uintptr", + "union", + "use", + "void", + "&=", + "&", + "^", + "^=", + "~", + "|", + "=>", + ":", + ",", + "/", + "/=", + ".", + "::", + "...", + "=", + ">", + ">=", + "&&", + "{", + "[", + "==", + "<", + "<=", + "!", + "||", + "(", + "<<", + "<<=", + "^^", + "-", + "-=", + "--", + "?", + "%=", + "%", + "!=", + "|=", + "+", + "+=", + "++", + "}", + "]", + ")", + ">>", + ">>=", + ";", + "..", + "*", + "*=", +]; + +// A loop label, such as ':example' +export type label = str; + +// A name, such as 'example' +export type name = str; + +export type iconst = i64; +export type fconst = f64; + +// A token for a literal value, such as '1337u32' +export type literal = (u8 | u16 | u32 | u64 | uint | uintptr | i8 | i16 | i32 | + i64 | int | iconst | f32 | f64 | fconst | rune | str); + +// A location within a source file. +// The path is borrowed from the file name given to the lexer. +export type location = struct { + path: str, + line: uint, + col: uint +}; + +// A single lexical token. +export type token = (btoken | label | name | literal); + +// Converts a token to its string representation +export fn tokstr(tok: token) const str = match (tok) { + b: btoken => bmap[b: int], + n: name => n: str, + l: literal => match (l) { + u8 => "u8", + u16 => "u16", + u32 => "u32", + u64 => "u64", + uint => "uint", + uintptr => "uintptr", + i8 => "i8", + i16 => "i16", + i32 => "i32", + i64 => "i64", + int => "int", + iconst => "iconst", + f32 => "f32", + f64 => "f64", + fconst => "fconst", + rune => "rune", + str => "str", + }, + * => abort(), // TODO +}; diff --git a/vendor/tree-sitter-hare/example/tokenize.ha b/vendor/tree-sitter-hare/example/tokenize.ha new file mode 100644 index 000000000..0b2331887 --- /dev/null +++ b/vendor/tree-sitter-hare/example/tokenize.ha @@ -0,0 +1,120 @@ +use bytes; +use types; + +// The state for a tokenizer. +export type tokenizer = bytes::tokenizer; + +// Returns a tokenizer which yields sub-strings tokenized by a delimiter. +// +// let tok = strings::tokenize("hello, my name is drew", " "); +// assert(strings::next_token(tok) == "hello,"); +// assert(strings::next_token(tok) == "my"); +// assert(strings::next_token(tok) == "name"); +// assert(strings::remaining_tokens(tok) == "is drew"); +export fn tokenize(s: str, delim: str) tokenizer = + bytes::tokenize(toutf8(s), toutf8(delim)); + +// Returns the next string from a tokenizer, and advances the cursor. Returns +// void if there are no tokens left. +export fn next_token(s: *tokenizer) (str | void) = { + return match (bytes::next_token(s)) { + b: []u8 => fromutf8(b), + void => void, + }; +}; + +// Same as next_token(), but does not advance the cursor +export fn peek_token(s: *tokenizer) (str | void) = { + return match (bytes::peek_token(s)) { + b: []u8 => fromutf8(b), + void => void, + }; +}; + +// Returns the remainder of the string associated with a tokenizer, without doing +// any further tokenization. +export fn remaining_tokens(s: *tokenizer) str = { + return fromutf8(bytes::remaining_tokens(s)); +}; + +@test fn tokenize() void = { + let tok = tokenize("Hello, my name is drew", " "); + match (next_token(&tok)) { + s: str => assert(s == "Hello,"), + void => abort(), + }; + + match (next_token(&tok)) { + s: str => assert(s == "my"), + void => abort(), + }; + + match (peek_token(&tok)) { + s: str => assert(s == "name"), + void => abort(), + }; + + + match (next_token(&tok)) { + s: str => assert(s == "name"), + void => abort(), + }; + + assert(remaining_tokens(&tok) == "is drew"); + assert(peek_token(&tok) as str == "is"); + assert(remaining_tokens(&tok) == "is drew"); + + tok = tokenize("foo", "foo"); + + assert(peek_token(&tok) as str == ""); + assert(next_token(&tok) as str == ""); + + assert(peek_token(&tok) as str == ""); + assert(next_token(&tok) as str == ""); + + assert(peek_token(&tok) is void); + assert(next_token(&tok) is void); + + tok = tokenize("", "foo"); + assert(peek_token(&tok) is void); + assert(next_token(&tok) is void); +}; + +// Splits a string into tokens delimited by 'delim', returning a slice of up to +// N tokens. The caller must free this slice. The strings within the slice are +// borrowed from 'in', and needn't be freed - but should be [strings::dup_all]'d +// if they should outlive 'in'. +export fn splitN(in: str, delim: str, n: size) []str = { + let toks: []str = alloc([]); + let tok = tokenize(in, delim); + for (let i = 0z; i < n - 1z; i += 1) { + match (next_token(&tok)) { + s: str => append(toks, s), + void => return toks, + }; + }; + append(toks, remaining_tokens(&tok)); + return toks; +}; + +// Splits a string into tokens delimited by 'delim'. The caller must free the +// returned slice. The strings within the slice are borrowed from 'in', and +// needn't be freed - but must be [strings::dup_all]'d if they should outlive +// 'in'. +export fn split(in: str, delim: str) []str = splitN(in, delim, types::SIZE_MAX); + +@test fn split() void = { + const expected = ["Hello,", "my", "name", "is Drew"]; + const actual = splitN("Hello, my name is Drew", " ", 4z); + assert(len(expected) == len(actual)); + for (let i = 0z; i < len(expected); i += 1) { + assert(expected[i] == actual[i]); + }; + + const expected2 = ["Hello,", "my", "name", "is", "Drew"]; + const actual2 = split("Hello, my name is Drew", " "); + assert(len(expected2) == len(actual2)); + for (let i = 0z; i < len(expected2); i += 1) { + assert(expected2[i] == actual2[i]); + }; +}; diff --git a/vendor/tree-sitter-hare/example/type.ha b/vendor/tree-sitter-hare/example/type.ha new file mode 100644 index 000000000..b277feb38 --- /dev/null +++ b/vendor/tree-sitter-hare/example/type.ha @@ -0,0 +1,293 @@ +use fmt; +use io; +use hare::ast; +use hare::lex; +use strio; + +fn builtin_type(b: ast::builtin_type) str = switch (b) { + ast::builtin_type::BOOL => "bool", + ast::builtin_type::CHAR => "char", + ast::builtin_type::F32 => "f32", + ast::builtin_type::F64 => "f64", + ast::builtin_type::FCONST => abort("FCONST has no lexical representation"), + ast::builtin_type::I16 => "i16", + ast::builtin_type::I32 => "i32", + ast::builtin_type::I64 => "i64", + ast::builtin_type::I8 => "i8", + ast::builtin_type::ICONST => abort("ICONST has no lexical representation"), + ast::builtin_type::INT => "int", + ast::builtin_type::NULL => "null", + ast::builtin_type::RUNE => "rune", + ast::builtin_type::SIZE => "size", + ast::builtin_type::STR => "str", + ast::builtin_type::U16 => "u16", + ast::builtin_type::U32 => "u32", + ast::builtin_type::U64 => "u64", + ast::builtin_type::U8 => "u8", + ast::builtin_type::UINT => "uint", + ast::builtin_type::UINTPTR => "uintptr", + ast::builtin_type::VOID => "void", +}; + +fn prototype( + out: *io::stream, + indent: size, + t: ast::func_type, +) (size | io::error) = { + let n = 0z; + n += fmt::fprint(out, "(")?; + for (let i = 0z; i < len(t.params); i += 1) { + let param = t.params[i]; + n += fmt::fprintf(out, "{}: ", + if (len(param.name) == 0) "_" else param.name)?; + n += _type(out, indent, *param._type)?; + if (i + 1 == len(t.params) + && t.variadism == ast::variadism::HARE) { + n += fmt::fprintf(out, "...")?; + }; + if (i + 1 < len(t.params)) { + n += fmt::fprint(out, ", ")?; + }; + }; + if (t.variadism == ast::variadism::C) { + n += fmt::fprint(out, ", ...")?; + }; + n += fmt::fprint(out, ") ")?; + n += _type(out, indent, *t.result)?; + return n; +}; + +export fn _type( + out: *io::stream, + indent: size, + t: ast::_type, +) (size | io::error) = { + let n = 0z; + if (t.flags & ast::type_flags::CONST != 0 + && !(t._type is ast::func_type)) { + n += fmt::fprint(out, "const ")?; + }; + match (t._type) { + a: ast::alias_type => { + if (a.unwrap) { + n += fmt::fprint(out, "...")?; + }; + n += ident(out, a.ident)?; + }, + b: ast::builtin_type => n += fmt::fprint(out, builtin_type(b))?, + e: ast::enum_type => { + n += fmt::fprint(out, "enum", + builtin_type(e.storage), "{")?; + indent += 1; + for (let i = 0z; i < len(e.values); i += 1) { + n += newline(out, indent)?; + let value = e.values[i]; + n += fmt::fprint(out, value.name)?; + match (value.value) { + null => void, + e: *ast::expr => { + n += fmt::fprint(out, ": ")?; + n += expr(out, indent, *e)?; + }, + }; + n += fmt::fprint(out, ",")?; + }; + indent -= 1; + n += newline(out, indent)?; + n += fmt::fprint(out, "}")?; + }, + f: ast::func_type => { + if (f.attrs & ast::func_attrs::NORETURN != 0) { + n += fmt::fprint(out, "@noreturn ")?; + }; + n += fmt::fprint(out, "fn")?; + n += prototype(out, indent, f)?; + }, + l: ast::list_type => { + n += fmt::fprint(out, "[")?; + n += match (l.length) { + ast::len_slice => 0, + ast::len_unbounded => fmt::fprint(out, "*")?, + ast::len_contextual => fmt::fprint(out, "_")?, + e: *ast::expr => expr(out, indent, *e)?, + }; + n += fmt::fprint(out, "]")?; + n += _type(out, indent, *l.members)?; + }, + p: ast::pointer_type => { + if (p.flags & ast::pointer_flags::NULLABLE != 0) { + n += fmt::fprint(out, "nullable ")?; + }; + n += fmt::fprint(out, "*")?; + n += _type(out, indent, *p.referent)?; + }, + s: []ast::struct_member => abort(), // TODO + t: ast::tagged_type => { + n += fmt::fprint(out, "(")?; + for (let i = 0z; i < len(t); i += 1) { + n += _type(out, indent, *t[i])?; + if (i + 1 < len(t)) { + n += fmt::fprint(out, " | ")?; + }; + }; + n += fmt::fprint(out, ")")?; + }, + t: ast::tuple_type => { + n += fmt::fprint(out, "(")?; + for (let i = 0z; i < len(t); i += 1) { + n += _type(out, indent, *t[i])?; + if (i + 1 < len(t)) { + n += fmt::fprint(out, ", ")?; + }; + }; + n += fmt::fprint(out, ")")?; + }, + }; + if (t.flags & ast::type_flags::ERROR != 0) { + n += fmt::fprint(out, "!")?; + }; + return n; +}; + +fn type_test(t: ast::_type, expected: str) bool = { + let buf = strio::dynamic(); + _type(buf, 0, t) as size; + let s = strio::finish(buf); + defer free(s); + return s == expected; +}; + +@test fn _type() void = { + let loc = lex::location { + path = "", + line = 0, + col = 0, + }; + let t = ast::_type { + loc = loc, + flags = ast::type_flags::CONST, + _type = ast::alias_type { + unwrap = false, + ident = ["foo", "bar"], + }, + }; + let type_int = ast::_type { + loc = loc, + flags = 0, + _type = ast::builtin_type::INT, + }; + let expr_void = void: ast::constant_expr: ast::expr; + + assert(type_test(t, "const foo::bar")); + t.flags = 0; + t._type = ast::alias_type { + unwrap = true, + ident = ["baz"], + }; + assert(type_test(t, "...baz")); + + t.flags = ast::type_flags::ERROR; + t._type = ast::builtin_type::INT; + assert(type_test(t, "int!")); + + t.flags = ast::type_flags::CONST | ast::type_flags::ERROR; + t._type = ast::enum_type { + storage = ast::builtin_type::U32, + values = [ + ast::enum_field { + name = "FOO", + value = null, + }, + ast::enum_field { + name = "BAR", + value = &expr_void, + }, + ], + }; + assert(type_test(t, "const enum u32 {\n\tFOO,\n\tBAR: void,\n}!")); + + t.flags = 0; + + t._type = ast::func_type { + result = &type_int, + attrs = 0, + variadism = ast::variadism::NONE, + params = [], + }; + assert(type_test(t, "fn() int")); + t._type = ast::func_type { + result = &type_int, + attrs = ast::func_attrs::NORETURN, + variadism = ast::variadism::C, + params = [ + ast::func_param { + loc = loc, + name = "", + _type = &type_int, + }, + ], + }; + assert(type_test(t, "@noreturn fn(_: int, ...) int")); + t._type = ast::func_type { + result = &type_int, + attrs = 0, + variadism = ast::variadism::HARE, + params = [ + ast::func_param { + loc = loc, + name = "foo", + _type = &type_int, + }, + ast::func_param { + loc = loc, + name = "bar", + _type = &type_int, + }, + ], + }; + assert(type_test(t, "fn(foo: int, bar: int...) int")); + + t.flags = ast::type_flags::CONST; + assert(type_test(t, "fn(foo: int, bar: int...) int")); + + t.flags = 0; + t._type = ast::list_type { + length = ast::len_slice, + members = &type_int, + }; + assert(type_test(t, "[]int")); + t._type = ast::list_type { + length = ast::len_unbounded, + members = &type_int, + }; + assert(type_test(t, "[*]int")); + t._type = ast::list_type { + length = ast::len_contextual, + members = &type_int, + }; + assert(type_test(t, "[_]int")); + t._type = ast::list_type { + length = &expr_void, + members = &type_int, + }; + assert(type_test(t, "[void]int")); + + t._type = ast::pointer_type { + referent = &type_int, + flags = 0, + }; + assert(type_test(t, "*int")); + t._type = ast::pointer_type { + referent = &type_int, + flags = ast::pointer_flags::NULLABLE, + }; + assert(type_test(t, "nullable *int")); + + // TODO: struct_members + + t._type = [&type_int, &type_int]: ast::tagged_type; + assert(type_test(t, "(int | int)")); + + t._type = [&type_int, &type_int]: ast::tuple_type; + assert(type_test(t, "(int, int)")); +}; diff --git a/vendor/tree-sitter-hare/example/types.ha b/vendor/tree-sitter-hare/example/types.ha new file mode 100644 index 000000000..e206c6aa7 --- /dev/null +++ b/vendor/tree-sitter-hare/example/types.ha @@ -0,0 +1,23 @@ +use fmt; +use hare::lex; + +// All possible error types +export type error = lex::error!; + +// Convert an error into a human-friendly string +export fn strerror(err: error) const str = lex::strerror(err: lex::error); + +fn syntaxerr( + loc: lex::location, + fmt: str, + args: fmt::formattable... +) lex::error = { + let why = fmt::asprintf(fmt, args...); + return (loc, why): lex::syntax: lex::error; +}; + +fn mkloc(lex: *lex::lexer) lex::location = lex::location { + path = lex.path, + line = lex.loc.0, + col = lex.loc.1, +}; diff --git a/vendor/tree-sitter-hare/example/unicode.ha b/vendor/tree-sitter-hare/example/unicode.ha new file mode 100644 index 000000000..723046ad5 --- /dev/null +++ b/vendor/tree-sitter-hare/example/unicode.ha @@ -0,0 +1,30 @@ +// This module provides Unicode support for Hare programs. +// +// Programs which deal with basic text manipulation are likely to be served +// sufficiently by the [encoding::utf8], [strings], [ascii], and so on. For +// example, the question of "is this character uppercase?" is often sufficiently +// answered with [ascii::isupper], and matters such as Unicode string +// equivalence are often fraught with error potential - for example, a +// vulnerability was once found in a web login form which used a Unicode +// equivalence comparison on usernames, allowing a malicious actor to register a +// username which was bytewise distinct but uniwise equal to a victim, and then +// use it to log into their account. This module also contains a copy of the +// Unicode Character Database, which is rather large, and linking to it will +// increase the size of your binaries. +// +// The purpose of this module is not to handle every day string manipulation, +// but instead to provide support code for software which is explicitly aware of +// internationalization concerns and seeking out functions which specifically +// address those concerns. +// +// This module makes little attempt to be useful without a broader understanding +// of Unicode. The module is close to a 1:1 implementation of the Unicode +// standard, and it is recommended that any reading of this module's API or +// source code is accompanied by a reading of the Unicode standard. The +// documentation for each type and function makes an effort to direct the reader +// to the appropriate part of the Unicode standard. +// +// See the [i18n] module for a high-level internationalization API. +// +// The present implementation of this module conforms to Unicode 13.0.0, which +// was released on March 11th, 2020. diff --git a/vendor/tree-sitter-hare/example/unit.ha b/vendor/tree-sitter-hare/example/unit.ha new file mode 100644 index 000000000..aa94f461b --- /dev/null +++ b/vendor/tree-sitter-hare/example/unit.ha @@ -0,0 +1,16 @@ +use io; +use fmt; +use hare::ast; + +export fn subunit(out: *io::stream, s: ast::subunit) (size | io::error) = { + let n = 0z; + for (let i = 0z; i < len(s.imports); i += 1) { + n += import(out, s.imports[i])?; + n += fmt::fprintln(out)?; + }; + for (let i = 0z; i < len(s.decls); i += 1) { + n += decl(out, s.decls[i])?; + n += fmt::fprintln(out)?; + }; + return n; +}; diff --git a/vendor/tree-sitter-hare/example/utf8.ha b/vendor/tree-sitter-hare/example/utf8.ha new file mode 100644 index 000000000..273a5e9b5 --- /dev/null +++ b/vendor/tree-sitter-hare/example/utf8.ha @@ -0,0 +1,42 @@ +use encoding::utf8; +use types; + +// Converts a byte slice into a string WITHOUT checking that the byte slice is a +// valid UTF-8 string. +export fn fromutf8_unsafe(in: []u8) str = { + const s = types::string { + data = in: *[*]u8, + length = len(in), + capacity = len(in), + }; + return *(&s: *const str); +}; + +// Converts a byte slice into a string. Aborts if the bytes contain invalid +// UTF-8. To handle such an error without aborting, see +// [encoding::utf8::decode] instead. +export fn fromutf8(in: []u8) str = { + let s = fromutf8_unsafe(in); + assert(utf8::valid(s), "attempted to load invalid UTF-8 string"); + return s; +}; + +// Converts a byte slice into a string. If the slice contains invalid UTF-8 +// sequences, void is returned instead. +export fn try_fromutf8(in: []u8) (str | utf8::invalid) = { + let s = fromutf8_unsafe(in); + if (!utf8::valid(s)) { + return utf8::invalid; + }; + return s; +}; + +// Converts a string to a UTF-8 slice. +export fn toutf8(in: str) []u8 = *(&in: *[]u8); + +@test fn utf8() void = { + assert(fromutf8([ + 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, + ]) == "hello world"); + assert(fromutf8([]) == ""); +}; diff --git a/vendor/tree-sitter-hare/example/util.ha b/vendor/tree-sitter-hare/example/util.ha new file mode 100644 index 000000000..962764b8a --- /dev/null +++ b/vendor/tree-sitter-hare/example/util.ha @@ -0,0 +1,12 @@ +use io; +use fmt; + +fn newline(out: *io::stream, indent: size) (size | io::error) = { + let n = 0z; + n += fmt::fprint(out, "\n")?; + for (let i = 0z; i < indent; i += 1) { + n += fmt::fprint(out, "\t")?; + }; + return n; +}; + diff --git a/vendor/tree-sitter-hare/example/utos.ha b/vendor/tree-sitter-hare/example/utos.ha new file mode 100644 index 000000000..0654cfb38 --- /dev/null +++ b/vendor/tree-sitter-hare/example/utos.ha @@ -0,0 +1,133 @@ +use bytes; +use types; + +// Converts a u64 to a string in the given base. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn u64tosb(u: u64, b: base) const str = { + static assert(types::U64_MAX == 18446744073709551615); + static let buf: [64]u8 = [0...]; // 64 binary digits + + static const lut_upper = [ + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', + ], lut_lower = [ + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', + ]; + const lut = if (b != base::HEX_LOWER) &lut_upper else { + b = base::HEX_UPPER; + &lut_lower; + }; + + let s = types::string { data = &buf, ... }; + if (u == 0) { + buf[s.length] = '0': u32: u8; + s.length += 1z; + }; + + for (u > 0u64) { + buf[s.length] = lut[u % b: u64]: u32: u8; + s.length += 1; + u /= b; + }; + + bytes::reverse(buf[..s.length]); + return *(&s: *str); +}; + +// Converts a u32 to a string in the given base. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn u32tosb(u: u32, b: base) const str = u64tosb(u, b); + +// Converts a u16 to a string in the given base. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn u16tosb(u: u16, b: base) const str = u64tosb(u, b); + +// Converts a u8 to a string in the given base. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn u8tosb(u: u8, b: base) const str = u64tosb(u, b); + +// Converts a uint to a string in the given base. The return value is +// statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn utosb(u: uint, b: base) const str = u64tosb(u, b); + +// Converts a size to a string in the given base. The return value is +// statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn ztosb(u: size, b: base) const str = u64tosb(u, b); + +// Converts a size to a string in the given base. The return value is +// statically allocated and will be overwritten on subsequent calls; see +// [strings::dup] to duplicate the result. +export fn uptrtosb(uptr: uintptr, b: base) const str = u64tosb(uptr: u64, b); + +// Converts a u64 to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn u64tos(u: u64) const str = u64tosb(u, base::DEC); + +// Converts a u32 to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn u32tos(u: u32) const str = u64tos(u); + +// Converts a u16 to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn u16tos(u: u16) const str = u64tos(u); + +// Converts a u8 to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn u8tos(u: u8) const str = u64tos(u); + +// Converts a uint to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn utos(u: uint) const str = u64tos(u); + +// Converts a size to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result, or [strconv::itosb] to pass your own string buffer. +export fn ztos(z: size) const str = u64tos(z); + +// Converts a uintptr to a string in base 10. The return value is statically +// allocated and will be overwritten on subsequent calls; see [strings::dup] to +// duplicate the result. +export fn uptrtos(uptr: uintptr) const str = u64tos(uptr: u64); + +@test fn utosb() void = { + assert("11010" == u64tosb(0b11010, base::BIN)); + assert("1234567" == u64tosb(0o1234567, base::OCT)); + assert("123456789" == u64tosb(123456789, base::DEC)); + assert("123456789ABCDEF" == u64tosb(0x123456789ABCDEF, base::HEX)); + assert("123456789ABCDEF" == u64tosb(0x123456789ABCDEF, base::HEX_UPPER)); + assert("123456789abcdef" == u64tosb(0x123456789ABCDEF, base::HEX_LOWER)); + assert("1111111111111111111111111111111111111111111111111111111111111111" + == u64tosb(types::U64_MAX, base::BIN)); +}; + +@test fn utos() void = { + const samples: [_]u64 = [ + 1234, + 4321, + types::U64_MIN, + types::U64_MAX, + ]; + const expected = [ + "1234", + "4321", + "0", + "18446744073709551615", + ]; + + for (let i = 0z; i < len(samples); i += 1) { + const s = u64tos(samples[i]); + assert(s == expected[i]); + }; +}; diff --git a/vendor/tree-sitter-hare/example/uuid.ha b/vendor/tree-sitter-hare/example/uuid.ha new file mode 100644 index 000000000..0a64798e2 --- /dev/null +++ b/vendor/tree-sitter-hare/example/uuid.ha @@ -0,0 +1,92 @@ +// The uuid module implements RFC 4122-compatible Univerally Unique IDentifiers. +// +// This module only generates UUID4, aka "truly random" UUIDs, due to privacy +// concerns. +use bytes; +use crypto::random; +use endian; +use fmt; +use io; +use strio; +// TODO: decode, decodestr + +// A UUID. +export type uuid = [16]u8; + +export def UUID_LEN: size = 16; +export def UUID_STRLEN: size = 36; +export def UUID_URILEN: size = 45; + +// The "nil" UUID, with all bits set to zero. +export const nil: uuid = [0...]; + +// Octet offsets of various fields as defined by the RFC. +def TIME_LOW: size = 0; +def TIME_MID: size = 4; +def TIME_HI_AND_VERSION: size = 6; +def CLOCK_SEQ_HI_AND_RESERVED: size = 8; +def CLOCK_SEQ_LOW: size = 9; +def NODE: size = 10; + +// Generates a new version 4 UUID. +export fn generate() uuid = { + let id: uuid = [0...]; + random::buffer(id[..]); + let buf = id[CLOCK_SEQ_HI_AND_RESERVED..CLOCK_SEQ_HI_AND_RESERVED + 2]; + let clock = (endian::begetu16(buf) & 0x3FFF) | 0x8000; + endian::beputu16(buf, clock); + let buf = id[TIME_HI_AND_VERSION..TIME_HI_AND_VERSION + 2]; + let version = (endian::begetu16(buf) & 0x0FFF) | 0x4000; + endian::beputu16(buf, version); + return id; +}; + +// Returns true if two UUIDs are equal. +export fn compare(a: uuid, b: uuid) bool = bytes::equal(a, b); + +// Encodes a UUID as a string and writes it to a stream. +export fn encode(out: *io::stream, in: uuid) (size | io::error) = { + let z = 0z; + for (let i = TIME_LOW; i < TIME_LOW + 4; i += 1) { + z += fmt::fprintf(out, "{:02x}", in[i])?; + }; + z += fmt::fprintf(out, "-")?; + for (let i = TIME_MID; i < TIME_MID + 2; i += 1) { + z += fmt::fprintf(out, "{:02x}", in[i])?; + }; + z += fmt::fprintf(out, "-")?; + for (let i = TIME_HI_AND_VERSION; i < TIME_HI_AND_VERSION + 2; i += 1) { + z += fmt::fprintf(out, "{:02x}", in[i])?; + }; + z += fmt::fprintf(out, "-{:02x}{:02x}-", + in[CLOCK_SEQ_HI_AND_RESERVED], in[CLOCK_SEQ_LOW])?; + for (let i = NODE; i < NODE + 6; i += 1) { + z += fmt::fprintf(out, "{:02x}", in[i])?; + }; + return z; +}; + +// Encodes a UUID as a URI and writes it to a stream. +export fn uri(out: *io::stream, in: uuid) (size | io::error) = { + return fmt::fprintf(out, "urn:uuid:")? + encode(out, in)?; +}; + +// Encodes a UUID as a string. The return value is statically allocated, the +// caller must use [strings::dup] to extend its lifetime. +export fn encodestr(in: uuid) str = { + static let buf: [UUID_STRLEN]u8 = [0...]; + let sink = strio::fixed(buf); + defer io::close(sink); + encode(sink, in) as size; + return strio::string(sink); +}; + +// Encodes a UUID as a string. The return value is statically allocated, the +// caller must use [strings::dup] to extend its lifetime. +export fn encodeuri(in: uuid) str = { + static let buf: [UUID_URILEN]u8 = [0...]; + let sink = strio::fixed(buf); + defer io::close(sink); + uri(sink, in) as size; + return strio::string(sink); +}; diff --git a/vendor/tree-sitter-hare/example/vdso.ha b/vendor/tree-sitter-hare/example/vdso.ha new file mode 100644 index 000000000..371389194 --- /dev/null +++ b/vendor/tree-sitter-hare/example/vdso.ha @@ -0,0 +1,166 @@ +use strings; +use format::elf; +use linux; + +let ehdr: nullable *elf::header64 = null; + +fn sys_infoehdr() nullable *elf::header64 = { + static let ehdr_checked = false; + if (ehdr_checked) { + return ehdr; + }; + ehdr_checked = true; + + for (let i = 0; linux::auxv[i].a_type != 0; i += 1) { + if (linux::auxv[i].a_type != elf::at::SYSINFO_EHDR: u64) + continue; + ehdr = linux::auxv[i].a_val: uintptr: *elf::header64; + return ehdr; + }; + return null; +}; + +type vdso_ctx = struct { + segbase: uintptr, + stringtab: *char, + symtab: *[*]elf::sym64, + hashhdr: *elf::hashhdr, + versym: nullable *[*]u16, + verdef: nullable *elf::verdef64, +}; + +let ctx: nullable *vdso_ctx = null; + +fn get_vdso_ctx() nullable *vdso_ctx = { + static let vdso_checked = false; + if (vdso_checked) { + return ctx; + }; + vdso_checked = true; + + const eh = match (sys_infoehdr()) { + null => return null, + x: *elf::header64 => x, + }; + + const ehui = eh: uintptr; + let phui = ehui + eh.e_phoff: uintptr; + let dynvec: nullable *[*]elf::dyn64 = null; + let baseseg: nullable *void = null; + + for (let i: u16 = 0; i < eh.e_phnum; i += 1) { + const ph = phui: *elf::phdr64; + switch (ph.p_type) { + elf::pt::LOAD => + baseseg = ehui + + ph.p_offset: uintptr - + ph.p_vaddr: uintptr, + elf::pt::DYNAMIC => + dynvec = ehui + ph.p_offset: uintptr, + }; + phui += eh.e_phentsize: uintptr; + }; + + if (dynvec == null || baseseg == null) { + return null; + }; + const dynv = dynvec: *[*]elf::dyn64; + + let segbase = baseseg: uintptr; + let stringtab: nullable *char = null; + let symtab: nullable *[*]elf::sym64 = null; + let hashhdr: nullable *elf::hashhdr = null; + let versym: nullable *[*]u16 = null; + let verdef: nullable *elf::verdef64 = null; + + for (let i = 0; dynv[i].d_tag != elf::dt::NULL; i += 1) { + const tabptr = (segbase + dynv[i].d_val: uintptr): *void; + switch (dynv[i].d_tag) { + elf::dt::STRTAB => stringtab = tabptr: *char, + elf::dt::SYMTAB => symtab = tabptr: *[*]elf::sym64, + elf::dt::HASH => hashhdr = tabptr: *elf::hashhdr, + elf::dt::VERSYM => versym = tabptr: *[*]u16, + elf::dt::VERDEF => verdef = tabptr: *elf::verdef64, + * => continue, + }; + }; + + if (stringtab == null || symtab == null || hashhdr == null) { + return null; + }; + + if (verdef == null) { + versym = null; + }; + + // TODO: use a static variable here somehow(?) + const vctx = alloc(vdso_ctx { + segbase = segbase, + stringtab = stringtab: *char, + symtab = symtab: *[*]elf::sym64, + hashhdr = hashhdr: *elf::hashhdr, + verdef = verdef, + versym = versym, + }); + ctx = vctx; + + return ctx; +}; + +fn vdso_checkver(ctx: *vdso_ctx, version: str, num: u32) bool = { + let prev = null: *elf::verdef64; + let cur = match (ctx.verdef) { + null => return true, + vd: *elf::verdef64 => vd, + }; + const versym = match (ctx.versym) { + null => return true, + vs: *[*]u16 => vs[num] & 0x7fff + }; + for (cur != prev) { + if (cur.vd_flags & elf::ver_flg::BASE: u16 == 0 && + cur.vd_ndx & 0x7fff == versym) { + const aux = (cur: uintptr + + cur.vd_aux: uintptr): *elf::verdaux64; + const name = ctx.stringtab + + aux.vda_name: uintptr: *char; + return version == strings::fromc(name); + }; + prev = cur; + cur += cur.vd_next: uintptr; + }; + return false; +}; + +export fn getsym(symname: str, symver: str) nullable *void = { + const ctx = match (get_vdso_ctx()) { + null => return null, + x: *vdso_ctx => x, + }; + + const sym_types = (1 << elf::stt::NOTYPE | + 1 << elf::stt::OBJECT | + 1 << elf::stt::FUNC | + 1 << elf::stt::COMMON): size; + + const sym_binds = (1 << elf::stb::GLOBAL | + 1 << elf::stb::WEAK): size; + + for (let i = 0u32; i < ctx.hashhdr.nchain; i += 1) { + const sym = ctx.symtab[i]; + const symtype = 1 << (sym.st_info & 0xf): size; + const symbind = 1 << (sym.st_info >> 4): size; + if (symtype & sym_types == 0 || symbind & sym_binds == 0 || + sym.st_shndx == 0) { + continue; + }; + const name = ctx.stringtab + sym.st_name: uintptr: *char; + const s: str = strings::fromc(name); + if (s != symname) + continue; + if (!vdso_checkver(ctx, symver, i)) + continue; + return (ctx.segbase + sym.st_value: uintptr): *void; + }; + return null; +}; diff --git a/vendor/tree-sitter-hare/example/void.ha b/vendor/tree-sitter-hare/example/void.ha new file mode 100644 index 000000000..13841ba69 --- /dev/null +++ b/vendor/tree-sitter-hare/example/void.ha @@ -0,0 +1,56 @@ +use rt; +use types; + +// Appends an item, or items, to a slice, returning a new slice. +export fn appendto(sl: *[]void, itemsz: size, items: const *void...) void = { + if (len(items) == 0) { + return; + }; + let sl = sl: *types::slice; + let end = sl.length; + sl.length += len(items); + rt::ensure(sl, itemsz); + let data = sl.data: *[*]u8; + for (let i = 0z; i < len(items); i += 1) { + rt::memcpy(&data[(end + i) * itemsz], items[i], itemsz); + }; +}; + +@test fn appendto() void = { + let input: []int = []; + let num = 1337; + appendto(&input: *[]void, size(int), &num, &num); + assert(len(input) == 2 && input[0] == 1337 && input[1] == 1337); + free(input); +}; + +// Swaps two elements of a slice. +export fn swap(sl: []void, itemsz: size, a: size, b: size) void = { + assert(a < len(sl) && b < len(sl)); + let sl = sl: *[*]u8; + let a = &sl[a * itemsz]: *[*]u8, b = &sl[b * itemsz]: *[*]u8; + for (let i = 0z; i < itemsz; i += 1) { + let c = a[i]; + a[i] = b[i]; + b[i] = c; + }; +}; + +@test fn swap() void = { + let x: []int = [1, 2, 3]; + swap(x: []void, size(int), 0, 2); + assert(x[0] == 3 && x[2] == 1); +}; + +// Returns a pointer to the nth item of a slice. +export fn index(sl: []void, itemsz: size, n: size) *void = { + assert(n < len(sl)); + let ba = sl: *[*]u8; + return &ba[n * itemsz]; +}; + +@test fn index() void = { + let x: []int = [1, 2, 3]; + let ptr = index(x, size(int), 1): *int; + assert(*ptr == 2); +}; diff --git a/vendor/tree-sitter-hare/example/xdg.ha b/vendor/tree-sitter-hare/example/xdg.ha new file mode 100644 index 000000000..29e421eff --- /dev/null +++ b/vendor/tree-sitter-hare/example/xdg.ha @@ -0,0 +1,58 @@ +use fs; +use os; +use path; +use io; + +fn lookup(prog: str, var: str, default: str) str = { + match (os::getenv(var)) { + s: str => { + let path = path::join(s, prog); + match (os::stat(path)) { + err: fs::error => { + os::mkdirs(path) as void; + return path; + }, + st: fs::filestat => { + if (fs::is_dir(st.mode)) { + return path; + }; + }, + }; + }, + void => void, + }; + + let home = match (os::getenv("HOME")) { + s: str => s, + void => abort("$HOME unset"), // TODO: Try reading /etc/passwd + }; + + let path = path::join(home, default, prog); + os::mkdirs(path) as void; + return path; +}; + +// Returns a directory suitable for storing config files. If 'prog' is given, a +// unique path for this program to store data will be returned. +export fn config(prog: str) str = lookup(prog, "XDG_CONFIG_HOME", ".config"); + +// Returns an [fs::fs] for storing config files. If 'prog' is given, a unique +// path for this program to store data will be returned. +export fn configfs(prog: str) *fs::fs = os::diropen(config(prog)) as *fs::fs; + +// Returns a directory suitable for cache files. If 'prog' is given, a unique +// path for this program to store data will be returned. +export fn cache(prog: str) str = lookup(prog, "XDG_CACHE_HOME", ".cache"); + +// Returns an [fs::fs] for cache files. If 'prog' is given, a unique path for +// this program to store data will be returned. +export fn cachefs(prog: str) *fs::fs = os::diropen(cache(prog)) as *fs::fs; + +// Returns a directory suitable for persistent data files. If 'prog' is given, a +// unique path for this program to store data will be returned. +export fn data(prog: str) str = + lookup(prog, "XDG_DATA_HOME", path::join(".local", "share")); + +// Returns an [fs::fs] for persistent data files. If 'prog' is given, a unique +// path for this program to store data will be returned. +export fn datafs(prog: str) *fs::fs = os::diropen(data(prog)) as *fs::fs; diff --git a/vendor/tree-sitter-hare/example/ztos.ha b/vendor/tree-sitter-hare/example/ztos.ha new file mode 100644 index 000000000..4d0ea9f25 --- /dev/null +++ b/vendor/tree-sitter-hare/example/ztos.ha @@ -0,0 +1,38 @@ +fn bytes_reverse(b: []u8) void = { + if (len(b) == 0) { + return; + }; + for (let s = 0z, e = len(b) - 1; s < e) { + let x = b[s]; + b[s] = b[e]; + b[e] = x; + s += 1; + e -= 1; + }; +}; + +fn ztos(u: size) const str = { + static let buf: [21]u8 = [0...]; // 20 digits plus NUL + buf = [0...]; + + let s = struct { + b: *[*]u8 = &buf, + l: size = 0, + c: size = 0, + }; + + if (u == 0) { + s.b[s.l] = '0': u32: u8; + s.l += 1; + }; + + for (u > 0) { + s.b[s.l] = '0': u32: u8 + (u % 10): u8; + s.l += 1; + u /= 10; + }; + + bytes_reverse(s.b[..s.l]); + s.b[s.l] = 0; + return *(&s: *str); +}; diff --git a/vendor/tree-sitter-hare/grammar.js b/vendor/tree-sitter-hare/grammar.js new file mode 100644 index 000000000..4fd59607e --- /dev/null +++ b/vendor/tree-sitter-hare/grammar.js @@ -0,0 +1,725 @@ +const PREC = { + ASSIGNMENT: 0, + LOGICAL_XOR: 1, + LOGICAL_OR: 2, + LOGICAL_AND: 3, + BITWISE_OR: 4, + BITWISE_XOR: 5, + BITWISE_AND: 6, + EQUALITY: 7, + COMPARISON: 8, + SHIFT: 9, + ADD: 10, + MULTIPLY: 11, + CAST: 12, + UNARY: 13, +} + +module.exports = grammar ({ + + name: 'hare', + + extras: $ => [ + /\s|\\\r?\n/, + $.comment, + ], + + conflicts: $ => [ + [$.integer_constant, $.floating_constant], + [$.identifier], // enum + [$.bindings], // parenthesized expressions in array/slice specifiers + [$.for_predicate, $.expression], // second/third production rules in for predicate. + [$.if_expression] + ], + + rules: { + + // The Translation Unit. + unit: $ => seq( + optional($.imports), + optional($.declarations), + ), + + // Imports. + imports: $ => repeat1($.use_statement), + + use_statement: $ => seq( + 'use', + choice( + seq($.identifier, ';'), + seq($.name, '=', $.identifier, ';'), + seq($.identifier, '::', '{', $.name_list, '}', ';') + ), + ), + + name_list: $ => choice( + seq($.name, optional(',')), + seq($.name,',', $.name_list) + ), + + // Declarations. + declarations: $ => repeat1(seq(optional('export'), $.declaration, ';')), + + declaration: $ => choice( + $.global_declaration, + $.constant_declaration, + $.type_declaration, + $.function_declaration + ), + + global_declaration: $ => choice( + seq('let', $.global_bindings), + seq('const', $.global_bindings) + ), + + global_bindings: $ => + seq($.global_binding, optional(seq(',', $.global_bindings))), + + global_binding: $ => seq( + optional($.decl_attr), + $.identifier, ':', $.type, optional(seq('=', $.expression)) + ), + + decl_attr: $ => seq( + '@symbol', '(', $.string_constant, ')' + ), + + constant_declaration: $ => seq('def', $.constant_bindings), + + constant_bindings: $ => + seq($.constant_binding, optional(seq(',', $.constant_bindings))), + + constant_binding: $ => seq( + $.identifier, ':', $.type, '=', $.expression + ), + + + type_declaration: $ => seq('type', $.type_bindings), + + type_bindings: $ => choice( + seq($.identifier, '=', $.type, optional(',')), + seq($.identifier, '=', $.type, ',', $.type_bindings) + ), + + function_declaration: $ => + seq(optional($.fndec_attrs), 'fn', + field('name', $.identifier), field('type', $.prototype), + optional(seq('=', field('body', $.expression))) + ), + + fndec_attrs: $ => repeat1($.fndec_attr), + + fndec_attr: $ => choice( + '@fini', + '@init', + '@test', + $.fntype_attr, + $.decl_attr + ), + + fntype_attr: $ => choice( + '@noreturn', + ), + + // Types. + type: $ => seq($._inner_type, optional('!')), + + _inner_type: $ => seq( optional('const'), $.storage_class), + + storage_class: $ => choice( + $.scalar_type, + $.struct_type, + $.union_type, + $.tuple_type, + $.tagged_union_type, + $.slice_array_type, + $.function_type, + $.alias_type, + $.unwrapped_alias, + ), + + scalar_type: $ => choice( + $.integer_type, + $.floating_type, + $.enum_type, + $.pointer_type, + 'rune', + 'str', + 'bool', + 'void' + ), + + integer_type: $ => choice( + 'i8', + 'i16', + 'i32', + 'i64', + 'u8', + 'u16', + 'u32', + 'u64', + 'int', + 'uint', + 'size', + 'uintptr', + 'char', + ), + + floating_type: $ => choice( + 'f32', + 'f64', + ), + + enum_type: $ => choice( + seq('enum', '{', $.enum_values, '}'), + seq('enum', $.integer_type, '{', $.enum_values, '}'), + ), + + enum_values: $ => choice( + seq($.enum_value, optional(',')), + seq($.enum_value, ',', $.enum_values), + ), + + enum_value: $ => choice( + $.name, + seq($.name, '=', $.expression) + ), + + pointer_type: $ => choice( + seq('*', $._inner_type), + seq('nullable', '*', $._inner_type) + ), + + struct_type: $ =>seq('struct', '{', $.struct_union_fields, '}'), + union_type: $ =>seq('union', '{', $.struct_union_fields, '}'), + + struct_union_fields: $ => choice( + seq($.struct_union_field, optional(',')), + seq($.struct_union_field, ',', $.struct_union_fields) + ), + + struct_union_field: $ => seq( + optional($.offset_specifier), + choice( + seq($.name, ':', $.type), + $.struct_type, + $.union_type, + $.identifier + ) + ), + + offset_specifier: $ => seq('@offset', '(', $.expression, ')'), + + tuple_type: $ => seq('(', $.tuple_types, ')'), + + tuple_types: $ => choice( + seq($.type, ',', $.type, optional(',')), + seq($.type, ',', $.tuple_types), + ), + + tagged_union_type: $ => seq('(', $.tagged_types, ')'), + + tagged_types: $ => seq($.type, '|', $.type, repeat(seq('|', $.type))), + + slice_array_type: $ => choice( + seq('[',']', $._inner_type), + seq('[', $.logical_or_expression, ']', $._inner_type), + seq('[', '*', ']', $._inner_type), + seq('[', '_', ']', $._inner_type) + ), + + function_type: $ => seq(optional($.fntype_attr), 'fn', $.prototype), + + prototype: $ => seq('(', optional($.parameter_list), ')', $._inner_type), + + parameter_list: $ => choice( + seq($.parameters, optional(',')), + seq($.parameters, '...', optional(',')), + seq($.parameters, ',', '...', optional(',')), + ), + + parameters: $ => choice( + $.parameter, + seq($.parameters, ',', $.parameter) + ), + + parameter: $ => choice( + seq($.name, ':', $.type), + seq('_', ':', $.type) + ), + + + alias_type: $ => $.identifier, + + unwrapped_alias: $ => seq('...', $.identifier), + + + // Expressions. + constant: $ => choice( + $.integer_constant, + $.floating_constant, + $.rune_constant, + $.string_constant, + 'true', + 'false', + 'null', + 'void' + ), + + integer_constant: $ => choice( + seq('0x', $.hex_digits, optional($.integer_suffix)), + seq('0o', $.octal_digits, optional($.integer_suffix)), + seq('0b', $.binary_digits, optional($.integer_suffix)), + seq($.decimal_digits, optional($.exponent), optional($.integer_suffix)), + ), + + hex_digits: $ => repeat1($.hex_digit), + + hex_digit: $ => choice( + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'a', + 'b', + 'c', + 'd', + 'e', + 'f' + ), + + octal_digits: $ => repeat1($.octal_digit), + octal_digit: $ => choice( + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + ), + + binary_digits: $ => repeat1($.binary_digit), + binary_digit: $ => choice('0', '1'), + + decimal_digits: $ => repeat1($.decimal_digit), + decimal_digit: $ => choice('0','1', '2', '3', '4', '5', '6', '7', '8', '9'), + + integer_suffix: $ => choice( + 'i', + 'u', + 'z', + 'i8', + 'i16', + 'i32', + 'i64', + 'u8', + 'u16', + 'u32', + 'u64', + ), + + floating_constant: $ => choice( + seq($.decimal_digits, '.', $.decimal_digits, optional($.exponent), optional($.floating_suffix)), + seq($.decimal_digits, optional($.exponent), $.floating_suffix), + ), + + exponent: $ => seq('e', $.decimal_digits), + + floating_suffix: $ => choice( + 'f32', + 'f64' + ), + + rune_constant: $ => seq("'", $.rune, "'"), + + rune: $ => choice( + token.immediate(/[^\']/), + $.escape_sequence + ), + + escape_sequence: $ => choice( + $.named_escape, + seq( + "\\", + token.immediate( + choice( + /x[0-9a-fA-F]{2}/, + /u[0-9a-fA-F]{4}/, + /U[0-9a-fA-F]{8}/ + ) + ) + ) + ), + + named_escape: $ => seq( + '\\', + token.immediate( + choice( + '0', + 'n', + 'r', + 't', + 'b', + 'f', + 'a', + 'v', + '\\', + '\'', + '\"', + )) + ), + + string_constant: $ => repeat1(seq('"', optional($.string_chars), '"')), + + string_chars: $ => repeat1($.string_char), + string_char: $ => choice( + token.immediate(/[^\n"]/), + $.escape_sequence + ), + + array_literal: $ => seq('[', optional($.array_members), ']'), + array_members: $ => choice( + seq($.expression, optional(',')), + seq($.expression, '...', optional(',')), + seq($.expression, ',', $.array_members), + ), + + enum_literal: $ => seq($.identifier, '::', $.name), + + struct_literal: $ => choice( + seq('struct', '{', seq($.field_values, optional(',')), '}'), + seq($.identifier, '{', $.struct_initializer, '}'), + ), + + struct_initializer: $ => choice( + '...', + seq($.field_values, optional(seq(',', optional('...')))), + ), + + field_values: $ => choice( + $.field_value, + seq($.field_values, ',', $.field_value), + ), + + field_value: $ => choice( + seq($.name, '=', $.expression), + seq($.name, ':', $.type, '=', $.expression), + $.struct_literal + ), + + plain_expression: $ => choice( + $.identifier, + $.constant, + $.array_literal, + $.enum_literal, + $.struct_literal, + ), + + nested_expression: $ => choice( + $.plain_expression, + seq('(', $.expression, ')'), + seq('(', $.tuple_items, ')'), + ), + + tuple_items: $ => choice( + seq($.expression, ',', $.expression, optional(',')), + seq($.expression, ',', $.tuple_items), + ), + + allocation_expression: $ => choice( + seq('alloc','(', $.expression, ')'), + seq('alloc','(', $.expression, ',', $.expression, ')'), + seq('append', '(', $.object_selector, ',', $.append_values, ')'), + seq('append','(', '*', $.unary_expression, ',', $.append_values,')'), + seq('free', '(', $.expression, ')'), + seq('delete', '(', $.slicing_expression, ')'), + seq('delete', '(', $.indexing_expression, ')') + ), + + append_values: $ => choice( + seq($.expression, optional(',')), + seq('...', $.expression, optional(',')), + seq($.expression, ',', $.append_values) + ), + + + assertion_expression: $ => choice( + seq('assert', '(', $.expression, ')'), + seq('assert', '(', $.expression, ',', $.string_constant, ')'), + seq('static', 'assert', '(', $.expression, ')'), + seq('static', 'assert', '(', $.expression ,',', $.string_constant, ')'), + seq('abort', '(', optional($.string_constant), ')'), + ), + + call_expression: $ => seq($.postfix_expression, '(', optional($.argument_list), ')'), + + argument_list: $ => choice( + seq($.expression, optional(',')), + seq($.expression, '...', optional(',')), + seq($.expression, ',', $.argument_list), + ), + + measurement_expression: $ => choice( + $.size_expression, + $.length_expression, + $.offset_expression + ), + + size_expression: $ => seq('size', '(', $.type, ')'), + + length_expression: $ => seq('len', '(', $.expression, ')'), + + offset_expression: $ => seq('offset', '(', $.field_access_expression, ')'), + + field_access_expression: $ => choice( + seq($.postfix_expression, field('selector', seq('.', $.name))), + seq($.postfix_expression, field('selector', seq('.', $.integer_constant))) + ), + + indexing_expression: $ => seq($.postfix_expression, '[', $.expression, ']'), + + slicing_expression: $ => seq( + $.postfix_expression, '[', optional($.expression), + '..', optional($.expression), ']' + ), + + error_propagation: $ => seq($.postfix_expression, '?'), + + postfix_expression: $ => choice( + $.nested_expression, + $.allocation_expression, + $.assertion_expression, + $.call_expression, + $.field_access_expression, + $.indexing_expression, + $.measurement_expression, + $.slicing_expression, + $.error_propagation, + ), + + object_selector: $ => choice( + $.identifier, + $.indexing_expression, + $.field_access_expression + ), + + unary_expression: $ => choice( + $.postfix_expression, + prec.right(PREC.UNARY, + seq( + field('operator', choice('+', '-', '~', '!', '*')), + field('argument', $.unary_expression) + ) + ), + prec.right(PREC.UNARY, + seq( + field('address', '&'), + field('argument', $.object_selector) + ) + ) + ), + + cast_expression: $ => choice( + $.unary_expression, + prec.left(PREC.CAST, field('type_cast', seq( $.cast_expression, ':', $.type))), + prec.left(PREC.CAST, field('as_cast', seq( $.cast_expression, 'as', $.type))), + prec.left(PREC.CAST, field('is_cast', seq( $.cast_expression, 'is', $.type))) + ), + + multiplicative_expression: $ => choice( + $.cast_expression, + prec.left(PREC.MULTIPLY, seq($.multiplicative_expression, '*', $.cast_expression)), + prec.left(PREC.MULTIPLY, seq($.multiplicative_expression, '/', $.cast_expression)), + prec.left(PREC.MULTIPLY, seq($.multiplicative_expression, '%', $.cast_expression)) + ), + + additive_expression: $ => choice( + $.multiplicative_expression, + prec.left(PREC.ADD, seq($.additive_expression, '+', $.multiplicative_expression)), + prec.left(PREC.ADD, seq($.additive_expression, '-', $.multiplicative_expression)) + ), + + shift_expression: $ => choice( + $.additive_expression, + prec.left(PREC.SHIFT, seq($.multiplicative_expression, '<<', $.cast_expression)), + prec.left(PREC.SHIFT, seq($.multiplicative_expression, '>>', $.cast_expression)) + ), + + and_expression: $ => choice( + $.shift_expression, + prec.left(PREC.BITWISE_AND, seq($.and_expression, '&', $.shift_expression)), + ), + + exclusive_or_expression: $ => choice( + $.and_expression, + prec.left(PREC.BITWISE_XOR, seq($.exclusive_or_expression, '^', $.and_expression)), + ), + inclusive_or_expression: $ => choice( + $.exclusive_or_expression, + prec.left(PREC.BITWISE_OR, seq($.inclusive_or_expression, '|', $.exclusive_or_expression)), + ), + + comparison_expression: $ => choice( + $.inclusive_or_expression, + prec.left(PREC.COMPARISON, seq($.comparison_expression, '<', $.inclusive_or_expression)), + prec.left(PREC.COMPARISON, seq($.comparison_expression, '>', $.inclusive_or_expression)), + prec.left(PREC.COMPARISON, seq($.comparison_expression, '<=', $.inclusive_or_expression)), + prec.left(PREC.COMPARISON, seq($.comparison_expression, '>=', $.inclusive_or_expression)) + ), + + equality_expression: $ => choice( + $.comparison_expression, + prec.left(PREC.EQUALITY, seq($.equality_expression, '==', $.comparison_expression)), + prec.left(PREC.EQUALITY, seq($.equality_expression, '!=', $.comparison_expression)), + ), + + logical_and_expression: $ => choice( + $.equality_expression, + prec.left(PREC.LOGICAL_AND, seq($.logical_and_expression, '&&', $.equality_expression)), + ), + + logical_xor_expression: $ => choice( + $.logical_and_expression, + prec.left(PREC.LOGICAL_XOR, seq($.logical_xor_expression, '^^', $.logical_and_expression)), + ), + + logical_or_expression: $ => choice( + $.logical_xor_expression, + prec.left(PREC.LOGICAL_OR, seq($.logical_or_expression, '||', $.logical_xor_expression)), + ), + + if_expression: $ => choice( + seq('if', $.conditional_branch), + seq('if', $.conditional_branch, 'else', $.expression) + ), + + conditional_branch: $ => seq('(' , $.expression, ')', $.expression), + + for_loop: $ => seq( + optional($.label), + 'for', '(', $.for_predicate, ')', $.expression + ), + + for_predicate: $ => choice( + $.expression, + seq(field('binding', $.binding_list), ';', $.expression), + seq($.expression, ';', field('afterthought', $.expression)), + seq($.binding_list, ';', $.expression, ';', $.expression), + ), + + label: $ => seq(':', $.name), + + switch_expression: $ => seq( + 'switch', '(', $.expression, ')', '{', $.switch_cases, '}' + ), + + switch_cases: $ => choice( + seq($.switch_case, optional(',')), + seq($.switch_case, ',', $.switch_cases) + ), + + switch_case: $ => choice( + seq($.case_options, '=>', $.expression), + seq('*', '=>', $.expression), + ), + + case_options: $ => choice( + seq($.expression, optional(',')), + seq($.expression, ',', $.case_options) + ), + + match_expression: $ => + seq('match', '(', $.expression, ')', '{', $.match_cases, '}'), + + match_cases: $ => choice( + seq($.match_case, optional(',')), + seq($.match_case, ',', $.match_cases) + ), + + match_case: $ => choice( + seq($.name, ':', $.type, '=>', $.expression), + seq($.type, '=>', $.expression), + seq('*', '=>', $.expression) + ), + + assignment: $ => prec.left(PREC.ASSIGNMENT, + choice( + seq($.object_selector, $.assignment_op, $.expression), + seq('*', $.unary_expression, $.assignment_op, $.expression), + seq($.slicing_expression, '=', $.expression) + )), + + assignment_op: $ => choice( + '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '&=', '|=', '^=' + ), + + binding_list: $ => choice( + seq(optional('static'), 'let', $.bindings), + seq(optional('static'), 'const', $.bindings), + ), + + bindings: $ => seq($.binding, optional(seq(',', $.bindings))), + + binding: $ => choice( + seq($.name, '=', $.expression), + seq($.name, ':', $.type, '=', $.expression), + seq($.binding_names, '=', $.expression), + seq($.binding_names, ':', $.type, '=', $.expression), + ), + + binding_names: $ => choice( + seq($.name, ',', $.name), + seq($.name, ',', $.binding_names) + ), + + deferred_expression: $ => seq('defer', $.expression), + + expression_list: $ => choice( + seq($.expression, ';'), + seq($.expression, ';', $.expression_list) + ), + + control_statement: $ => choice( + seq('break', optional($.label)), + seq('continue', optional($.label)), + seq('return', optional($.expression)) + ), + + expression: $ => choice( + $.assignment, + $.binding_list, + $.deferred_expression, + $.logical_or_expression, + $.if_expression, + $.for_loop, + $.switch_expression, + $.match_expression, + $.control_statement, + $.compound_expression, + ), + + compound_expression: $ => seq('{', $.expression_list, '}'), + + identifier: $ => + seq($.name, optional(seq('::', $.identifier))), + + name: $ => /[a-zA-Z_]\w*/, + + comment: $ => token(seq('//', /(\\(.|\r?\n)|[^\\\n])*/)), + + } +}) diff --git a/vendor/tree-sitter-hare/package.json b/vendor/tree-sitter-hare/package.json new file mode 100644 index 000000000..3ca75d25c --- /dev/null +++ b/vendor/tree-sitter-hare/package.json @@ -0,0 +1,35 @@ +{ + "name": "tree-sitter-hare", + "version": "0.0.1", + "description": "Hare grammar for tree-sitter", + "main": "bindings/node", + + "keywords": [ + "parser", + "hare" + ], + + "author": "ecmma", + "license": "GNU GPL", + + "dependencies": { + "nan": "^2.14.1" + }, + "devDependencies": { + "tree-sitter-cli": "^0.19.1" + }, + + "scripts": { + "build": "tree-sitter generate && node-gyp build", + "test": "tree-sitter test" + }, + + "tree-sitter": [ + { + "scope": "source.ha", + "file-types": [ + "hare" + ] + } + ] +} diff --git a/vendor/tree-sitter-hare/queries/highlights.scm b/vendor/tree-sitter-hare/queries/highlights.scm new file mode 100644 index 000000000..066273481 --- /dev/null +++ b/vendor/tree-sitter-hare/queries/highlights.scm @@ -0,0 +1,117 @@ +"abort" @keyword +"alloc" @keyword +"append" @keyword +"as" @keyword +"assert" @keyword +"bool" @keyword +"break" @keyword +"char" @keyword +"const" @keyword +"continue" @keyword +"def" @keyword +"defer" @keyword +"delete" @keyword +"else" @keyword +"enum" @keyword +"export" @keyword +"f32" @type +"f64" @type +"false" @constant +"fn" @keyword +"for" @keyword +"free" @keyword +"i16" @type +"i32" @type +"i64" @type +"i8" @type +"if" @keyword +"int" @type +"is" @keyword +"len" @keyword +"let" @keyword +"match" @keyword +"null" @constant +"nullable" @keyword +"offset" @keyword +"return" @keyword +"rune" @type +"size" @keyword +"static" @keyword +"str" @type +"struct" @keyword +"switch" @keyword +"true" @keyword +"type" @keyword +"u16" @type +"u32" @type +"u64" @type +"u8" @type +"uint" @type +"uintptr" @type +"union" @keyword +"use" @keyword +"void" @type +"..." @special + +"." @operator +"!" @operator +"~" @operator +"?" @operator +"*" @operator +"/" @operator +"%" @operator +"+" @operator +"-" @operator +"<<" @operator +">>" @operator +"::" @operator +"<" @operator +"<=" @operator +">" @operator +">=" @operator +"==" @operator +"!=" @operator +"&" @operator +"|" @operator +"^" @operator +"&&" @operator +"||" @operator +"=" @operator +"+=" @operator +"-=" @operator +"*=" @operator +"/=" @operator +"%=" @operator +"&=" @operator +"|=" @operator +"<<=" @operator +">>=" @operator +"^=" @operator + +":" @delimiter +";" @delimiter +"{" @delimiter +"}" @delimiter + +(comment) @comment + +(string_constant) @string +(escape_sequence) @type +(rune_constant) @string +(integer_constant) @number +(floating_constant) @number + +(call_expression + (postfix_expression) @function) + +(function_declaration + name: (identifier) @function) + +(parameter (name) @variable.parameter) + +(field_access_expression + selector: (name) @field) +(decl_attr) @special +(fndec_attrs) @special + +(identifier) @variable diff --git a/vendor/tree-sitter-hare/queries/indents.scm b/vendor/tree-sitter-hare/queries/indents.scm new file mode 100644 index 000000000..86ffc4782 --- /dev/null +++ b/vendor/tree-sitter-hare/queries/indents.scm @@ -0,0 +1,14 @@ +[ + (struct_union_fields) + (expression_list) +] @indent + + +[ + "{" + "}" +] @branch + +[ + (comment) +] @ignore diff --git a/vendor/tree-sitter-hare/queries/locals.scm b/vendor/tree-sitter-hare/queries/locals.scm new file mode 100644 index 000000000..d10a57166 --- /dev/null +++ b/vendor/tree-sitter-hare/queries/locals.scm @@ -0,0 +1,19 @@ +(unit) @local.scope + +(function_declaration) @local.scope + +(global_binding + (identifier) @local.definition) +(constant_binding + (identifier) @local.definition) +(type_bindings + (identifier) @local.definition) + +(function_declaration + (prototype + (parameter_list + (parameters + (parameter + (name) @local.definition))))) + +(identifier) @local.reference diff --git a/vendor/tree-sitter-hare/src/grammar.json b/vendor/tree-sitter-hare/src/grammar.json new file mode 100644 index 000000000..135aa03ae --- /dev/null +++ b/vendor/tree-sitter-hare/src/grammar.json @@ -0,0 +1,5113 @@ +{ + "name": "hare", + "rules": { + "unit": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "imports" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "declarations" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "imports": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "use_statement" + } + }, + "use_statement": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "use" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": "::" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "name_list" + }, + { + "type": "STRING", + "value": "}" + }, + { + "type": "STRING", + "value": ";" + } + ] + } + ] + } + ] + }, + "name_list": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "name_list" + } + ] + } + ] + }, + "declarations": { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "export" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SYMBOL", + "name": "declaration" + }, + { + "type": "STRING", + "value": ";" + } + ] + } + }, + "declaration": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "global_declaration" + }, + { + "type": "SYMBOL", + "name": "constant_declaration" + }, + { + "type": "SYMBOL", + "name": "type_declaration" + }, + { + "type": "SYMBOL", + "name": "function_declaration" + } + ] + }, + "global_declaration": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "let" + }, + { + "type": "SYMBOL", + "name": "global_bindings" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "const" + }, + { + "type": "SYMBOL", + "name": "global_bindings" + } + ] + } + ] + }, + "global_bindings": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "global_binding" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "global_bindings" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "global_binding": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "decl_attr" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "decl_attr": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "@symbol" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "string_constant" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "constant_declaration": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "def" + }, + { + "type": "SYMBOL", + "name": "constant_bindings" + } + ] + }, + "constant_bindings": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "constant_binding" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "constant_bindings" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "constant_binding": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "type_declaration": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "type" + }, + { + "type": "SYMBOL", + "name": "type_bindings" + } + ] + }, + "type_bindings": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "type_bindings" + } + ] + } + ] + }, + "function_declaration": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "fndec_attrs" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "fn" + }, + { + "type": "FIELD", + "name": "name", + "content": { + "type": "SYMBOL", + "name": "identifier" + } + }, + { + "type": "FIELD", + "name": "type", + "content": { + "type": "SYMBOL", + "name": "prototype" + } + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "FIELD", + "name": "body", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "fndec_attrs": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "fndec_attr" + } + }, + "fndec_attr": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "@fini" + }, + { + "type": "STRING", + "value": "@init" + }, + { + "type": "STRING", + "value": "@test" + }, + { + "type": "SYMBOL", + "name": "fntype_attr" + }, + { + "type": "SYMBOL", + "name": "decl_attr" + } + ] + }, + "fntype_attr": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "@noreturn" + } + ] + }, + "type": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "_inner_type" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "!" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "_inner_type": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "const" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SYMBOL", + "name": "storage_class" + } + ] + }, + "storage_class": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "scalar_type" + }, + { + "type": "SYMBOL", + "name": "struct_type" + }, + { + "type": "SYMBOL", + "name": "union_type" + }, + { + "type": "SYMBOL", + "name": "tuple_type" + }, + { + "type": "SYMBOL", + "name": "tagged_union_type" + }, + { + "type": "SYMBOL", + "name": "slice_array_type" + }, + { + "type": "SYMBOL", + "name": "function_type" + }, + { + "type": "SYMBOL", + "name": "alias_type" + }, + { + "type": "SYMBOL", + "name": "unwrapped_alias" + } + ] + }, + "scalar_type": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "integer_type" + }, + { + "type": "SYMBOL", + "name": "floating_type" + }, + { + "type": "SYMBOL", + "name": "enum_type" + }, + { + "type": "SYMBOL", + "name": "pointer_type" + }, + { + "type": "STRING", + "value": "rune" + }, + { + "type": "STRING", + "value": "str" + }, + { + "type": "STRING", + "value": "bool" + }, + { + "type": "STRING", + "value": "void" + } + ] + }, + "integer_type": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "i8" + }, + { + "type": "STRING", + "value": "i16" + }, + { + "type": "STRING", + "value": "i32" + }, + { + "type": "STRING", + "value": "i64" + }, + { + "type": "STRING", + "value": "u8" + }, + { + "type": "STRING", + "value": "u16" + }, + { + "type": "STRING", + "value": "u32" + }, + { + "type": "STRING", + "value": "u64" + }, + { + "type": "STRING", + "value": "int" + }, + { + "type": "STRING", + "value": "uint" + }, + { + "type": "STRING", + "value": "size" + }, + { + "type": "STRING", + "value": "uintptr" + }, + { + "type": "STRING", + "value": "char" + } + ] + }, + "floating_type": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "f32" + }, + { + "type": "STRING", + "value": "f64" + } + ] + }, + "enum_type": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "enum" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "enum_values" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "enum" + }, + { + "type": "SYMBOL", + "name": "integer_type" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "enum_values" + }, + { + "type": "STRING", + "value": "}" + } + ] + } + ] + }, + "enum_values": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "enum_value" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "enum_value" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "enum_values" + } + ] + } + ] + }, + "enum_value": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + ] + }, + "pointer_type": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "SYMBOL", + "name": "_inner_type" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "nullable" + }, + { + "type": "STRING", + "value": "*" + }, + { + "type": "SYMBOL", + "name": "_inner_type" + } + ] + } + ] + }, + "struct_type": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "struct" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "struct_union_fields" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "union_type": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "union" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "struct_union_fields" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "struct_union_fields": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "struct_union_field" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "struct_union_field" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "struct_union_fields" + } + ] + } + ] + }, + "struct_union_field": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "offset_specifier" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "type" + } + ] + }, + { + "type": "SYMBOL", + "name": "struct_type" + }, + { + "type": "SYMBOL", + "name": "union_type" + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + } + ] + }, + "offset_specifier": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "@offset" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "tuple_type": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "tuple_types" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "tuple_types": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "tuple_types" + } + ] + } + ] + }, + "tagged_union_type": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "tagged_types" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "tagged_types": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": "|" + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "REPEAT", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "|" + }, + { + "type": "SYMBOL", + "name": "type" + } + ] + } + } + ] + }, + "slice_array_type": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "STRING", + "value": "]" + }, + { + "type": "SYMBOL", + "name": "_inner_type" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "SYMBOL", + "name": "logical_or_expression" + }, + { + "type": "STRING", + "value": "]" + }, + { + "type": "SYMBOL", + "name": "_inner_type" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "STRING", + "value": "*" + }, + { + "type": "STRING", + "value": "]" + }, + { + "type": "SYMBOL", + "name": "_inner_type" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "STRING", + "value": "_" + }, + { + "type": "STRING", + "value": "]" + }, + { + "type": "SYMBOL", + "name": "_inner_type" + } + ] + } + ] + }, + "function_type": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "fntype_attr" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "fn" + }, + { + "type": "SYMBOL", + "name": "prototype" + } + ] + }, + "prototype": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "parameter_list" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + }, + { + "type": "SYMBOL", + "name": "_inner_type" + } + ] + }, + "parameter_list": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "parameters" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "parameters" + }, + { + "type": "STRING", + "value": "..." + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "parameters" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "STRING", + "value": "..." + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + }, + "parameters": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "parameter" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "parameters" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "parameter" + } + ] + } + ] + }, + "parameter": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "type" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "_" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "type" + } + ] + } + ] + }, + "alias_type": { + "type": "SYMBOL", + "name": "identifier" + }, + "unwrapped_alias": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "..." + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + }, + "constant": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "integer_constant" + }, + { + "type": "SYMBOL", + "name": "floating_constant" + }, + { + "type": "SYMBOL", + "name": "rune_constant" + }, + { + "type": "SYMBOL", + "name": "string_constant" + }, + { + "type": "STRING", + "value": "true" + }, + { + "type": "STRING", + "value": "false" + }, + { + "type": "STRING", + "value": "null" + }, + { + "type": "STRING", + "value": "void" + } + ] + }, + "integer_constant": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "0x" + }, + { + "type": "SYMBOL", + "name": "hex_digits" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "integer_suffix" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "0o" + }, + { + "type": "SYMBOL", + "name": "octal_digits" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "integer_suffix" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "0b" + }, + { + "type": "SYMBOL", + "name": "binary_digits" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "integer_suffix" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "decimal_digits" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "exponent" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "integer_suffix" + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + }, + "hex_digits": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "hex_digit" + } + }, + "hex_digit": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0" + }, + { + "type": "STRING", + "value": "1" + }, + { + "type": "STRING", + "value": "2" + }, + { + "type": "STRING", + "value": "3" + }, + { + "type": "STRING", + "value": "4" + }, + { + "type": "STRING", + "value": "5" + }, + { + "type": "STRING", + "value": "6" + }, + { + "type": "STRING", + "value": "7" + }, + { + "type": "STRING", + "value": "8" + }, + { + "type": "STRING", + "value": "9" + }, + { + "type": "STRING", + "value": "A" + }, + { + "type": "STRING", + "value": "B" + }, + { + "type": "STRING", + "value": "C" + }, + { + "type": "STRING", + "value": "D" + }, + { + "type": "STRING", + "value": "E" + }, + { + "type": "STRING", + "value": "F" + }, + { + "type": "STRING", + "value": "a" + }, + { + "type": "STRING", + "value": "b" + }, + { + "type": "STRING", + "value": "c" + }, + { + "type": "STRING", + "value": "d" + }, + { + "type": "STRING", + "value": "e" + }, + { + "type": "STRING", + "value": "f" + } + ] + }, + "octal_digits": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "octal_digit" + } + }, + "octal_digit": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0" + }, + { + "type": "STRING", + "value": "1" + }, + { + "type": "STRING", + "value": "2" + }, + { + "type": "STRING", + "value": "3" + }, + { + "type": "STRING", + "value": "4" + }, + { + "type": "STRING", + "value": "5" + }, + { + "type": "STRING", + "value": "6" + }, + { + "type": "STRING", + "value": "7" + } + ] + }, + "binary_digits": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "binary_digit" + } + }, + "binary_digit": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0" + }, + { + "type": "STRING", + "value": "1" + } + ] + }, + "decimal_digits": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "decimal_digit" + } + }, + "decimal_digit": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0" + }, + { + "type": "STRING", + "value": "1" + }, + { + "type": "STRING", + "value": "2" + }, + { + "type": "STRING", + "value": "3" + }, + { + "type": "STRING", + "value": "4" + }, + { + "type": "STRING", + "value": "5" + }, + { + "type": "STRING", + "value": "6" + }, + { + "type": "STRING", + "value": "7" + }, + { + "type": "STRING", + "value": "8" + }, + { + "type": "STRING", + "value": "9" + } + ] + }, + "integer_suffix": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "i" + }, + { + "type": "STRING", + "value": "u" + }, + { + "type": "STRING", + "value": "z" + }, + { + "type": "STRING", + "value": "i8" + }, + { + "type": "STRING", + "value": "i16" + }, + { + "type": "STRING", + "value": "i32" + }, + { + "type": "STRING", + "value": "i64" + }, + { + "type": "STRING", + "value": "u8" + }, + { + "type": "STRING", + "value": "u16" + }, + { + "type": "STRING", + "value": "u32" + }, + { + "type": "STRING", + "value": "u64" + } + ] + }, + "floating_constant": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "decimal_digits" + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "decimal_digits" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "exponent" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "floating_suffix" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "decimal_digits" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "exponent" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SYMBOL", + "name": "floating_suffix" + } + ] + } + ] + }, + "exponent": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "e" + }, + { + "type": "SYMBOL", + "name": "decimal_digits" + } + ] + }, + "floating_suffix": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "f32" + }, + { + "type": "STRING", + "value": "f64" + } + ] + }, + "rune_constant": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "'" + }, + { + "type": "SYMBOL", + "name": "rune" + }, + { + "type": "STRING", + "value": "'" + } + ] + }, + "rune": { + "type": "CHOICE", + "members": [ + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "[^\\']" + } + }, + { + "type": "SYMBOL", + "name": "escape_sequence" + } + ] + }, + "escape_sequence": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "named_escape" + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "\\" + }, + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "x[0-9a-fA-F]{2}" + }, + { + "type": "PATTERN", + "value": "u[0-9a-fA-F]{4}" + }, + { + "type": "PATTERN", + "value": "U[0-9a-fA-F]{8}" + } + ] + } + } + ] + } + ] + }, + "named_escape": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "\\" + }, + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "0" + }, + { + "type": "STRING", + "value": "n" + }, + { + "type": "STRING", + "value": "r" + }, + { + "type": "STRING", + "value": "t" + }, + { + "type": "STRING", + "value": "b" + }, + { + "type": "STRING", + "value": "f" + }, + { + "type": "STRING", + "value": "a" + }, + { + "type": "STRING", + "value": "v" + }, + { + "type": "STRING", + "value": "\\" + }, + { + "type": "STRING", + "value": "'" + }, + { + "type": "STRING", + "value": "\"" + } + ] + } + } + ] + }, + "string_constant": { + "type": "REPEAT1", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "\"" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "string_chars" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "\"" + } + ] + } + }, + "string_chars": { + "type": "REPEAT1", + "content": { + "type": "SYMBOL", + "name": "string_char" + } + }, + "string_char": { + "type": "CHOICE", + "members": [ + { + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "[^\\n\"]" + } + }, + { + "type": "SYMBOL", + "name": "escape_sequence" + } + ] + }, + "array_literal": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "array_members" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "array_members": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "..." + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "array_members" + } + ] + } + ] + }, + "enum_literal": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": "::" + }, + { + "type": "SYMBOL", + "name": "name" + } + ] + }, + "struct_literal": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "struct" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "field_values" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "struct_initializer" + }, + { + "type": "STRING", + "value": "}" + } + ] + } + ] + }, + "struct_initializer": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "..." + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "field_values" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "..." + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + }, + "field_values": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "field_value" + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "field_values" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "field_value" + } + ] + } + ] + }, + "field_value": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SYMBOL", + "name": "struct_literal" + } + ] + }, + "plain_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "constant" + }, + { + "type": "SYMBOL", + "name": "array_literal" + }, + { + "type": "SYMBOL", + "name": "enum_literal" + }, + { + "type": "SYMBOL", + "name": "struct_literal" + } + ] + }, + "nested_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "plain_expression" + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "tuple_items" + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + }, + "tuple_items": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "tuple_items" + } + ] + } + ] + }, + "allocation_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "alloc" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "alloc" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "append" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "object_selector" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "append_values" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "append" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "STRING", + "value": "*" + }, + { + "type": "SYMBOL", + "name": "unary_expression" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "append_values" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "free" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "delete" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "slicing_expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "delete" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "indexing_expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + }, + "append_values": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "..." + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "append_values" + } + ] + } + ] + }, + "assertion_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "assert" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "assert" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "string_constant" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "static" + }, + { + "type": "STRING", + "value": "assert" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "static" + }, + { + "type": "STRING", + "value": "assert" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "string_constant" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "abort" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "string_constant" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + } + ] + }, + "call_expression": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "postfix_expression" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "argument_list" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "argument_list": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "..." + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "argument_list" + } + ] + } + ] + }, + "measurement_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "size_expression" + }, + { + "type": "SYMBOL", + "name": "length_expression" + }, + { + "type": "SYMBOL", + "name": "offset_expression" + } + ] + }, + "size_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "size" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "length_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "len" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "offset_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "offset" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "field_access_expression" + }, + { + "type": "STRING", + "value": ")" + } + ] + }, + "field_access_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "postfix_expression" + }, + { + "type": "FIELD", + "name": "selector", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "name" + } + ] + } + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "postfix_expression" + }, + { + "type": "FIELD", + "name": "selector", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "." + }, + { + "type": "SYMBOL", + "name": "integer_constant" + } + ] + } + } + ] + } + ] + }, + "indexing_expression": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "postfix_expression" + }, + { + "type": "STRING", + "value": "[" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "slicing_expression": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "postfix_expression" + }, + { + "type": "STRING", + "value": "[" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": ".." + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "]" + } + ] + }, + "error_propagation": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "postfix_expression" + }, + { + "type": "STRING", + "value": "?" + } + ] + }, + "postfix_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "nested_expression" + }, + { + "type": "SYMBOL", + "name": "allocation_expression" + }, + { + "type": "SYMBOL", + "name": "assertion_expression" + }, + { + "type": "SYMBOL", + "name": "call_expression" + }, + { + "type": "SYMBOL", + "name": "field_access_expression" + }, + { + "type": "SYMBOL", + "name": "indexing_expression" + }, + { + "type": "SYMBOL", + "name": "measurement_expression" + }, + { + "type": "SYMBOL", + "name": "slicing_expression" + }, + { + "type": "SYMBOL", + "name": "error_propagation" + } + ] + }, + "object_selector": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "identifier" + }, + { + "type": "SYMBOL", + "name": "indexing_expression" + }, + { + "type": "SYMBOL", + "name": "field_access_expression" + } + ] + }, + "unary_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "postfix_expression" + }, + { + "type": "PREC_RIGHT", + "value": 13, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "operator", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "+" + }, + { + "type": "STRING", + "value": "-" + }, + { + "type": "STRING", + "value": "~" + }, + { + "type": "STRING", + "value": "!" + }, + { + "type": "STRING", + "value": "*" + } + ] + } + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "unary_expression" + } + } + ] + } + }, + { + "type": "PREC_RIGHT", + "value": 13, + "content": { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "address", + "content": { + "type": "STRING", + "value": "&" + } + }, + { + "type": "FIELD", + "name": "argument", + "content": { + "type": "SYMBOL", + "name": "object_selector" + } + } + ] + } + } + ] + }, + "cast_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "unary_expression" + }, + { + "type": "PREC_LEFT", + "value": 12, + "content": { + "type": "FIELD", + "name": "type_cast", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "cast_expression" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "type" + } + ] + } + } + }, + { + "type": "PREC_LEFT", + "value": 12, + "content": { + "type": "FIELD", + "name": "as_cast", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "cast_expression" + }, + { + "type": "STRING", + "value": "as" + }, + { + "type": "SYMBOL", + "name": "type" + } + ] + } + } + }, + { + "type": "PREC_LEFT", + "value": 12, + "content": { + "type": "FIELD", + "name": "is_cast", + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "cast_expression" + }, + { + "type": "STRING", + "value": "is" + }, + { + "type": "SYMBOL", + "name": "type" + } + ] + } + } + } + ] + }, + "multiplicative_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "cast_expression" + }, + { + "type": "PREC_LEFT", + "value": 11, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "multiplicative_expression" + }, + { + "type": "STRING", + "value": "*" + }, + { + "type": "SYMBOL", + "name": "cast_expression" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 11, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "multiplicative_expression" + }, + { + "type": "STRING", + "value": "/" + }, + { + "type": "SYMBOL", + "name": "cast_expression" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 11, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "multiplicative_expression" + }, + { + "type": "STRING", + "value": "%" + }, + { + "type": "SYMBOL", + "name": "cast_expression" + } + ] + } + } + ] + }, + "additive_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "multiplicative_expression" + }, + { + "type": "PREC_LEFT", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "additive_expression" + }, + { + "type": "STRING", + "value": "+" + }, + { + "type": "SYMBOL", + "name": "multiplicative_expression" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 10, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "additive_expression" + }, + { + "type": "STRING", + "value": "-" + }, + { + "type": "SYMBOL", + "name": "multiplicative_expression" + } + ] + } + } + ] + }, + "shift_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "additive_expression" + }, + { + "type": "PREC_LEFT", + "value": 9, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "multiplicative_expression" + }, + { + "type": "STRING", + "value": "<<" + }, + { + "type": "SYMBOL", + "name": "cast_expression" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 9, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "multiplicative_expression" + }, + { + "type": "STRING", + "value": ">>" + }, + { + "type": "SYMBOL", + "name": "cast_expression" + } + ] + } + } + ] + }, + "and_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "shift_expression" + }, + { + "type": "PREC_LEFT", + "value": 6, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "and_expression" + }, + { + "type": "STRING", + "value": "&" + }, + { + "type": "SYMBOL", + "name": "shift_expression" + } + ] + } + } + ] + }, + "exclusive_or_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "and_expression" + }, + { + "type": "PREC_LEFT", + "value": 5, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "exclusive_or_expression" + }, + { + "type": "STRING", + "value": "^" + }, + { + "type": "SYMBOL", + "name": "and_expression" + } + ] + } + } + ] + }, + "inclusive_or_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "exclusive_or_expression" + }, + { + "type": "PREC_LEFT", + "value": 4, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "inclusive_or_expression" + }, + { + "type": "STRING", + "value": "|" + }, + { + "type": "SYMBOL", + "name": "exclusive_or_expression" + } + ] + } + } + ] + }, + "comparison_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "inclusive_or_expression" + }, + { + "type": "PREC_LEFT", + "value": 8, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "comparison_expression" + }, + { + "type": "STRING", + "value": "<" + }, + { + "type": "SYMBOL", + "name": "inclusive_or_expression" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 8, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "comparison_expression" + }, + { + "type": "STRING", + "value": ">" + }, + { + "type": "SYMBOL", + "name": "inclusive_or_expression" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 8, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "comparison_expression" + }, + { + "type": "STRING", + "value": "<=" + }, + { + "type": "SYMBOL", + "name": "inclusive_or_expression" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 8, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "comparison_expression" + }, + { + "type": "STRING", + "value": ">=" + }, + { + "type": "SYMBOL", + "name": "inclusive_or_expression" + } + ] + } + } + ] + }, + "equality_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "comparison_expression" + }, + { + "type": "PREC_LEFT", + "value": 7, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "equality_expression" + }, + { + "type": "STRING", + "value": "==" + }, + { + "type": "SYMBOL", + "name": "comparison_expression" + } + ] + } + }, + { + "type": "PREC_LEFT", + "value": 7, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "equality_expression" + }, + { + "type": "STRING", + "value": "!=" + }, + { + "type": "SYMBOL", + "name": "comparison_expression" + } + ] + } + } + ] + }, + "logical_and_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "equality_expression" + }, + { + "type": "PREC_LEFT", + "value": 3, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "logical_and_expression" + }, + { + "type": "STRING", + "value": "&&" + }, + { + "type": "SYMBOL", + "name": "equality_expression" + } + ] + } + } + ] + }, + "logical_xor_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "logical_and_expression" + }, + { + "type": "PREC_LEFT", + "value": 1, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "logical_xor_expression" + }, + { + "type": "STRING", + "value": "^^" + }, + { + "type": "SYMBOL", + "name": "logical_and_expression" + } + ] + } + } + ] + }, + "logical_or_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "logical_xor_expression" + }, + { + "type": "PREC_LEFT", + "value": 2, + "content": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "logical_or_expression" + }, + { + "type": "STRING", + "value": "||" + }, + { + "type": "SYMBOL", + "name": "logical_xor_expression" + } + ] + } + } + ] + }, + "if_expression": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "if" + }, + { + "type": "SYMBOL", + "name": "conditional_branch" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "if" + }, + { + "type": "SYMBOL", + "name": "conditional_branch" + }, + { + "type": "STRING", + "value": "else" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + ] + }, + "conditional_branch": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "for_loop": { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "label" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "for" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "for_predicate" + }, + { + "type": "STRING", + "value": ")" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "for_predicate": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "SEQ", + "members": [ + { + "type": "FIELD", + "name": "binding", + "content": { + "type": "SYMBOL", + "name": "binding_list" + } + }, + { + "type": "STRING", + "value": ";" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ";" + }, + { + "type": "FIELD", + "name": "afterthought", + "content": { + "type": "SYMBOL", + "name": "expression" + } + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "binding_list" + }, + { + "type": "STRING", + "value": ";" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ";" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + ] + }, + "label": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "name" + } + ] + }, + "switch_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "switch" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "switch_cases" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "switch_cases": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "switch_case" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "switch_case" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "switch_cases" + } + ] + } + ] + }, + "switch_case": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "case_options" + }, + { + "type": "STRING", + "value": "=>" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "STRING", + "value": "=>" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + ] + }, + "case_options": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "case_options" + } + ] + } + ] + }, + "match_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "match" + }, + { + "type": "STRING", + "value": "(" + }, + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ")" + }, + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "match_cases" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "match_cases": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_case" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "match_case" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "match_cases" + } + ] + } + ] + }, + "match_case": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": "=>" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": "=>" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "STRING", + "value": "=>" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + ] + }, + "assignment": { + "type": "PREC_LEFT", + "value": 0, + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "object_selector" + }, + { + "type": "SYMBOL", + "name": "assignment_op" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "*" + }, + { + "type": "SYMBOL", + "name": "unary_expression" + }, + { + "type": "SYMBOL", + "name": "assignment_op" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "slicing_expression" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + ] + } + }, + "assignment_op": { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "=" + }, + { + "type": "STRING", + "value": "+=" + }, + { + "type": "STRING", + "value": "-=" + }, + { + "type": "STRING", + "value": "*=" + }, + { + "type": "STRING", + "value": "/=" + }, + { + "type": "STRING", + "value": "%=" + }, + { + "type": "STRING", + "value": "<<=" + }, + { + "type": "STRING", + "value": ">>=" + }, + { + "type": "STRING", + "value": "&=" + }, + { + "type": "STRING", + "value": "|=" + }, + { + "type": "STRING", + "value": "^=" + } + ] + }, + "binding_list": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "static" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "let" + }, + { + "type": "SYMBOL", + "name": "bindings" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "static" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "const" + }, + { + "type": "SYMBOL", + "name": "bindings" + } + ] + } + ] + }, + "bindings": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "binding" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "bindings" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "binding": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "binding_names" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "binding_names" + }, + { + "type": "STRING", + "value": ":" + }, + { + "type": "SYMBOL", + "name": "type" + }, + { + "type": "STRING", + "value": "=" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + } + ] + }, + "binding_names": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "name" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "STRING", + "value": "," + }, + { + "type": "SYMBOL", + "name": "binding_names" + } + ] + } + ] + }, + "deferred_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "defer" + }, + { + "type": "SYMBOL", + "name": "expression" + } + ] + }, + "expression_list": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ";" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "STRING", + "value": ";" + }, + { + "type": "SYMBOL", + "name": "expression_list" + } + ] + } + ] + }, + "control_statement": { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "break" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "label" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "continue" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "label" + }, + { + "type": "BLANK" + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "return" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "expression" + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + }, + "expression": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "assignment" + }, + { + "type": "SYMBOL", + "name": "binding_list" + }, + { + "type": "SYMBOL", + "name": "deferred_expression" + }, + { + "type": "SYMBOL", + "name": "logical_or_expression" + }, + { + "type": "SYMBOL", + "name": "if_expression" + }, + { + "type": "SYMBOL", + "name": "for_loop" + }, + { + "type": "SYMBOL", + "name": "switch_expression" + }, + { + "type": "SYMBOL", + "name": "match_expression" + }, + { + "type": "SYMBOL", + "name": "control_statement" + }, + { + "type": "SYMBOL", + "name": "compound_expression" + } + ] + }, + "compound_expression": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "{" + }, + { + "type": "SYMBOL", + "name": "expression_list" + }, + { + "type": "STRING", + "value": "}" + } + ] + }, + "identifier": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "name" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "::" + }, + { + "type": "SYMBOL", + "name": "identifier" + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + }, + "name": { + "type": "PATTERN", + "value": "[a-zA-Z_]\\w*" + }, + "comment": { + "type": "TOKEN", + "content": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "//" + }, + { + "type": "PATTERN", + "value": "(\\\\(.|\\r?\\n)|[^\\\\\\n])*" + } + ] + } + } + }, + "extras": [ + { + "type": "PATTERN", + "value": "\\s|\\\\\\r?\\n" + }, + { + "type": "SYMBOL", + "name": "comment" + } + ], + "conflicts": [ + [ + "integer_constant", + "floating_constant" + ], + [ + "identifier" + ], + [ + "bindings" + ], + [ + "for_predicate", + "expression" + ], + [ + "if_expression" + ] + ], + "precedences": [], + "externals": [], + "inline": [], + "supertypes": [] +} + diff --git a/vendor/tree-sitter-hare/src/node-types.json b/vendor/tree-sitter-hare/src/node-types.json new file mode 100644 index 000000000..acee8589a --- /dev/null +++ b/vendor/tree-sitter-hare/src/node-types.json @@ -0,0 +1,3093 @@ +[ + { + "type": "additive_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "additive_expression", + "named": true + }, + { + "type": "multiplicative_expression", + "named": true + } + ] + } + }, + { + "type": "alias_type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "allocation_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "append_values", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "indexing_expression", + "named": true + }, + { + "type": "object_selector", + "named": true + }, + { + "type": "slicing_expression", + "named": true + }, + { + "type": "unary_expression", + "named": true + } + ] + } + }, + { + "type": "and_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "and_expression", + "named": true + }, + { + "type": "shift_expression", + "named": true + } + ] + } + }, + { + "type": "append_values", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "append_values", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "argument_list", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "argument_list", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "array_literal", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "array_members", + "named": true + } + ] + } + }, + { + "type": "array_members", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "array_members", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "assertion_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "string_constant", + "named": true + } + ] + } + }, + { + "type": "assignment", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "assignment_op", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "object_selector", + "named": true + }, + { + "type": "slicing_expression", + "named": true + }, + { + "type": "unary_expression", + "named": true + } + ] + } + }, + { + "type": "assignment_op", + "named": true, + "fields": {} + }, + { + "type": "binary_digit", + "named": true, + "fields": {} + }, + { + "type": "binary_digits", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "binary_digit", + "named": true + } + ] + } + }, + { + "type": "binding", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "binding_names", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "name", + "named": true + }, + { + "type": "type", + "named": true + } + ] + } + }, + { + "type": "binding_list", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "bindings", + "named": true + } + ] + } + }, + { + "type": "binding_names", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "binding_names", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "bindings", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "binding", + "named": true + }, + { + "type": "bindings", + "named": true + } + ] + } + }, + { + "type": "call_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "argument_list", + "named": true + }, + { + "type": "postfix_expression", + "named": true + } + ] + } + }, + { + "type": "case_options", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "case_options", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "cast_expression", + "named": true, + "fields": { + "as_cast": { + "multiple": true, + "required": false, + "types": [ + { + "type": "as", + "named": false + }, + { + "type": "cast_expression", + "named": true + }, + { + "type": "type", + "named": true + } + ] + }, + "is_cast": { + "multiple": true, + "required": false, + "types": [ + { + "type": "cast_expression", + "named": true + }, + { + "type": "is", + "named": false + }, + { + "type": "type", + "named": true + } + ] + }, + "type_cast": { + "multiple": true, + "required": false, + "types": [ + { + "type": ":", + "named": false + }, + { + "type": "cast_expression", + "named": true + }, + { + "type": "type", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "unary_expression", + "named": true + } + ] + } + }, + { + "type": "comparison_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "comparison_expression", + "named": true + }, + { + "type": "inclusive_or_expression", + "named": true + } + ] + } + }, + { + "type": "compound_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression_list", + "named": true + } + ] + } + }, + { + "type": "conditional_branch", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "constant", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "floating_constant", + "named": true + }, + { + "type": "integer_constant", + "named": true + }, + { + "type": "rune_constant", + "named": true + }, + { + "type": "string_constant", + "named": true + } + ] + } + }, + { + "type": "constant_binding", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "type", + "named": true + } + ] + } + }, + { + "type": "constant_bindings", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "constant_binding", + "named": true + }, + { + "type": "constant_bindings", + "named": true + } + ] + } + }, + { + "type": "constant_declaration", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "constant_bindings", + "named": true + } + ] + } + }, + { + "type": "control_statement", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "label", + "named": true + } + ] + } + }, + { + "type": "decimal_digit", + "named": true, + "fields": {} + }, + { + "type": "decimal_digits", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "decimal_digit", + "named": true + } + ] + } + }, + { + "type": "decl_attr", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "string_constant", + "named": true + } + ] + } + }, + { + "type": "declaration", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "constant_declaration", + "named": true + }, + { + "type": "function_declaration", + "named": true + }, + { + "type": "global_declaration", + "named": true + }, + { + "type": "type_declaration", + "named": true + } + ] + } + }, + { + "type": "declarations", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "declaration", + "named": true + } + ] + } + }, + { + "type": "deferred_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "enum_literal", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "enum_type", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "enum_values", + "named": true + }, + { + "type": "integer_type", + "named": true + } + ] + } + }, + { + "type": "enum_value", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "enum_values", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "enum_value", + "named": true + }, + { + "type": "enum_values", + "named": true + } + ] + } + }, + { + "type": "equality_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "comparison_expression", + "named": true + }, + { + "type": "equality_expression", + "named": true + } + ] + } + }, + { + "type": "error_propagation", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "postfix_expression", + "named": true + } + ] + } + }, + { + "type": "escape_sequence", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "named_escape", + "named": true + } + ] + } + }, + { + "type": "exclusive_or_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "and_expression", + "named": true + }, + { + "type": "exclusive_or_expression", + "named": true + } + ] + } + }, + { + "type": "exponent", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "decimal_digits", + "named": true + } + ] + } + }, + { + "type": "expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "assignment", + "named": true + }, + { + "type": "binding_list", + "named": true + }, + { + "type": "compound_expression", + "named": true + }, + { + "type": "control_statement", + "named": true + }, + { + "type": "deferred_expression", + "named": true + }, + { + "type": "for_loop", + "named": true + }, + { + "type": "if_expression", + "named": true + }, + { + "type": "logical_or_expression", + "named": true + }, + { + "type": "match_expression", + "named": true + }, + { + "type": "switch_expression", + "named": true + } + ] + } + }, + { + "type": "expression_list", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "expression_list", + "named": true + } + ] + } + }, + { + "type": "field_access_expression", + "named": true, + "fields": { + "selector": { + "multiple": true, + "required": true, + "types": [ + { + "type": ".", + "named": false + }, + { + "type": "integer_constant", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "postfix_expression", + "named": true + } + ] + } + }, + { + "type": "field_value", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "name", + "named": true + }, + { + "type": "struct_literal", + "named": true + }, + { + "type": "type", + "named": true + } + ] + } + }, + { + "type": "field_values", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "field_value", + "named": true + }, + { + "type": "field_values", + "named": true + } + ] + } + }, + { + "type": "floating_constant", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "decimal_digits", + "named": true + }, + { + "type": "exponent", + "named": true + }, + { + "type": "floating_suffix", + "named": true + } + ] + } + }, + { + "type": "floating_suffix", + "named": true, + "fields": {} + }, + { + "type": "floating_type", + "named": true, + "fields": {} + }, + { + "type": "fndec_attr", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "decl_attr", + "named": true + }, + { + "type": "fntype_attr", + "named": true + } + ] + } + }, + { + "type": "fndec_attrs", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "fndec_attr", + "named": true + } + ] + } + }, + { + "type": "fntype_attr", + "named": true, + "fields": {} + }, + { + "type": "for_loop", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "for_predicate", + "named": true + }, + { + "type": "label", + "named": true + } + ] + } + }, + { + "type": "for_predicate", + "named": true, + "fields": { + "afterthought": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "binding": { + "multiple": false, + "required": false, + "types": [ + { + "type": "binding_list", + "named": true + } + ] + } + }, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "binding_list", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "function_declaration", + "named": true, + "fields": { + "body": { + "multiple": false, + "required": false, + "types": [ + { + "type": "expression", + "named": true + } + ] + }, + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + }, + "type": { + "multiple": false, + "required": true, + "types": [ + { + "type": "prototype", + "named": true + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "fndec_attrs", + "named": true + } + ] + } + }, + { + "type": "function_type", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "fntype_attr", + "named": true + }, + { + "type": "prototype", + "named": true + } + ] + } + }, + { + "type": "global_binding", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "decl_attr", + "named": true + }, + { + "type": "expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "type", + "named": true + } + ] + } + }, + { + "type": "global_bindings", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "global_binding", + "named": true + }, + { + "type": "global_bindings", + "named": true + } + ] + } + }, + { + "type": "global_declaration", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "global_bindings", + "named": true + } + ] + } + }, + { + "type": "hex_digit", + "named": true, + "fields": {} + }, + { + "type": "hex_digits", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "hex_digit", + "named": true + } + ] + } + }, + { + "type": "identifier", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + }, + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "if_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "conditional_branch", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "imports", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "use_statement", + "named": true + } + ] + } + }, + { + "type": "inclusive_or_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "exclusive_or_expression", + "named": true + }, + { + "type": "inclusive_or_expression", + "named": true + } + ] + } + }, + { + "type": "indexing_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "postfix_expression", + "named": true + } + ] + } + }, + { + "type": "integer_constant", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "binary_digits", + "named": true + }, + { + "type": "decimal_digits", + "named": true + }, + { + "type": "exponent", + "named": true + }, + { + "type": "hex_digits", + "named": true + }, + { + "type": "integer_suffix", + "named": true + }, + { + "type": "octal_digits", + "named": true + } + ] + } + }, + { + "type": "integer_suffix", + "named": true, + "fields": {} + }, + { + "type": "integer_type", + "named": true, + "fields": {} + }, + { + "type": "label", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "name", + "named": true + } + ] + } + }, + { + "type": "length_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "logical_and_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "equality_expression", + "named": true + }, + { + "type": "logical_and_expression", + "named": true + } + ] + } + }, + { + "type": "logical_or_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "logical_or_expression", + "named": true + }, + { + "type": "logical_xor_expression", + "named": true + } + ] + } + }, + { + "type": "logical_xor_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "logical_and_expression", + "named": true + }, + { + "type": "logical_xor_expression", + "named": true + } + ] + } + }, + { + "type": "match_case", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "name", + "named": true + }, + { + "type": "type", + "named": true + } + ] + } + }, + { + "type": "match_cases", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "match_case", + "named": true + }, + { + "type": "match_cases", + "named": true + } + ] + } + }, + { + "type": "match_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "match_cases", + "named": true + } + ] + } + }, + { + "type": "measurement_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "length_expression", + "named": true + }, + { + "type": "offset_expression", + "named": true + }, + { + "type": "size_expression", + "named": true + } + ] + } + }, + { + "type": "multiplicative_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "cast_expression", + "named": true + }, + { + "type": "multiplicative_expression", + "named": true + } + ] + } + }, + { + "type": "name_list", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "name", + "named": true + }, + { + "type": "name_list", + "named": true + } + ] + } + }, + { + "type": "named_escape", + "named": true, + "fields": {} + }, + { + "type": "nested_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "plain_expression", + "named": true + }, + { + "type": "tuple_items", + "named": true + } + ] + } + }, + { + "type": "object_selector", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "field_access_expression", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "indexing_expression", + "named": true + } + ] + } + }, + { + "type": "octal_digit", + "named": true, + "fields": {} + }, + { + "type": "octal_digits", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "octal_digit", + "named": true + } + ] + } + }, + { + "type": "offset_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "field_access_expression", + "named": true + } + ] + } + }, + { + "type": "offset_specifier", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "parameter", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "name", + "named": true + }, + { + "type": "type", + "named": true + } + ] + } + }, + { + "type": "parameter_list", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "parameters", + "named": true + } + ] + } + }, + { + "type": "parameters", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "parameter", + "named": true + }, + { + "type": "parameters", + "named": true + } + ] + } + }, + { + "type": "plain_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "array_literal", + "named": true + }, + { + "type": "constant", + "named": true + }, + { + "type": "enum_literal", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "struct_literal", + "named": true + } + ] + } + }, + { + "type": "pointer_type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "storage_class", + "named": true + } + ] + } + }, + { + "type": "postfix_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "allocation_expression", + "named": true + }, + { + "type": "assertion_expression", + "named": true + }, + { + "type": "call_expression", + "named": true + }, + { + "type": "error_propagation", + "named": true + }, + { + "type": "field_access_expression", + "named": true + }, + { + "type": "indexing_expression", + "named": true + }, + { + "type": "measurement_expression", + "named": true + }, + { + "type": "nested_expression", + "named": true + }, + { + "type": "slicing_expression", + "named": true + } + ] + } + }, + { + "type": "prototype", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "parameter_list", + "named": true + }, + { + "type": "storage_class", + "named": true + } + ] + } + }, + { + "type": "rune", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "escape_sequence", + "named": true + } + ] + } + }, + { + "type": "rune_constant", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "rune", + "named": true + } + ] + } + }, + { + "type": "scalar_type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "enum_type", + "named": true + }, + { + "type": "floating_type", + "named": true + }, + { + "type": "integer_type", + "named": true + }, + { + "type": "pointer_type", + "named": true + } + ] + } + }, + { + "type": "shift_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "additive_expression", + "named": true + }, + { + "type": "cast_expression", + "named": true + }, + { + "type": "multiplicative_expression", + "named": true + } + ] + } + }, + { + "type": "size_expression", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type", + "named": true + } + ] + } + }, + { + "type": "slice_array_type", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "logical_or_expression", + "named": true + }, + { + "type": "storage_class", + "named": true + } + ] + } + }, + { + "type": "slicing_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "postfix_expression", + "named": true + } + ] + } + }, + { + "type": "storage_class", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "alias_type", + "named": true + }, + { + "type": "function_type", + "named": true + }, + { + "type": "scalar_type", + "named": true + }, + { + "type": "slice_array_type", + "named": true + }, + { + "type": "struct_type", + "named": true + }, + { + "type": "tagged_union_type", + "named": true + }, + { + "type": "tuple_type", + "named": true + }, + { + "type": "union_type", + "named": true + }, + { + "type": "unwrapped_alias", + "named": true + } + ] + } + }, + { + "type": "string_char", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "escape_sequence", + "named": true + } + ] + } + }, + { + "type": "string_chars", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "string_char", + "named": true + } + ] + } + }, + { + "type": "string_constant", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "string_chars", + "named": true + } + ] + } + }, + { + "type": "struct_initializer", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "field_values", + "named": true + } + ] + } + }, + { + "type": "struct_literal", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "field_values", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "struct_initializer", + "named": true + } + ] + } + }, + { + "type": "struct_type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "struct_union_fields", + "named": true + } + ] + } + }, + { + "type": "struct_union_field", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + }, + { + "type": "name", + "named": true + }, + { + "type": "offset_specifier", + "named": true + }, + { + "type": "struct_type", + "named": true + }, + { + "type": "type", + "named": true + }, + { + "type": "union_type", + "named": true + } + ] + } + }, + { + "type": "struct_union_fields", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "struct_union_field", + "named": true + }, + { + "type": "struct_union_fields", + "named": true + } + ] + } + }, + { + "type": "switch_case", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "case_options", + "named": true + }, + { + "type": "expression", + "named": true + } + ] + } + }, + { + "type": "switch_cases", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "switch_case", + "named": true + }, + { + "type": "switch_cases", + "named": true + } + ] + } + }, + { + "type": "switch_expression", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "switch_cases", + "named": true + } + ] + } + }, + { + "type": "tagged_types", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "type", + "named": true + } + ] + } + }, + { + "type": "tagged_union_type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "tagged_types", + "named": true + } + ] + } + }, + { + "type": "tuple_items", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "expression", + "named": true + }, + { + "type": "tuple_items", + "named": true + } + ] + } + }, + { + "type": "tuple_type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "tuple_types", + "named": true + } + ] + } + }, + { + "type": "tuple_types", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "tuple_types", + "named": true + }, + { + "type": "type", + "named": true + } + ] + } + }, + { + "type": "type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "storage_class", + "named": true + } + ] + } + }, + { + "type": "type_bindings", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + }, + { + "type": "type", + "named": true + }, + { + "type": "type_bindings", + "named": true + } + ] + } + }, + { + "type": "type_declaration", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "type_bindings", + "named": true + } + ] + } + }, + { + "type": "unary_expression", + "named": true, + "fields": { + "address": { + "multiple": false, + "required": false, + "types": [ + { + "type": "&", + "named": false + } + ] + }, + "argument": { + "multiple": false, + "required": false, + "types": [ + { + "type": "object_selector", + "named": true + }, + { + "type": "unary_expression", + "named": true + } + ] + }, + "operator": { + "multiple": false, + "required": false, + "types": [ + { + "type": "!", + "named": false + }, + { + "type": "*", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "~", + "named": false + } + ] + } + }, + "children": { + "multiple": false, + "required": false, + "types": [ + { + "type": "postfix_expression", + "named": true + } + ] + } + }, + { + "type": "union_type", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "struct_union_fields", + "named": true + } + ] + } + }, + { + "type": "unit", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "declarations", + "named": true + }, + { + "type": "imports", + "named": true + } + ] + } + }, + { + "type": "unwrapped_alias", + "named": true, + "fields": {}, + "children": { + "multiple": false, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + } + ] + } + }, + { + "type": "use_statement", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": true, + "types": [ + { + "type": "identifier", + "named": true + }, + { + "type": "name", + "named": true + }, + { + "type": "name_list", + "named": true + } + ] + } + }, + { + "type": "!", + "named": false + }, + { + "type": "!=", + "named": false + }, + { + "type": "\"", + "named": false + }, + { + "type": "%", + "named": false + }, + { + "type": "%=", + "named": false + }, + { + "type": "&", + "named": false + }, + { + "type": "&&", + "named": false + }, + { + "type": "&=", + "named": false + }, + { + "type": "'", + "named": false + }, + { + "type": "(", + "named": false + }, + { + "type": ")", + "named": false + }, + { + "type": "*", + "named": false + }, + { + "type": "*=", + "named": false + }, + { + "type": "+", + "named": false + }, + { + "type": "+=", + "named": false + }, + { + "type": ",", + "named": false + }, + { + "type": "-", + "named": false + }, + { + "type": "-=", + "named": false + }, + { + "type": ".", + "named": false + }, + { + "type": "..", + "named": false + }, + { + "type": "...", + "named": false + }, + { + "type": "/", + "named": false + }, + { + "type": "/=", + "named": false + }, + { + "type": "0", + "named": false + }, + { + "type": "0b", + "named": false + }, + { + "type": "0o", + "named": false + }, + { + "type": "0x", + "named": false + }, + { + "type": "1", + "named": false + }, + { + "type": "2", + "named": false + }, + { + "type": "3", + "named": false + }, + { + "type": "4", + "named": false + }, + { + "type": "5", + "named": false + }, + { + "type": "6", + "named": false + }, + { + "type": "7", + "named": false + }, + { + "type": "8", + "named": false + }, + { + "type": "9", + "named": false + }, + { + "type": ":", + "named": false + }, + { + "type": "::", + "named": false + }, + { + "type": ";", + "named": false + }, + { + "type": "<", + "named": false + }, + { + "type": "<<", + "named": false + }, + { + "type": "<<=", + "named": false + }, + { + "type": "<=", + "named": false + }, + { + "type": "=", + "named": false + }, + { + "type": "==", + "named": false + }, + { + "type": "=>", + "named": false + }, + { + "type": ">", + "named": false + }, + { + "type": ">=", + "named": false + }, + { + "type": ">>", + "named": false + }, + { + "type": ">>=", + "named": false + }, + { + "type": "?", + "named": false + }, + { + "type": "@fini", + "named": false + }, + { + "type": "@init", + "named": false + }, + { + "type": "@noreturn", + "named": false + }, + { + "type": "@offset", + "named": false + }, + { + "type": "@symbol", + "named": false + }, + { + "type": "@test", + "named": false + }, + { + "type": "A", + "named": false + }, + { + "type": "B", + "named": false + }, + { + "type": "C", + "named": false + }, + { + "type": "D", + "named": false + }, + { + "type": "E", + "named": false + }, + { + "type": "F", + "named": false + }, + { + "type": "[", + "named": false + }, + { + "type": "\\", + "named": false + }, + { + "type": "]", + "named": false + }, + { + "type": "^", + "named": false + }, + { + "type": "^=", + "named": false + }, + { + "type": "^^", + "named": false + }, + { + "type": "_", + "named": false + }, + { + "type": "a", + "named": false + }, + { + "type": "abort", + "named": false + }, + { + "type": "alloc", + "named": false + }, + { + "type": "append", + "named": false + }, + { + "type": "as", + "named": false + }, + { + "type": "assert", + "named": false + }, + { + "type": "b", + "named": false + }, + { + "type": "bool", + "named": false + }, + { + "type": "break", + "named": false + }, + { + "type": "c", + "named": false + }, + { + "type": "char", + "named": false + }, + { + "type": "comment", + "named": true + }, + { + "type": "const", + "named": false + }, + { + "type": "continue", + "named": false + }, + { + "type": "d", + "named": false + }, + { + "type": "def", + "named": false + }, + { + "type": "defer", + "named": false + }, + { + "type": "delete", + "named": false + }, + { + "type": "e", + "named": false + }, + { + "type": "else", + "named": false + }, + { + "type": "enum", + "named": false + }, + { + "type": "export", + "named": false + }, + { + "type": "f", + "named": false + }, + { + "type": "f32", + "named": false + }, + { + "type": "f64", + "named": false + }, + { + "type": "false", + "named": false + }, + { + "type": "fn", + "named": false + }, + { + "type": "for", + "named": false + }, + { + "type": "free", + "named": false + }, + { + "type": "i", + "named": false + }, + { + "type": "i16", + "named": false + }, + { + "type": "i32", + "named": false + }, + { + "type": "i64", + "named": false + }, + { + "type": "i8", + "named": false + }, + { + "type": "if", + "named": false + }, + { + "type": "int", + "named": false + }, + { + "type": "is", + "named": false + }, + { + "type": "len", + "named": false + }, + { + "type": "let", + "named": false + }, + { + "type": "match", + "named": false + }, + { + "type": "name", + "named": true + }, + { + "type": "null", + "named": false + }, + { + "type": "nullable", + "named": false + }, + { + "type": "offset", + "named": false + }, + { + "type": "return", + "named": false + }, + { + "type": "rune", + "named": false + }, + { + "type": "size", + "named": false + }, + { + "type": "static", + "named": false + }, + { + "type": "str", + "named": false + }, + { + "type": "struct", + "named": false + }, + { + "type": "switch", + "named": false + }, + { + "type": "true", + "named": false + }, + { + "type": "type", + "named": false + }, + { + "type": "u", + "named": false + }, + { + "type": "u16", + "named": false + }, + { + "type": "u32", + "named": false + }, + { + "type": "u64", + "named": false + }, + { + "type": "u8", + "named": false + }, + { + "type": "uint", + "named": false + }, + { + "type": "uintptr", + "named": false + }, + { + "type": "union", + "named": false + }, + { + "type": "use", + "named": false + }, + { + "type": "void", + "named": false + }, + { + "type": "z", + "named": false + }, + { + "type": "{", + "named": false + }, + { + "type": "|", + "named": false + }, + { + "type": "|=", + "named": false + }, + { + "type": "||", + "named": false + }, + { + "type": "}", + "named": false + }, + { + "type": "~", + "named": false + } +] \ No newline at end of file diff --git a/vendor/tree-sitter-hare/src/parser.c b/vendor/tree-sitter-hare/src/parser.c new file mode 100644 index 000000000..c44ff50e4 --- /dev/null +++ b/vendor/tree-sitter-hare/src/parser.c @@ -0,0 +1,38099 @@ +#include + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + +#ifdef _MSC_VER +#pragma optimize("", off) +#elif defined(__clang__) +#pragma clang optimize off +#elif defined(__GNUC__) +#pragma GCC optimize ("O0") +#endif + +#define LANGUAGE_VERSION 13 +#define STATE_COUNT 822 +#define LARGE_STATE_COUNT 140 +#define SYMBOL_COUNT 284 +#define ALIAS_COUNT 0 +#define TOKEN_COUNT 145 +#define EXTERNAL_TOKEN_COUNT 0 +#define FIELD_COUNT 12 +#define MAX_ALIAS_SEQUENCE_LENGTH 7 +#define PRODUCTION_ID_COUNT 13 + +enum { + anon_sym_use = 1, + anon_sym_SEMI = 2, + anon_sym_EQ = 3, + anon_sym_COLON_COLON = 4, + anon_sym_LBRACE = 5, + anon_sym_RBRACE = 6, + anon_sym_COMMA = 7, + anon_sym_export = 8, + anon_sym_let = 9, + anon_sym_const = 10, + anon_sym_COLON = 11, + anon_sym_ATsymbol = 12, + anon_sym_LPAREN = 13, + anon_sym_RPAREN = 14, + anon_sym_def = 15, + anon_sym_type = 16, + anon_sym_fn = 17, + anon_sym_ATfini = 18, + anon_sym_ATinit = 19, + anon_sym_ATtest = 20, + anon_sym_ATnoreturn = 21, + anon_sym_BANG = 22, + anon_sym_rune = 23, + anon_sym_str = 24, + anon_sym_bool = 25, + anon_sym_void = 26, + anon_sym_i8 = 27, + anon_sym_i16 = 28, + anon_sym_i32 = 29, + anon_sym_i64 = 30, + anon_sym_u8 = 31, + anon_sym_u16 = 32, + anon_sym_u32 = 33, + anon_sym_u64 = 34, + anon_sym_int = 35, + anon_sym_uint = 36, + anon_sym_size = 37, + anon_sym_uintptr = 38, + anon_sym_char = 39, + anon_sym_f32 = 40, + anon_sym_f64 = 41, + anon_sym_enum = 42, + anon_sym_STAR = 43, + anon_sym_nullable = 44, + anon_sym_struct = 45, + anon_sym_union = 46, + anon_sym_AToffset = 47, + anon_sym_PIPE = 48, + anon_sym_LBRACK = 49, + anon_sym_RBRACK = 50, + anon_sym__ = 51, + anon_sym_DOT_DOT_DOT = 52, + anon_sym_true = 53, + anon_sym_false = 54, + anon_sym_null = 55, + anon_sym_0x = 56, + anon_sym_0o = 57, + anon_sym_0b = 58, + anon_sym_0 = 59, + anon_sym_1 = 60, + anon_sym_2 = 61, + anon_sym_3 = 62, + anon_sym_4 = 63, + anon_sym_5 = 64, + anon_sym_6 = 65, + anon_sym_7 = 66, + anon_sym_8 = 67, + anon_sym_9 = 68, + anon_sym_A = 69, + anon_sym_B = 70, + anon_sym_C = 71, + anon_sym_D = 72, + anon_sym_E = 73, + anon_sym_F = 74, + anon_sym_a = 75, + anon_sym_b = 76, + anon_sym_c = 77, + anon_sym_d = 78, + anon_sym_e = 79, + anon_sym_f = 80, + anon_sym_i = 81, + anon_sym_u = 82, + anon_sym_z = 83, + anon_sym_DOT = 84, + anon_sym_SQUOTE = 85, + aux_sym_rune_token1 = 86, + anon_sym_BSLASH = 87, + aux_sym_escape_sequence_token1 = 88, + aux_sym_named_escape_token1 = 89, + anon_sym_DQUOTE = 90, + aux_sym_string_char_token1 = 91, + anon_sym_alloc = 92, + anon_sym_append = 93, + anon_sym_free = 94, + anon_sym_delete = 95, + anon_sym_assert = 96, + anon_sym_static = 97, + anon_sym_abort = 98, + anon_sym_len = 99, + anon_sym_offset = 100, + anon_sym_DOT_DOT = 101, + anon_sym_QMARK = 102, + anon_sym_PLUS = 103, + anon_sym_DASH = 104, + anon_sym_TILDE = 105, + anon_sym_AMP = 106, + anon_sym_as = 107, + anon_sym_is = 108, + anon_sym_SLASH = 109, + anon_sym_PERCENT = 110, + anon_sym_LT_LT = 111, + anon_sym_GT_GT = 112, + anon_sym_CARET = 113, + anon_sym_LT = 114, + anon_sym_GT = 115, + anon_sym_LT_EQ = 116, + anon_sym_GT_EQ = 117, + anon_sym_EQ_EQ = 118, + anon_sym_BANG_EQ = 119, + anon_sym_AMP_AMP = 120, + anon_sym_CARET_CARET = 121, + anon_sym_PIPE_PIPE = 122, + anon_sym_if = 123, + anon_sym_else = 124, + anon_sym_for = 125, + anon_sym_switch = 126, + anon_sym_EQ_GT = 127, + anon_sym_match = 128, + anon_sym_PLUS_EQ = 129, + anon_sym_DASH_EQ = 130, + anon_sym_STAR_EQ = 131, + anon_sym_SLASH_EQ = 132, + anon_sym_PERCENT_EQ = 133, + anon_sym_LT_LT_EQ = 134, + anon_sym_GT_GT_EQ = 135, + anon_sym_AMP_EQ = 136, + anon_sym_PIPE_EQ = 137, + anon_sym_CARET_EQ = 138, + anon_sym_defer = 139, + anon_sym_break = 140, + anon_sym_continue = 141, + anon_sym_return = 142, + sym_name = 143, + sym_comment = 144, + sym_unit = 145, + sym_imports = 146, + sym_use_statement = 147, + sym_name_list = 148, + sym_declarations = 149, + sym_declaration = 150, + sym_global_declaration = 151, + sym_global_bindings = 152, + sym_global_binding = 153, + sym_decl_attr = 154, + sym_constant_declaration = 155, + sym_constant_bindings = 156, + sym_constant_binding = 157, + sym_type_declaration = 158, + sym_type_bindings = 159, + sym_function_declaration = 160, + sym_fndec_attrs = 161, + sym_fndec_attr = 162, + sym_fntype_attr = 163, + sym_type = 164, + sym__inner_type = 165, + sym_storage_class = 166, + sym_scalar_type = 167, + sym_integer_type = 168, + sym_floating_type = 169, + sym_enum_type = 170, + sym_enum_values = 171, + sym_enum_value = 172, + sym_pointer_type = 173, + sym_struct_type = 174, + sym_union_type = 175, + sym_struct_union_fields = 176, + sym_struct_union_field = 177, + sym_offset_specifier = 178, + sym_tuple_type = 179, + sym_tuple_types = 180, + sym_tagged_union_type = 181, + sym_tagged_types = 182, + sym_slice_array_type = 183, + sym_function_type = 184, + sym_prototype = 185, + sym_parameter_list = 186, + sym_parameters = 187, + sym_parameter = 188, + sym_alias_type = 189, + sym_unwrapped_alias = 190, + sym_constant = 191, + sym_integer_constant = 192, + sym_hex_digits = 193, + sym_hex_digit = 194, + sym_octal_digits = 195, + sym_octal_digit = 196, + sym_binary_digits = 197, + sym_binary_digit = 198, + sym_decimal_digits = 199, + sym_decimal_digit = 200, + sym_integer_suffix = 201, + sym_floating_constant = 202, + sym_exponent = 203, + sym_floating_suffix = 204, + sym_rune_constant = 205, + sym_rune = 206, + sym_escape_sequence = 207, + sym_named_escape = 208, + sym_string_constant = 209, + sym_string_chars = 210, + sym_string_char = 211, + sym_array_literal = 212, + sym_array_members = 213, + sym_enum_literal = 214, + sym_struct_literal = 215, + sym_struct_initializer = 216, + sym_field_values = 217, + sym_field_value = 218, + sym_plain_expression = 219, + sym_nested_expression = 220, + sym_tuple_items = 221, + sym_allocation_expression = 222, + sym_append_values = 223, + sym_assertion_expression = 224, + sym_call_expression = 225, + sym_argument_list = 226, + sym_measurement_expression = 227, + sym_size_expression = 228, + sym_length_expression = 229, + sym_offset_expression = 230, + sym_field_access_expression = 231, + sym_indexing_expression = 232, + sym_slicing_expression = 233, + sym_error_propagation = 234, + sym_postfix_expression = 235, + sym_object_selector = 236, + sym_unary_expression = 237, + sym_cast_expression = 238, + sym_multiplicative_expression = 239, + sym_additive_expression = 240, + sym_shift_expression = 241, + sym_and_expression = 242, + sym_exclusive_or_expression = 243, + sym_inclusive_or_expression = 244, + sym_comparison_expression = 245, + sym_equality_expression = 246, + sym_logical_and_expression = 247, + sym_logical_xor_expression = 248, + sym_logical_or_expression = 249, + sym_if_expression = 250, + sym_conditional_branch = 251, + sym_for_loop = 252, + sym_for_predicate = 253, + sym_label = 254, + sym_switch_expression = 255, + sym_switch_cases = 256, + sym_switch_case = 257, + sym_case_options = 258, + sym_match_expression = 259, + sym_match_cases = 260, + sym_match_case = 261, + sym_assignment = 262, + sym_assignment_op = 263, + sym_binding_list = 264, + sym_bindings = 265, + sym_binding = 266, + sym_binding_names = 267, + sym_deferred_expression = 268, + sym_expression_list = 269, + sym_control_statement = 270, + sym_expression = 271, + sym_compound_expression = 272, + sym_identifier = 273, + aux_sym_imports_repeat1 = 274, + aux_sym_declarations_repeat1 = 275, + aux_sym_fndec_attrs_repeat1 = 276, + aux_sym_tagged_types_repeat1 = 277, + aux_sym_hex_digits_repeat1 = 278, + aux_sym_octal_digits_repeat1 = 279, + aux_sym_binary_digits_repeat1 = 280, + aux_sym_decimal_digits_repeat1 = 281, + aux_sym_string_constant_repeat1 = 282, + aux_sym_string_chars_repeat1 = 283, +}; + +static const char *ts_symbol_names[] = { + [ts_builtin_sym_end] = "end", + [anon_sym_use] = "use", + [anon_sym_SEMI] = ";", + [anon_sym_EQ] = "=", + [anon_sym_COLON_COLON] = "::", + [anon_sym_LBRACE] = "{", + [anon_sym_RBRACE] = "}", + [anon_sym_COMMA] = ",", + [anon_sym_export] = "export", + [anon_sym_let] = "let", + [anon_sym_const] = "const", + [anon_sym_COLON] = ":", + [anon_sym_ATsymbol] = "@symbol", + [anon_sym_LPAREN] = "(", + [anon_sym_RPAREN] = ")", + [anon_sym_def] = "def", + [anon_sym_type] = "type", + [anon_sym_fn] = "fn", + [anon_sym_ATfini] = "@fini", + [anon_sym_ATinit] = "@init", + [anon_sym_ATtest] = "@test", + [anon_sym_ATnoreturn] = "@noreturn", + [anon_sym_BANG] = "!", + [anon_sym_rune] = "rune", + [anon_sym_str] = "str", + [anon_sym_bool] = "bool", + [anon_sym_void] = "void", + [anon_sym_i8] = "i8", + [anon_sym_i16] = "i16", + [anon_sym_i32] = "i32", + [anon_sym_i64] = "i64", + [anon_sym_u8] = "u8", + [anon_sym_u16] = "u16", + [anon_sym_u32] = "u32", + [anon_sym_u64] = "u64", + [anon_sym_int] = "int", + [anon_sym_uint] = "uint", + [anon_sym_size] = "size", + [anon_sym_uintptr] = "uintptr", + [anon_sym_char] = "char", + [anon_sym_f32] = "f32", + [anon_sym_f64] = "f64", + [anon_sym_enum] = "enum", + [anon_sym_STAR] = "*", + [anon_sym_nullable] = "nullable", + [anon_sym_struct] = "struct", + [anon_sym_union] = "union", + [anon_sym_AToffset] = "@offset", + [anon_sym_PIPE] = "|", + [anon_sym_LBRACK] = "[", + [anon_sym_RBRACK] = "]", + [anon_sym__] = "_", + [anon_sym_DOT_DOT_DOT] = "...", + [anon_sym_true] = "true", + [anon_sym_false] = "false", + [anon_sym_null] = "null", + [anon_sym_0x] = "0x", + [anon_sym_0o] = "0o", + [anon_sym_0b] = "0b", + [anon_sym_0] = "0", + [anon_sym_1] = "1", + [anon_sym_2] = "2", + [anon_sym_3] = "3", + [anon_sym_4] = "4", + [anon_sym_5] = "5", + [anon_sym_6] = "6", + [anon_sym_7] = "7", + [anon_sym_8] = "8", + [anon_sym_9] = "9", + [anon_sym_A] = "A", + [anon_sym_B] = "B", + [anon_sym_C] = "C", + [anon_sym_D] = "D", + [anon_sym_E] = "E", + [anon_sym_F] = "F", + [anon_sym_a] = "a", + [anon_sym_b] = "b", + [anon_sym_c] = "c", + [anon_sym_d] = "d", + [anon_sym_e] = "e", + [anon_sym_f] = "f", + [anon_sym_i] = "i", + [anon_sym_u] = "u", + [anon_sym_z] = "z", + [anon_sym_DOT] = ".", + [anon_sym_SQUOTE] = "'", + [aux_sym_rune_token1] = "rune_token1", + [anon_sym_BSLASH] = "\\", + [aux_sym_escape_sequence_token1] = "escape_sequence_token1", + [aux_sym_named_escape_token1] = "named_escape_token1", + [anon_sym_DQUOTE] = "\"", + [aux_sym_string_char_token1] = "string_char_token1", + [anon_sym_alloc] = "alloc", + [anon_sym_append] = "append", + [anon_sym_free] = "free", + [anon_sym_delete] = "delete", + [anon_sym_assert] = "assert", + [anon_sym_static] = "static", + [anon_sym_abort] = "abort", + [anon_sym_len] = "len", + [anon_sym_offset] = "offset", + [anon_sym_DOT_DOT] = "..", + [anon_sym_QMARK] = "\?", + [anon_sym_PLUS] = "+", + [anon_sym_DASH] = "-", + [anon_sym_TILDE] = "~", + [anon_sym_AMP] = "&", + [anon_sym_as] = "as", + [anon_sym_is] = "is", + [anon_sym_SLASH] = "/", + [anon_sym_PERCENT] = "%", + [anon_sym_LT_LT] = "<<", + [anon_sym_GT_GT] = ">>", + [anon_sym_CARET] = "^", + [anon_sym_LT] = "<", + [anon_sym_GT] = ">", + [anon_sym_LT_EQ] = "<=", + [anon_sym_GT_EQ] = ">=", + [anon_sym_EQ_EQ] = "==", + [anon_sym_BANG_EQ] = "!=", + [anon_sym_AMP_AMP] = "&&", + [anon_sym_CARET_CARET] = "^^", + [anon_sym_PIPE_PIPE] = "||", + [anon_sym_if] = "if", + [anon_sym_else] = "else", + [anon_sym_for] = "for", + [anon_sym_switch] = "switch", + [anon_sym_EQ_GT] = "=>", + [anon_sym_match] = "match", + [anon_sym_PLUS_EQ] = "+=", + [anon_sym_DASH_EQ] = "-=", + [anon_sym_STAR_EQ] = "*=", + [anon_sym_SLASH_EQ] = "/=", + [anon_sym_PERCENT_EQ] = "%=", + [anon_sym_LT_LT_EQ] = "<<=", + [anon_sym_GT_GT_EQ] = ">>=", + [anon_sym_AMP_EQ] = "&=", + [anon_sym_PIPE_EQ] = "|=", + [anon_sym_CARET_EQ] = "^=", + [anon_sym_defer] = "defer", + [anon_sym_break] = "break", + [anon_sym_continue] = "continue", + [anon_sym_return] = "return", + [sym_name] = "name", + [sym_comment] = "comment", + [sym_unit] = "unit", + [sym_imports] = "imports", + [sym_use_statement] = "use_statement", + [sym_name_list] = "name_list", + [sym_declarations] = "declarations", + [sym_declaration] = "declaration", + [sym_global_declaration] = "global_declaration", + [sym_global_bindings] = "global_bindings", + [sym_global_binding] = "global_binding", + [sym_decl_attr] = "decl_attr", + [sym_constant_declaration] = "constant_declaration", + [sym_constant_bindings] = "constant_bindings", + [sym_constant_binding] = "constant_binding", + [sym_type_declaration] = "type_declaration", + [sym_type_bindings] = "type_bindings", + [sym_function_declaration] = "function_declaration", + [sym_fndec_attrs] = "fndec_attrs", + [sym_fndec_attr] = "fndec_attr", + [sym_fntype_attr] = "fntype_attr", + [sym_type] = "type", + [sym__inner_type] = "_inner_type", + [sym_storage_class] = "storage_class", + [sym_scalar_type] = "scalar_type", + [sym_integer_type] = "integer_type", + [sym_floating_type] = "floating_type", + [sym_enum_type] = "enum_type", + [sym_enum_values] = "enum_values", + [sym_enum_value] = "enum_value", + [sym_pointer_type] = "pointer_type", + [sym_struct_type] = "struct_type", + [sym_union_type] = "union_type", + [sym_struct_union_fields] = "struct_union_fields", + [sym_struct_union_field] = "struct_union_field", + [sym_offset_specifier] = "offset_specifier", + [sym_tuple_type] = "tuple_type", + [sym_tuple_types] = "tuple_types", + [sym_tagged_union_type] = "tagged_union_type", + [sym_tagged_types] = "tagged_types", + [sym_slice_array_type] = "slice_array_type", + [sym_function_type] = "function_type", + [sym_prototype] = "prototype", + [sym_parameter_list] = "parameter_list", + [sym_parameters] = "parameters", + [sym_parameter] = "parameter", + [sym_alias_type] = "alias_type", + [sym_unwrapped_alias] = "unwrapped_alias", + [sym_constant] = "constant", + [sym_integer_constant] = "integer_constant", + [sym_hex_digits] = "hex_digits", + [sym_hex_digit] = "hex_digit", + [sym_octal_digits] = "octal_digits", + [sym_octal_digit] = "octal_digit", + [sym_binary_digits] = "binary_digits", + [sym_binary_digit] = "binary_digit", + [sym_decimal_digits] = "decimal_digits", + [sym_decimal_digit] = "decimal_digit", + [sym_integer_suffix] = "integer_suffix", + [sym_floating_constant] = "floating_constant", + [sym_exponent] = "exponent", + [sym_floating_suffix] = "floating_suffix", + [sym_rune_constant] = "rune_constant", + [sym_rune] = "rune", + [sym_escape_sequence] = "escape_sequence", + [sym_named_escape] = "named_escape", + [sym_string_constant] = "string_constant", + [sym_string_chars] = "string_chars", + [sym_string_char] = "string_char", + [sym_array_literal] = "array_literal", + [sym_array_members] = "array_members", + [sym_enum_literal] = "enum_literal", + [sym_struct_literal] = "struct_literal", + [sym_struct_initializer] = "struct_initializer", + [sym_field_values] = "field_values", + [sym_field_value] = "field_value", + [sym_plain_expression] = "plain_expression", + [sym_nested_expression] = "nested_expression", + [sym_tuple_items] = "tuple_items", + [sym_allocation_expression] = "allocation_expression", + [sym_append_values] = "append_values", + [sym_assertion_expression] = "assertion_expression", + [sym_call_expression] = "call_expression", + [sym_argument_list] = "argument_list", + [sym_measurement_expression] = "measurement_expression", + [sym_size_expression] = "size_expression", + [sym_length_expression] = "length_expression", + [sym_offset_expression] = "offset_expression", + [sym_field_access_expression] = "field_access_expression", + [sym_indexing_expression] = "indexing_expression", + [sym_slicing_expression] = "slicing_expression", + [sym_error_propagation] = "error_propagation", + [sym_postfix_expression] = "postfix_expression", + [sym_object_selector] = "object_selector", + [sym_unary_expression] = "unary_expression", + [sym_cast_expression] = "cast_expression", + [sym_multiplicative_expression] = "multiplicative_expression", + [sym_additive_expression] = "additive_expression", + [sym_shift_expression] = "shift_expression", + [sym_and_expression] = "and_expression", + [sym_exclusive_or_expression] = "exclusive_or_expression", + [sym_inclusive_or_expression] = "inclusive_or_expression", + [sym_comparison_expression] = "comparison_expression", + [sym_equality_expression] = "equality_expression", + [sym_logical_and_expression] = "logical_and_expression", + [sym_logical_xor_expression] = "logical_xor_expression", + [sym_logical_or_expression] = "logical_or_expression", + [sym_if_expression] = "if_expression", + [sym_conditional_branch] = "conditional_branch", + [sym_for_loop] = "for_loop", + [sym_for_predicate] = "for_predicate", + [sym_label] = "label", + [sym_switch_expression] = "switch_expression", + [sym_switch_cases] = "switch_cases", + [sym_switch_case] = "switch_case", + [sym_case_options] = "case_options", + [sym_match_expression] = "match_expression", + [sym_match_cases] = "match_cases", + [sym_match_case] = "match_case", + [sym_assignment] = "assignment", + [sym_assignment_op] = "assignment_op", + [sym_binding_list] = "binding_list", + [sym_bindings] = "bindings", + [sym_binding] = "binding", + [sym_binding_names] = "binding_names", + [sym_deferred_expression] = "deferred_expression", + [sym_expression_list] = "expression_list", + [sym_control_statement] = "control_statement", + [sym_expression] = "expression", + [sym_compound_expression] = "compound_expression", + [sym_identifier] = "identifier", + [aux_sym_imports_repeat1] = "imports_repeat1", + [aux_sym_declarations_repeat1] = "declarations_repeat1", + [aux_sym_fndec_attrs_repeat1] = "fndec_attrs_repeat1", + [aux_sym_tagged_types_repeat1] = "tagged_types_repeat1", + [aux_sym_hex_digits_repeat1] = "hex_digits_repeat1", + [aux_sym_octal_digits_repeat1] = "octal_digits_repeat1", + [aux_sym_binary_digits_repeat1] = "binary_digits_repeat1", + [aux_sym_decimal_digits_repeat1] = "decimal_digits_repeat1", + [aux_sym_string_constant_repeat1] = "string_constant_repeat1", + [aux_sym_string_chars_repeat1] = "string_chars_repeat1", +}; + +static TSSymbol ts_symbol_map[] = { + [ts_builtin_sym_end] = ts_builtin_sym_end, + [anon_sym_use] = anon_sym_use, + [anon_sym_SEMI] = anon_sym_SEMI, + [anon_sym_EQ] = anon_sym_EQ, + [anon_sym_COLON_COLON] = anon_sym_COLON_COLON, + [anon_sym_LBRACE] = anon_sym_LBRACE, + [anon_sym_RBRACE] = anon_sym_RBRACE, + [anon_sym_COMMA] = anon_sym_COMMA, + [anon_sym_export] = anon_sym_export, + [anon_sym_let] = anon_sym_let, + [anon_sym_const] = anon_sym_const, + [anon_sym_COLON] = anon_sym_COLON, + [anon_sym_ATsymbol] = anon_sym_ATsymbol, + [anon_sym_LPAREN] = anon_sym_LPAREN, + [anon_sym_RPAREN] = anon_sym_RPAREN, + [anon_sym_def] = anon_sym_def, + [anon_sym_type] = anon_sym_type, + [anon_sym_fn] = anon_sym_fn, + [anon_sym_ATfini] = anon_sym_ATfini, + [anon_sym_ATinit] = anon_sym_ATinit, + [anon_sym_ATtest] = anon_sym_ATtest, + [anon_sym_ATnoreturn] = anon_sym_ATnoreturn, + [anon_sym_BANG] = anon_sym_BANG, + [anon_sym_rune] = anon_sym_rune, + [anon_sym_str] = anon_sym_str, + [anon_sym_bool] = anon_sym_bool, + [anon_sym_void] = anon_sym_void, + [anon_sym_i8] = anon_sym_i8, + [anon_sym_i16] = anon_sym_i16, + [anon_sym_i32] = anon_sym_i32, + [anon_sym_i64] = anon_sym_i64, + [anon_sym_u8] = anon_sym_u8, + [anon_sym_u16] = anon_sym_u16, + [anon_sym_u32] = anon_sym_u32, + [anon_sym_u64] = anon_sym_u64, + [anon_sym_int] = anon_sym_int, + [anon_sym_uint] = anon_sym_uint, + [anon_sym_size] = anon_sym_size, + [anon_sym_uintptr] = anon_sym_uintptr, + [anon_sym_char] = anon_sym_char, + [anon_sym_f32] = anon_sym_f32, + [anon_sym_f64] = anon_sym_f64, + [anon_sym_enum] = anon_sym_enum, + [anon_sym_STAR] = anon_sym_STAR, + [anon_sym_nullable] = anon_sym_nullable, + [anon_sym_struct] = anon_sym_struct, + [anon_sym_union] = anon_sym_union, + [anon_sym_AToffset] = anon_sym_AToffset, + [anon_sym_PIPE] = anon_sym_PIPE, + [anon_sym_LBRACK] = anon_sym_LBRACK, + [anon_sym_RBRACK] = anon_sym_RBRACK, + [anon_sym__] = anon_sym__, + [anon_sym_DOT_DOT_DOT] = anon_sym_DOT_DOT_DOT, + [anon_sym_true] = anon_sym_true, + [anon_sym_false] = anon_sym_false, + [anon_sym_null] = anon_sym_null, + [anon_sym_0x] = anon_sym_0x, + [anon_sym_0o] = anon_sym_0o, + [anon_sym_0b] = anon_sym_0b, + [anon_sym_0] = anon_sym_0, + [anon_sym_1] = anon_sym_1, + [anon_sym_2] = anon_sym_2, + [anon_sym_3] = anon_sym_3, + [anon_sym_4] = anon_sym_4, + [anon_sym_5] = anon_sym_5, + [anon_sym_6] = anon_sym_6, + [anon_sym_7] = anon_sym_7, + [anon_sym_8] = anon_sym_8, + [anon_sym_9] = anon_sym_9, + [anon_sym_A] = anon_sym_A, + [anon_sym_B] = anon_sym_B, + [anon_sym_C] = anon_sym_C, + [anon_sym_D] = anon_sym_D, + [anon_sym_E] = anon_sym_E, + [anon_sym_F] = anon_sym_F, + [anon_sym_a] = anon_sym_a, + [anon_sym_b] = anon_sym_b, + [anon_sym_c] = anon_sym_c, + [anon_sym_d] = anon_sym_d, + [anon_sym_e] = anon_sym_e, + [anon_sym_f] = anon_sym_f, + [anon_sym_i] = anon_sym_i, + [anon_sym_u] = anon_sym_u, + [anon_sym_z] = anon_sym_z, + [anon_sym_DOT] = anon_sym_DOT, + [anon_sym_SQUOTE] = anon_sym_SQUOTE, + [aux_sym_rune_token1] = aux_sym_rune_token1, + [anon_sym_BSLASH] = anon_sym_BSLASH, + [aux_sym_escape_sequence_token1] = aux_sym_escape_sequence_token1, + [aux_sym_named_escape_token1] = aux_sym_named_escape_token1, + [anon_sym_DQUOTE] = anon_sym_DQUOTE, + [aux_sym_string_char_token1] = aux_sym_string_char_token1, + [anon_sym_alloc] = anon_sym_alloc, + [anon_sym_append] = anon_sym_append, + [anon_sym_free] = anon_sym_free, + [anon_sym_delete] = anon_sym_delete, + [anon_sym_assert] = anon_sym_assert, + [anon_sym_static] = anon_sym_static, + [anon_sym_abort] = anon_sym_abort, + [anon_sym_len] = anon_sym_len, + [anon_sym_offset] = anon_sym_offset, + [anon_sym_DOT_DOT] = anon_sym_DOT_DOT, + [anon_sym_QMARK] = anon_sym_QMARK, + [anon_sym_PLUS] = anon_sym_PLUS, + [anon_sym_DASH] = anon_sym_DASH, + [anon_sym_TILDE] = anon_sym_TILDE, + [anon_sym_AMP] = anon_sym_AMP, + [anon_sym_as] = anon_sym_as, + [anon_sym_is] = anon_sym_is, + [anon_sym_SLASH] = anon_sym_SLASH, + [anon_sym_PERCENT] = anon_sym_PERCENT, + [anon_sym_LT_LT] = anon_sym_LT_LT, + [anon_sym_GT_GT] = anon_sym_GT_GT, + [anon_sym_CARET] = anon_sym_CARET, + [anon_sym_LT] = anon_sym_LT, + [anon_sym_GT] = anon_sym_GT, + [anon_sym_LT_EQ] = anon_sym_LT_EQ, + [anon_sym_GT_EQ] = anon_sym_GT_EQ, + [anon_sym_EQ_EQ] = anon_sym_EQ_EQ, + [anon_sym_BANG_EQ] = anon_sym_BANG_EQ, + [anon_sym_AMP_AMP] = anon_sym_AMP_AMP, + [anon_sym_CARET_CARET] = anon_sym_CARET_CARET, + [anon_sym_PIPE_PIPE] = anon_sym_PIPE_PIPE, + [anon_sym_if] = anon_sym_if, + [anon_sym_else] = anon_sym_else, + [anon_sym_for] = anon_sym_for, + [anon_sym_switch] = anon_sym_switch, + [anon_sym_EQ_GT] = anon_sym_EQ_GT, + [anon_sym_match] = anon_sym_match, + [anon_sym_PLUS_EQ] = anon_sym_PLUS_EQ, + [anon_sym_DASH_EQ] = anon_sym_DASH_EQ, + [anon_sym_STAR_EQ] = anon_sym_STAR_EQ, + [anon_sym_SLASH_EQ] = anon_sym_SLASH_EQ, + [anon_sym_PERCENT_EQ] = anon_sym_PERCENT_EQ, + [anon_sym_LT_LT_EQ] = anon_sym_LT_LT_EQ, + [anon_sym_GT_GT_EQ] = anon_sym_GT_GT_EQ, + [anon_sym_AMP_EQ] = anon_sym_AMP_EQ, + [anon_sym_PIPE_EQ] = anon_sym_PIPE_EQ, + [anon_sym_CARET_EQ] = anon_sym_CARET_EQ, + [anon_sym_defer] = anon_sym_defer, + [anon_sym_break] = anon_sym_break, + [anon_sym_continue] = anon_sym_continue, + [anon_sym_return] = anon_sym_return, + [sym_name] = sym_name, + [sym_comment] = sym_comment, + [sym_unit] = sym_unit, + [sym_imports] = sym_imports, + [sym_use_statement] = sym_use_statement, + [sym_name_list] = sym_name_list, + [sym_declarations] = sym_declarations, + [sym_declaration] = sym_declaration, + [sym_global_declaration] = sym_global_declaration, + [sym_global_bindings] = sym_global_bindings, + [sym_global_binding] = sym_global_binding, + [sym_decl_attr] = sym_decl_attr, + [sym_constant_declaration] = sym_constant_declaration, + [sym_constant_bindings] = sym_constant_bindings, + [sym_constant_binding] = sym_constant_binding, + [sym_type_declaration] = sym_type_declaration, + [sym_type_bindings] = sym_type_bindings, + [sym_function_declaration] = sym_function_declaration, + [sym_fndec_attrs] = sym_fndec_attrs, + [sym_fndec_attr] = sym_fndec_attr, + [sym_fntype_attr] = sym_fntype_attr, + [sym_type] = sym_type, + [sym__inner_type] = sym__inner_type, + [sym_storage_class] = sym_storage_class, + [sym_scalar_type] = sym_scalar_type, + [sym_integer_type] = sym_integer_type, + [sym_floating_type] = sym_floating_type, + [sym_enum_type] = sym_enum_type, + [sym_enum_values] = sym_enum_values, + [sym_enum_value] = sym_enum_value, + [sym_pointer_type] = sym_pointer_type, + [sym_struct_type] = sym_struct_type, + [sym_union_type] = sym_union_type, + [sym_struct_union_fields] = sym_struct_union_fields, + [sym_struct_union_field] = sym_struct_union_field, + [sym_offset_specifier] = sym_offset_specifier, + [sym_tuple_type] = sym_tuple_type, + [sym_tuple_types] = sym_tuple_types, + [sym_tagged_union_type] = sym_tagged_union_type, + [sym_tagged_types] = sym_tagged_types, + [sym_slice_array_type] = sym_slice_array_type, + [sym_function_type] = sym_function_type, + [sym_prototype] = sym_prototype, + [sym_parameter_list] = sym_parameter_list, + [sym_parameters] = sym_parameters, + [sym_parameter] = sym_parameter, + [sym_alias_type] = sym_alias_type, + [sym_unwrapped_alias] = sym_unwrapped_alias, + [sym_constant] = sym_constant, + [sym_integer_constant] = sym_integer_constant, + [sym_hex_digits] = sym_hex_digits, + [sym_hex_digit] = sym_hex_digit, + [sym_octal_digits] = sym_octal_digits, + [sym_octal_digit] = sym_octal_digit, + [sym_binary_digits] = sym_binary_digits, + [sym_binary_digit] = sym_binary_digit, + [sym_decimal_digits] = sym_decimal_digits, + [sym_decimal_digit] = sym_decimal_digit, + [sym_integer_suffix] = sym_integer_suffix, + [sym_floating_constant] = sym_floating_constant, + [sym_exponent] = sym_exponent, + [sym_floating_suffix] = sym_floating_suffix, + [sym_rune_constant] = sym_rune_constant, + [sym_rune] = sym_rune, + [sym_escape_sequence] = sym_escape_sequence, + [sym_named_escape] = sym_named_escape, + [sym_string_constant] = sym_string_constant, + [sym_string_chars] = sym_string_chars, + [sym_string_char] = sym_string_char, + [sym_array_literal] = sym_array_literal, + [sym_array_members] = sym_array_members, + [sym_enum_literal] = sym_enum_literal, + [sym_struct_literal] = sym_struct_literal, + [sym_struct_initializer] = sym_struct_initializer, + [sym_field_values] = sym_field_values, + [sym_field_value] = sym_field_value, + [sym_plain_expression] = sym_plain_expression, + [sym_nested_expression] = sym_nested_expression, + [sym_tuple_items] = sym_tuple_items, + [sym_allocation_expression] = sym_allocation_expression, + [sym_append_values] = sym_append_values, + [sym_assertion_expression] = sym_assertion_expression, + [sym_call_expression] = sym_call_expression, + [sym_argument_list] = sym_argument_list, + [sym_measurement_expression] = sym_measurement_expression, + [sym_size_expression] = sym_size_expression, + [sym_length_expression] = sym_length_expression, + [sym_offset_expression] = sym_offset_expression, + [sym_field_access_expression] = sym_field_access_expression, + [sym_indexing_expression] = sym_indexing_expression, + [sym_slicing_expression] = sym_slicing_expression, + [sym_error_propagation] = sym_error_propagation, + [sym_postfix_expression] = sym_postfix_expression, + [sym_object_selector] = sym_object_selector, + [sym_unary_expression] = sym_unary_expression, + [sym_cast_expression] = sym_cast_expression, + [sym_multiplicative_expression] = sym_multiplicative_expression, + [sym_additive_expression] = sym_additive_expression, + [sym_shift_expression] = sym_shift_expression, + [sym_and_expression] = sym_and_expression, + [sym_exclusive_or_expression] = sym_exclusive_or_expression, + [sym_inclusive_or_expression] = sym_inclusive_or_expression, + [sym_comparison_expression] = sym_comparison_expression, + [sym_equality_expression] = sym_equality_expression, + [sym_logical_and_expression] = sym_logical_and_expression, + [sym_logical_xor_expression] = sym_logical_xor_expression, + [sym_logical_or_expression] = sym_logical_or_expression, + [sym_if_expression] = sym_if_expression, + [sym_conditional_branch] = sym_conditional_branch, + [sym_for_loop] = sym_for_loop, + [sym_for_predicate] = sym_for_predicate, + [sym_label] = sym_label, + [sym_switch_expression] = sym_switch_expression, + [sym_switch_cases] = sym_switch_cases, + [sym_switch_case] = sym_switch_case, + [sym_case_options] = sym_case_options, + [sym_match_expression] = sym_match_expression, + [sym_match_cases] = sym_match_cases, + [sym_match_case] = sym_match_case, + [sym_assignment] = sym_assignment, + [sym_assignment_op] = sym_assignment_op, + [sym_binding_list] = sym_binding_list, + [sym_bindings] = sym_bindings, + [sym_binding] = sym_binding, + [sym_binding_names] = sym_binding_names, + [sym_deferred_expression] = sym_deferred_expression, + [sym_expression_list] = sym_expression_list, + [sym_control_statement] = sym_control_statement, + [sym_expression] = sym_expression, + [sym_compound_expression] = sym_compound_expression, + [sym_identifier] = sym_identifier, + [aux_sym_imports_repeat1] = aux_sym_imports_repeat1, + [aux_sym_declarations_repeat1] = aux_sym_declarations_repeat1, + [aux_sym_fndec_attrs_repeat1] = aux_sym_fndec_attrs_repeat1, + [aux_sym_tagged_types_repeat1] = aux_sym_tagged_types_repeat1, + [aux_sym_hex_digits_repeat1] = aux_sym_hex_digits_repeat1, + [aux_sym_octal_digits_repeat1] = aux_sym_octal_digits_repeat1, + [aux_sym_binary_digits_repeat1] = aux_sym_binary_digits_repeat1, + [aux_sym_decimal_digits_repeat1] = aux_sym_decimal_digits_repeat1, + [aux_sym_string_constant_repeat1] = aux_sym_string_constant_repeat1, + [aux_sym_string_chars_repeat1] = aux_sym_string_chars_repeat1, +}; + +static const TSSymbolMetadata ts_symbol_metadata[] = { + [ts_builtin_sym_end] = { + .visible = false, + .named = true, + }, + [anon_sym_use] = { + .visible = true, + .named = false, + }, + [anon_sym_SEMI] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON_COLON] = { + .visible = true, + .named = false, + }, + [anon_sym_LBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_COMMA] = { + .visible = true, + .named = false, + }, + [anon_sym_export] = { + .visible = true, + .named = false, + }, + [anon_sym_let] = { + .visible = true, + .named = false, + }, + [anon_sym_const] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON] = { + .visible = true, + .named = false, + }, + [anon_sym_ATsymbol] = { + .visible = true, + .named = false, + }, + [anon_sym_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_def] = { + .visible = true, + .named = false, + }, + [anon_sym_type] = { + .visible = true, + .named = false, + }, + [anon_sym_fn] = { + .visible = true, + .named = false, + }, + [anon_sym_ATfini] = { + .visible = true, + .named = false, + }, + [anon_sym_ATinit] = { + .visible = true, + .named = false, + }, + [anon_sym_ATtest] = { + .visible = true, + .named = false, + }, + [anon_sym_ATnoreturn] = { + .visible = true, + .named = false, + }, + [anon_sym_BANG] = { + .visible = true, + .named = false, + }, + [anon_sym_rune] = { + .visible = true, + .named = false, + }, + [anon_sym_str] = { + .visible = true, + .named = false, + }, + [anon_sym_bool] = { + .visible = true, + .named = false, + }, + [anon_sym_void] = { + .visible = true, + .named = false, + }, + [anon_sym_i8] = { + .visible = true, + .named = false, + }, + [anon_sym_i16] = { + .visible = true, + .named = false, + }, + [anon_sym_i32] = { + .visible = true, + .named = false, + }, + [anon_sym_i64] = { + .visible = true, + .named = false, + }, + [anon_sym_u8] = { + .visible = true, + .named = false, + }, + [anon_sym_u16] = { + .visible = true, + .named = false, + }, + [anon_sym_u32] = { + .visible = true, + .named = false, + }, + [anon_sym_u64] = { + .visible = true, + .named = false, + }, + [anon_sym_int] = { + .visible = true, + .named = false, + }, + [anon_sym_uint] = { + .visible = true, + .named = false, + }, + [anon_sym_size] = { + .visible = true, + .named = false, + }, + [anon_sym_uintptr] = { + .visible = true, + .named = false, + }, + [anon_sym_char] = { + .visible = true, + .named = false, + }, + [anon_sym_f32] = { + .visible = true, + .named = false, + }, + [anon_sym_f64] = { + .visible = true, + .named = false, + }, + [anon_sym_enum] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR] = { + .visible = true, + .named = false, + }, + [anon_sym_nullable] = { + .visible = true, + .named = false, + }, + [anon_sym_struct] = { + .visible = true, + .named = false, + }, + [anon_sym_union] = { + .visible = true, + .named = false, + }, + [anon_sym_AToffset] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE] = { + .visible = true, + .named = false, + }, + [anon_sym_LBRACK] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACK] = { + .visible = true, + .named = false, + }, + [anon_sym__] = { + .visible = true, + .named = false, + }, + [anon_sym_DOT_DOT_DOT] = { + .visible = true, + .named = false, + }, + [anon_sym_true] = { + .visible = true, + .named = false, + }, + [anon_sym_false] = { + .visible = true, + .named = false, + }, + [anon_sym_null] = { + .visible = true, + .named = false, + }, + [anon_sym_0x] = { + .visible = true, + .named = false, + }, + [anon_sym_0o] = { + .visible = true, + .named = false, + }, + [anon_sym_0b] = { + .visible = true, + .named = false, + }, + [anon_sym_0] = { + .visible = true, + .named = false, + }, + [anon_sym_1] = { + .visible = true, + .named = false, + }, + [anon_sym_2] = { + .visible = true, + .named = false, + }, + [anon_sym_3] = { + .visible = true, + .named = false, + }, + [anon_sym_4] = { + .visible = true, + .named = false, + }, + [anon_sym_5] = { + .visible = true, + .named = false, + }, + [anon_sym_6] = { + .visible = true, + .named = false, + }, + [anon_sym_7] = { + .visible = true, + .named = false, + }, + [anon_sym_8] = { + .visible = true, + .named = false, + }, + [anon_sym_9] = { + .visible = true, + .named = false, + }, + [anon_sym_A] = { + .visible = true, + .named = false, + }, + [anon_sym_B] = { + .visible = true, + .named = false, + }, + [anon_sym_C] = { + .visible = true, + .named = false, + }, + [anon_sym_D] = { + .visible = true, + .named = false, + }, + [anon_sym_E] = { + .visible = true, + .named = false, + }, + [anon_sym_F] = { + .visible = true, + .named = false, + }, + [anon_sym_a] = { + .visible = true, + .named = false, + }, + [anon_sym_b] = { + .visible = true, + .named = false, + }, + [anon_sym_c] = { + .visible = true, + .named = false, + }, + [anon_sym_d] = { + .visible = true, + .named = false, + }, + [anon_sym_e] = { + .visible = true, + .named = false, + }, + [anon_sym_f] = { + .visible = true, + .named = false, + }, + [anon_sym_i] = { + .visible = true, + .named = false, + }, + [anon_sym_u] = { + .visible = true, + .named = false, + }, + [anon_sym_z] = { + .visible = true, + .named = false, + }, + [anon_sym_DOT] = { + .visible = true, + .named = false, + }, + [anon_sym_SQUOTE] = { + .visible = true, + .named = false, + }, + [aux_sym_rune_token1] = { + .visible = false, + .named = false, + }, + [anon_sym_BSLASH] = { + .visible = true, + .named = false, + }, + [aux_sym_escape_sequence_token1] = { + .visible = false, + .named = false, + }, + [aux_sym_named_escape_token1] = { + .visible = false, + .named = false, + }, + [anon_sym_DQUOTE] = { + .visible = true, + .named = false, + }, + [aux_sym_string_char_token1] = { + .visible = false, + .named = false, + }, + [anon_sym_alloc] = { + .visible = true, + .named = false, + }, + [anon_sym_append] = { + .visible = true, + .named = false, + }, + [anon_sym_free] = { + .visible = true, + .named = false, + }, + [anon_sym_delete] = { + .visible = true, + .named = false, + }, + [anon_sym_assert] = { + .visible = true, + .named = false, + }, + [anon_sym_static] = { + .visible = true, + .named = false, + }, + [anon_sym_abort] = { + .visible = true, + .named = false, + }, + [anon_sym_len] = { + .visible = true, + .named = false, + }, + [anon_sym_offset] = { + .visible = true, + .named = false, + }, + [anon_sym_DOT_DOT] = { + .visible = true, + .named = false, + }, + [anon_sym_QMARK] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH] = { + .visible = true, + .named = false, + }, + [anon_sym_TILDE] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP] = { + .visible = true, + .named = false, + }, + [anon_sym_as] = { + .visible = true, + .named = false, + }, + [anon_sym_is] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH] = { + .visible = true, + .named = false, + }, + [anon_sym_PERCENT] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_LT] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_CARET] = { + .visible = true, + .named = false, + }, + [anon_sym_LT] = { + .visible = true, + .named = false, + }, + [anon_sym_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_BANG_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP_AMP] = { + .visible = true, + .named = false, + }, + [anon_sym_CARET_CARET] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE_PIPE] = { + .visible = true, + .named = false, + }, + [anon_sym_if] = { + .visible = true, + .named = false, + }, + [anon_sym_else] = { + .visible = true, + .named = false, + }, + [anon_sym_for] = { + .visible = true, + .named = false, + }, + [anon_sym_switch] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ_GT] = { + .visible = true, + .named = false, + }, + [anon_sym_match] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_DASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_STAR_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_SLASH_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_PERCENT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_LT_LT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_GT_GT_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_CARET_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_defer] = { + .visible = true, + .named = false, + }, + [anon_sym_break] = { + .visible = true, + .named = false, + }, + [anon_sym_continue] = { + .visible = true, + .named = false, + }, + [anon_sym_return] = { + .visible = true, + .named = false, + }, + [sym_name] = { + .visible = true, + .named = true, + }, + [sym_comment] = { + .visible = true, + .named = true, + }, + [sym_unit] = { + .visible = true, + .named = true, + }, + [sym_imports] = { + .visible = true, + .named = true, + }, + [sym_use_statement] = { + .visible = true, + .named = true, + }, + [sym_name_list] = { + .visible = true, + .named = true, + }, + [sym_declarations] = { + .visible = true, + .named = true, + }, + [sym_declaration] = { + .visible = true, + .named = true, + }, + [sym_global_declaration] = { + .visible = true, + .named = true, + }, + [sym_global_bindings] = { + .visible = true, + .named = true, + }, + [sym_global_binding] = { + .visible = true, + .named = true, + }, + [sym_decl_attr] = { + .visible = true, + .named = true, + }, + [sym_constant_declaration] = { + .visible = true, + .named = true, + }, + [sym_constant_bindings] = { + .visible = true, + .named = true, + }, + [sym_constant_binding] = { + .visible = true, + .named = true, + }, + [sym_type_declaration] = { + .visible = true, + .named = true, + }, + [sym_type_bindings] = { + .visible = true, + .named = true, + }, + [sym_function_declaration] = { + .visible = true, + .named = true, + }, + [sym_fndec_attrs] = { + .visible = true, + .named = true, + }, + [sym_fndec_attr] = { + .visible = true, + .named = true, + }, + [sym_fntype_attr] = { + .visible = true, + .named = true, + }, + [sym_type] = { + .visible = true, + .named = true, + }, + [sym__inner_type] = { + .visible = false, + .named = true, + }, + [sym_storage_class] = { + .visible = true, + .named = true, + }, + [sym_scalar_type] = { + .visible = true, + .named = true, + }, + [sym_integer_type] = { + .visible = true, + .named = true, + }, + [sym_floating_type] = { + .visible = true, + .named = true, + }, + [sym_enum_type] = { + .visible = true, + .named = true, + }, + [sym_enum_values] = { + .visible = true, + .named = true, + }, + [sym_enum_value] = { + .visible = true, + .named = true, + }, + [sym_pointer_type] = { + .visible = true, + .named = true, + }, + [sym_struct_type] = { + .visible = true, + .named = true, + }, + [sym_union_type] = { + .visible = true, + .named = true, + }, + [sym_struct_union_fields] = { + .visible = true, + .named = true, + }, + [sym_struct_union_field] = { + .visible = true, + .named = true, + }, + [sym_offset_specifier] = { + .visible = true, + .named = true, + }, + [sym_tuple_type] = { + .visible = true, + .named = true, + }, + [sym_tuple_types] = { + .visible = true, + .named = true, + }, + [sym_tagged_union_type] = { + .visible = true, + .named = true, + }, + [sym_tagged_types] = { + .visible = true, + .named = true, + }, + [sym_slice_array_type] = { + .visible = true, + .named = true, + }, + [sym_function_type] = { + .visible = true, + .named = true, + }, + [sym_prototype] = { + .visible = true, + .named = true, + }, + [sym_parameter_list] = { + .visible = true, + .named = true, + }, + [sym_parameters] = { + .visible = true, + .named = true, + }, + [sym_parameter] = { + .visible = true, + .named = true, + }, + [sym_alias_type] = { + .visible = true, + .named = true, + }, + [sym_unwrapped_alias] = { + .visible = true, + .named = true, + }, + [sym_constant] = { + .visible = true, + .named = true, + }, + [sym_integer_constant] = { + .visible = true, + .named = true, + }, + [sym_hex_digits] = { + .visible = true, + .named = true, + }, + [sym_hex_digit] = { + .visible = true, + .named = true, + }, + [sym_octal_digits] = { + .visible = true, + .named = true, + }, + [sym_octal_digit] = { + .visible = true, + .named = true, + }, + [sym_binary_digits] = { + .visible = true, + .named = true, + }, + [sym_binary_digit] = { + .visible = true, + .named = true, + }, + [sym_decimal_digits] = { + .visible = true, + .named = true, + }, + [sym_decimal_digit] = { + .visible = true, + .named = true, + }, + [sym_integer_suffix] = { + .visible = true, + .named = true, + }, + [sym_floating_constant] = { + .visible = true, + .named = true, + }, + [sym_exponent] = { + .visible = true, + .named = true, + }, + [sym_floating_suffix] = { + .visible = true, + .named = true, + }, + [sym_rune_constant] = { + .visible = true, + .named = true, + }, + [sym_rune] = { + .visible = true, + .named = true, + }, + [sym_escape_sequence] = { + .visible = true, + .named = true, + }, + [sym_named_escape] = { + .visible = true, + .named = true, + }, + [sym_string_constant] = { + .visible = true, + .named = true, + }, + [sym_string_chars] = { + .visible = true, + .named = true, + }, + [sym_string_char] = { + .visible = true, + .named = true, + }, + [sym_array_literal] = { + .visible = true, + .named = true, + }, + [sym_array_members] = { + .visible = true, + .named = true, + }, + [sym_enum_literal] = { + .visible = true, + .named = true, + }, + [sym_struct_literal] = { + .visible = true, + .named = true, + }, + [sym_struct_initializer] = { + .visible = true, + .named = true, + }, + [sym_field_values] = { + .visible = true, + .named = true, + }, + [sym_field_value] = { + .visible = true, + .named = true, + }, + [sym_plain_expression] = { + .visible = true, + .named = true, + }, + [sym_nested_expression] = { + .visible = true, + .named = true, + }, + [sym_tuple_items] = { + .visible = true, + .named = true, + }, + [sym_allocation_expression] = { + .visible = true, + .named = true, + }, + [sym_append_values] = { + .visible = true, + .named = true, + }, + [sym_assertion_expression] = { + .visible = true, + .named = true, + }, + [sym_call_expression] = { + .visible = true, + .named = true, + }, + [sym_argument_list] = { + .visible = true, + .named = true, + }, + [sym_measurement_expression] = { + .visible = true, + .named = true, + }, + [sym_size_expression] = { + .visible = true, + .named = true, + }, + [sym_length_expression] = { + .visible = true, + .named = true, + }, + [sym_offset_expression] = { + .visible = true, + .named = true, + }, + [sym_field_access_expression] = { + .visible = true, + .named = true, + }, + [sym_indexing_expression] = { + .visible = true, + .named = true, + }, + [sym_slicing_expression] = { + .visible = true, + .named = true, + }, + [sym_error_propagation] = { + .visible = true, + .named = true, + }, + [sym_postfix_expression] = { + .visible = true, + .named = true, + }, + [sym_object_selector] = { + .visible = true, + .named = true, + }, + [sym_unary_expression] = { + .visible = true, + .named = true, + }, + [sym_cast_expression] = { + .visible = true, + .named = true, + }, + [sym_multiplicative_expression] = { + .visible = true, + .named = true, + }, + [sym_additive_expression] = { + .visible = true, + .named = true, + }, + [sym_shift_expression] = { + .visible = true, + .named = true, + }, + [sym_and_expression] = { + .visible = true, + .named = true, + }, + [sym_exclusive_or_expression] = { + .visible = true, + .named = true, + }, + [sym_inclusive_or_expression] = { + .visible = true, + .named = true, + }, + [sym_comparison_expression] = { + .visible = true, + .named = true, + }, + [sym_equality_expression] = { + .visible = true, + .named = true, + }, + [sym_logical_and_expression] = { + .visible = true, + .named = true, + }, + [sym_logical_xor_expression] = { + .visible = true, + .named = true, + }, + [sym_logical_or_expression] = { + .visible = true, + .named = true, + }, + [sym_if_expression] = { + .visible = true, + .named = true, + }, + [sym_conditional_branch] = { + .visible = true, + .named = true, + }, + [sym_for_loop] = { + .visible = true, + .named = true, + }, + [sym_for_predicate] = { + .visible = true, + .named = true, + }, + [sym_label] = { + .visible = true, + .named = true, + }, + [sym_switch_expression] = { + .visible = true, + .named = true, + }, + [sym_switch_cases] = { + .visible = true, + .named = true, + }, + [sym_switch_case] = { + .visible = true, + .named = true, + }, + [sym_case_options] = { + .visible = true, + .named = true, + }, + [sym_match_expression] = { + .visible = true, + .named = true, + }, + [sym_match_cases] = { + .visible = true, + .named = true, + }, + [sym_match_case] = { + .visible = true, + .named = true, + }, + [sym_assignment] = { + .visible = true, + .named = true, + }, + [sym_assignment_op] = { + .visible = true, + .named = true, + }, + [sym_binding_list] = { + .visible = true, + .named = true, + }, + [sym_bindings] = { + .visible = true, + .named = true, + }, + [sym_binding] = { + .visible = true, + .named = true, + }, + [sym_binding_names] = { + .visible = true, + .named = true, + }, + [sym_deferred_expression] = { + .visible = true, + .named = true, + }, + [sym_expression_list] = { + .visible = true, + .named = true, + }, + [sym_control_statement] = { + .visible = true, + .named = true, + }, + [sym_expression] = { + .visible = true, + .named = true, + }, + [sym_compound_expression] = { + .visible = true, + .named = true, + }, + [sym_identifier] = { + .visible = true, + .named = true, + }, + [aux_sym_imports_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_declarations_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_fndec_attrs_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_tagged_types_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_hex_digits_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_octal_digits_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_binary_digits_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_decimal_digits_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_string_constant_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_string_chars_repeat1] = { + .visible = false, + .named = false, + }, +}; + +enum { + field_address = 1, + field_afterthought = 2, + field_argument = 3, + field_as_cast = 4, + field_binding = 5, + field_body = 6, + field_is_cast = 7, + field_name = 8, + field_operator = 9, + field_selector = 10, + field_type = 11, + field_type_cast = 12, +}; + +static const char *ts_field_names[] = { + [0] = NULL, + [field_address] = "address", + [field_afterthought] = "afterthought", + [field_argument] = "argument", + [field_as_cast] = "as_cast", + [field_binding] = "binding", + [field_body] = "body", + [field_is_cast] = "is_cast", + [field_name] = "name", + [field_operator] = "operator", + [field_selector] = "selector", + [field_type] = "type", + [field_type_cast] = "type_cast", +}; + +static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { + [1] = {.index = 0, .length = 2}, + [2] = {.index = 2, .length = 2}, + [3] = {.index = 4, .length = 3}, + [4] = {.index = 7, .length = 2}, + [5] = {.index = 9, .length = 2}, + [6] = {.index = 11, .length = 3}, + [7] = {.index = 14, .length = 2}, + [8] = {.index = 16, .length = 3}, + [9] = {.index = 19, .length = 3}, + [10] = {.index = 22, .length = 3}, + [11] = {.index = 25, .length = 1}, + [12] = {.index = 26, .length = 1}, +}; + +static const TSFieldMapEntry ts_field_map_entries[] = { + [0] = + {field_name, 1}, + {field_type, 2}, + [2] = + {field_name, 2}, + {field_type, 3}, + [4] = + {field_body, 4}, + {field_name, 1}, + {field_type, 2}, + [7] = + {field_argument, 1}, + {field_operator, 0}, + [9] = + {field_address, 0}, + {field_argument, 1}, + [11] = + {field_body, 5}, + {field_name, 2}, + {field_type, 3}, + [14] = + {field_selector, 1}, + {field_selector, 2}, + [16] = + {field_type_cast, 0}, + {field_type_cast, 1}, + {field_type_cast, 2}, + [19] = + {field_as_cast, 0}, + {field_as_cast, 1}, + {field_as_cast, 2}, + [22] = + {field_is_cast, 0}, + {field_is_cast, 1}, + {field_is_cast, 2}, + [25] = + {field_binding, 0}, + [26] = + {field_afterthought, 2}, +}; + +static TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { + [0] = {0}, +}; + +static uint16_t ts_non_terminal_alias_map[] = { + 0, +}; + +static inline bool aux_sym_named_escape_token1_character_set_1(int32_t c) { + return (c < 'f' + ? (c < '0' + ? (c < '\'' + ? c == '"' + : c <= '\'') + : (c <= '0' || (c >= 'a' && c <= 'b'))) + : (c <= 'f' || (c < 't' + ? (c < 'r' + ? c == 'n' + : c <= 'r') + : (c <= 't' || c == 'v')))); +} + +static bool ts_lex(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (eof) ADVANCE(235); + if (lookahead == '!') ADVANCE(264); + if (lookahead == '"') ADVANCE(371); + if (lookahead == '%') ADVANCE(406); + if (lookahead == '&') ADVANCE(400); + if (lookahead == '\'') ADVANCE(365); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(306); + if (lookahead == '+') ADVANCE(394); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(396); + if (lookahead == '.') ADVANCE(362); + if (lookahead == '/') ADVANCE(404); + if (lookahead == '0') ADVANCE(330); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(251); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '<') ADVANCE(413); + if (lookahead == '=') ADVANCE(239); + if (lookahead == '>') ADVANCE(415); + if (lookahead == '?') ADVANCE(392); + if (lookahead == '@') ADVANCE(119); + if (lookahead == 'A') ADVANCE(340); + if (lookahead == 'B') ADVANCE(341); + if (lookahead == 'C') ADVANCE(342); + if (lookahead == 'D') ADVANCE(343); + if (lookahead == 'E') ADVANCE(344); + if (lookahead == 'F') ADVANCE(345); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(231) + if (lookahead == ']') ADVANCE(317); + if (lookahead == '^') ADVANCE(411); + if (lookahead == '_') ADVANCE(318); + if (lookahead == 'a') ADVANCE(346); + if (lookahead == 'b') ADVANCE(349); + if (lookahead == 'c') ADVANCE(351); + if (lookahead == 'd') ADVANCE(352); + if (lookahead == 'e') ADVANCE(354); + if (lookahead == 'f') ADVANCE(356); + if (lookahead == 'i') ADVANCE(357); + if (lookahead == 'l') ADVANCE(99); + if (lookahead == 'm') ADVANCE(88); + if (lookahead == 'n') ADVANCE(211); + if (lookahead == 'o') ADVANCE(122); + if (lookahead == 'r') ADVANCE(111); + if (lookahead == 's') ADVANCE(130); + if (lookahead == 't') ADVANCE(177); + if (lookahead == 'u') ADVANCE(360); + if (lookahead == 'v') ADVANCE(165); + if (lookahead == 'z') ADVANCE(361); + if (lookahead == '{') ADVANCE(242); + if (lookahead == '|') ADVANCE(314); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '~') ADVANCE(397); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(0) + END_STATE(); + case 1: + if (lookahead == '\n') SKIP(50) + END_STATE(); + case 2: + if (lookahead == '\n') SKIP(50) + if (lookahead == '\r') SKIP(1) + END_STATE(); + case 3: + if (lookahead == '\n') SKIP(51) + END_STATE(); + case 4: + if (lookahead == '\n') SKIP(51) + if (lookahead == '\r') SKIP(3) + END_STATE(); + case 5: + if (lookahead == '\n') SKIP(53) + END_STATE(); + case 6: + if (lookahead == '\n') SKIP(53) + if (lookahead == '\r') SKIP(5) + END_STATE(); + case 7: + if (lookahead == '\n') SKIP(54) + END_STATE(); + case 8: + if (lookahead == '\n') SKIP(54) + if (lookahead == '\r') SKIP(7) + END_STATE(); + case 9: + if (lookahead == '\n') SKIP(52) + END_STATE(); + case 10: + if (lookahead == '\n') SKIP(52) + if (lookahead == '\r') SKIP(9) + END_STATE(); + case 11: + if (lookahead == '\n') SKIP(45) + END_STATE(); + case 12: + if (lookahead == '\n') SKIP(45) + if (lookahead == '\r') SKIP(11) + END_STATE(); + case 13: + if (lookahead == '\n') SKIP(56) + END_STATE(); + case 14: + if (lookahead == '\n') SKIP(56) + if (lookahead == '\r') SKIP(13) + END_STATE(); + case 15: + if (lookahead == '\n') SKIP(55) + END_STATE(); + case 16: + if (lookahead == '\n') SKIP(55) + if (lookahead == '\r') SKIP(15) + END_STATE(); + case 17: + if (lookahead == '\n') SKIP(46) + END_STATE(); + case 18: + if (lookahead == '\n') SKIP(46) + if (lookahead == '\r') SKIP(17) + END_STATE(); + case 19: + if (lookahead == '\n') SKIP(44) + END_STATE(); + case 20: + if (lookahead == '\n') SKIP(44) + if (lookahead == '\r') SKIP(19) + END_STATE(); + case 21: + if (lookahead == '\n') SKIP(58) + END_STATE(); + case 22: + if (lookahead == '\n') SKIP(58) + if (lookahead == '\r') SKIP(21) + END_STATE(); + case 23: + if (lookahead == '\n') SKIP(59) + END_STATE(); + case 24: + if (lookahead == '\n') SKIP(59) + if (lookahead == '\r') SKIP(23) + END_STATE(); + case 25: + if (lookahead == '\n') SKIP(47) + END_STATE(); + case 26: + if (lookahead == '\n') SKIP(47) + if (lookahead == '\r') SKIP(25) + END_STATE(); + case 27: + if (lookahead == '\n') SKIP(49) + END_STATE(); + case 28: + if (lookahead == '\n') SKIP(49) + if (lookahead == '\r') SKIP(27) + END_STATE(); + case 29: + if (lookahead == '\n') SKIP(67) + END_STATE(); + case 30: + if (lookahead == '\n') SKIP(67) + if (lookahead == '\r') SKIP(29) + END_STATE(); + case 31: + if (lookahead == '\n') SKIP(68) + END_STATE(); + case 32: + if (lookahead == '\n') SKIP(68) + if (lookahead == '\r') SKIP(31) + END_STATE(); + case 33: + if (lookahead == '\n') SKIP(65) + END_STATE(); + case 34: + if (lookahead == '\n') SKIP(65) + if (lookahead == '\r') SKIP(33) + END_STATE(); + case 35: + if (lookahead == '\n') SKIP(57) + if (lookahead == '"') ADVANCE(371); + if (lookahead == '/') ADVANCE(373); + if (lookahead == '\\') ADVANCE(368); + if (lookahead == '\t' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(372); + if (lookahead != 0) ADVANCE(372); + END_STATE(); + case 36: + if (lookahead == '\n') SKIP(60) + END_STATE(); + case 37: + if (lookahead == '\n') SKIP(60) + if (lookahead == '\r') SKIP(36) + END_STATE(); + case 38: + if (lookahead == '\n') SKIP(69) + END_STATE(); + case 39: + if (lookahead == '\n') SKIP(69) + if (lookahead == '\r') SKIP(38) + END_STATE(); + case 40: + if (lookahead == '\n') SKIP(70) + END_STATE(); + case 41: + if (lookahead == '\n') SKIP(70) + if (lookahead == '\r') SKIP(40) + END_STATE(); + case 42: + if (lookahead == '\n') SKIP(48) + END_STATE(); + case 43: + if (lookahead == '\n') SKIP(48) + if (lookahead == '\r') SKIP(42) + END_STATE(); + case 44: + if (lookahead == '!') ADVANCE(264); + if (lookahead == '"') ADVANCE(371); + if (lookahead == '%') ADVANCE(405); + if (lookahead == '&') ADVANCE(399); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '+') ADVANCE(393); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(395); + if (lookahead == '.') ADVANCE(362); + if (lookahead == '/') ADVANCE(403); + if (lookahead == '0') ADVANCE(329); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(251); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '<') ADVANCE(414); + if (lookahead == '=') ADVANCE(239); + if (lookahead == '>') ADVANCE(416); + if (lookahead == '?') ADVANCE(392); + if (lookahead == 'A') ADVANCE(340); + if (lookahead == 'B') ADVANCE(341); + if (lookahead == 'C') ADVANCE(342); + if (lookahead == 'D') ADVANCE(343); + if (lookahead == 'E') ADVANCE(344); + if (lookahead == 'F') ADVANCE(345); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(20) + if (lookahead == ']') ADVANCE(317); + if (lookahead == '^') ADVANCE(412); + if (lookahead == 'a') ADVANCE(347); + if (lookahead == 'b') ADVANCE(348); + if (lookahead == 'c') ADVANCE(350); + if (lookahead == 'd') ADVANCE(352); + if (lookahead == 'e') ADVANCE(353); + if (lookahead == 'f') ADVANCE(355); + if (lookahead == 'i') ADVANCE(358); + if (lookahead == 'u') ADVANCE(359); + if (lookahead == 'z') ADVANCE(361); + if (lookahead == '{') ADVANCE(242); + if (lookahead == '|') ADVANCE(315); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(44) + END_STATE(); + case 45: + if (lookahead == '!') ADVANCE(84); + if (lookahead == '%') ADVANCE(406); + if (lookahead == '&') ADVANCE(400); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(306); + if (lookahead == '+') ADVANCE(394); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(396); + if (lookahead == '.') ADVANCE(362); + if (lookahead == '/') ADVANCE(404); + if (lookahead == '0') ADVANCE(329); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(250); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '<') ADVANCE(413); + if (lookahead == '=') ADVANCE(239); + if (lookahead == '>') ADVANCE(415); + if (lookahead == '?') ADVANCE(392); + if (lookahead == 'A') ADVANCE(340); + if (lookahead == 'B') ADVANCE(341); + if (lookahead == 'C') ADVANCE(342); + if (lookahead == 'D') ADVANCE(343); + if (lookahead == 'E') ADVANCE(344); + if (lookahead == 'F') ADVANCE(345); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(12) + if (lookahead == ']') ADVANCE(317); + if (lookahead == '^') ADVANCE(411); + if (lookahead == 'a') ADVANCE(347); + if (lookahead == 'b') ADVANCE(348); + if (lookahead == 'c') ADVANCE(350); + if (lookahead == 'd') ADVANCE(352); + if (lookahead == 'e') ADVANCE(353); + if (lookahead == 'f') ADVANCE(355); + if (lookahead == 'i') ADVANCE(358); + if (lookahead == 'u') ADVANCE(359); + if (lookahead == 'z') ADVANCE(361); + if (lookahead == '|') ADVANCE(314); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(45) + END_STATE(); + case 46: + if (lookahead == '!') ADVANCE(84); + if (lookahead == '%') ADVANCE(406); + if (lookahead == '&') ADVANCE(400); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(306); + if (lookahead == '+') ADVANCE(394); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(396); + if (lookahead == '.') ADVANCE(362); + if (lookahead == '/') ADVANCE(404); + if (lookahead == '0') ADVANCE(329); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(250); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '<') ADVANCE(413); + if (lookahead == '=') ADVANCE(239); + if (lookahead == '>') ADVANCE(415); + if (lookahead == '?') ADVANCE(392); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(18) + if (lookahead == ']') ADVANCE(317); + if (lookahead == '^') ADVANCE(411); + if (lookahead == 'a') ADVANCE(184); + if (lookahead == 'e') ADVANCE(353); + if (lookahead == 'f') ADVANCE(77); + if (lookahead == 'i') ADVANCE(358); + if (lookahead == 'u') ADVANCE(359); + if (lookahead == 'z') ADVANCE(361); + if (lookahead == '|') ADVANCE(314); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(46) + END_STATE(); + case 47: + if (lookahead == '!') ADVANCE(84); + if (lookahead == '%') ADVANCE(406); + if (lookahead == '&') ADVANCE(400); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(306); + if (lookahead == '+') ADVANCE(394); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(396); + if (lookahead == '.') ADVANCE(63); + if (lookahead == '/') ADVANCE(404); + if (lookahead == ':') ADVANCE(250); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '<') ADVANCE(413); + if (lookahead == '=') ADVANCE(238); + if (lookahead == '>') ADVANCE(415); + if (lookahead == '\\') SKIP(26) + if (lookahead == ']') ADVANCE(317); + if (lookahead == '^') ADVANCE(411); + if (lookahead == 'a') ADVANCE(184); + if (lookahead == 'e') ADVANCE(140); + if (lookahead == 'i') ADVANCE(185); + if (lookahead == '|') ADVANCE(314); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(47) + END_STATE(); + case 48: + if (lookahead == '!') ADVANCE(84); + if (lookahead == '%') ADVANCE(405); + if (lookahead == '&') ADVANCE(399); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '+') ADVANCE(393); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(395); + if (lookahead == '.') ADVANCE(362); + if (lookahead == '/') ADVANCE(403); + if (lookahead == '0') ADVANCE(329); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(250); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '<') ADVANCE(414); + if (lookahead == '=') ADVANCE(85); + if (lookahead == '>') ADVANCE(416); + if (lookahead == '?') ADVANCE(392); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(43) + if (lookahead == ']') ADVANCE(317); + if (lookahead == '^') ADVANCE(412); + if (lookahead == 'a') ADVANCE(184); + if (lookahead == 'e') ADVANCE(353); + if (lookahead == 'f') ADVANCE(77); + if (lookahead == 'i') ADVANCE(358); + if (lookahead == 'u') ADVANCE(359); + if (lookahead == 'z') ADVANCE(361); + if (lookahead == '|') ADVANCE(315); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(48) + END_STATE(); + case 49: + if (lookahead == '!') ADVANCE(84); + if (lookahead == '%') ADVANCE(405); + if (lookahead == '&') ADVANCE(399); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '+') ADVANCE(393); + if (lookahead == '-') ADVANCE(395); + if (lookahead == '.') ADVANCE(363); + if (lookahead == '/') ADVANCE(403); + if (lookahead == ':') ADVANCE(250); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '<') ADVANCE(414); + if (lookahead == '=') ADVANCE(238); + if (lookahead == '>') ADVANCE(416); + if (lookahead == '?') ADVANCE(392); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(28) + if (lookahead == ']') ADVANCE(317); + if (lookahead == '^') ADVANCE(412); + if (lookahead == 'a') ADVANCE(184); + if (lookahead == 'e') ADVANCE(140); + if (lookahead == 'i') ADVANCE(185); + if (lookahead == '|') ADVANCE(315); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(49) + END_STATE(); + case 50: + if (lookahead == '!') ADVANCE(263); + if (lookahead == '"') ADVANCE(371); + if (lookahead == '&') ADVANCE(398); + if (lookahead == '\'') ADVANCE(365); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '+') ADVANCE(393); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(395); + if (lookahead == '.') ADVANCE(61); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '0') ADVANCE(330); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(251); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '=') ADVANCE(86); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(2) + if (lookahead == ']') ADVANCE(317); + if (lookahead == 'a') ADVANCE(470); + if (lookahead == 'b') ADVANCE(554); + if (lookahead == 'c') ADVANCE(540); + if (lookahead == 'd') ADVANCE(479); + if (lookahead == 'e') ADVANCE(525); + if (lookahead == 'f') ADVANCE(468); + if (lookahead == 'i') ADVANCE(500); + if (lookahead == 'l') ADVANCE(480); + if (lookahead == 'm') ADVANCE(463); + if (lookahead == 'n') ADVANCE(580); + if (lookahead == 'o') ADVANCE(501); + if (lookahead == 'r') ADVANCE(492); + if (lookahead == 's') ADVANCE(508); + if (lookahead == 't') ADVANCE(553); + if (lookahead == 'v') ADVANCE(541); + if (lookahead == '{') ADVANCE(242); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '~') ADVANCE(397); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(50) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('g' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 51: + if (lookahead == '!') ADVANCE(263); + if (lookahead == '"') ADVANCE(371); + if (lookahead == '&') ADVANCE(398); + if (lookahead == '\'') ADVANCE(365); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '+') ADVANCE(393); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(395); + if (lookahead == '.') ADVANCE(61); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '0') ADVANCE(330); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(250); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '=') ADVANCE(86); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(4) + if (lookahead == ']') ADVANCE(317); + if (lookahead == 'a') ADVANCE(470); + if (lookahead == 'b') ADVANCE(554); + if (lookahead == 'c') ADVANCE(540); + if (lookahead == 'd') ADVANCE(479); + if (lookahead == 'f') ADVANCE(468); + if (lookahead == 'i') ADVANCE(500); + if (lookahead == 'l') ADVANCE(480); + if (lookahead == 'm') ADVANCE(463); + if (lookahead == 'n') ADVANCE(580); + if (lookahead == 'o') ADVANCE(501); + if (lookahead == 'r') ADVANCE(492); + if (lookahead == 's') ADVANCE(508); + if (lookahead == 't') ADVANCE(553); + if (lookahead == 'v') ADVANCE(541); + if (lookahead == '{') ADVANCE(242); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '~') ADVANCE(397); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(51) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('e' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 52: + if (lookahead == '!') ADVANCE(263); + if (lookahead == '"') ADVANCE(371); + if (lookahead == '&') ADVANCE(398); + if (lookahead == '\'') ADVANCE(365); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '+') ADVANCE(393); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(395); + if (lookahead == '.') ADVANCE(364); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '0') ADVANCE(330); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(251); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '=') ADVANCE(240); + if (lookahead == '?') ADVANCE(392); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(10) + if (lookahead == ']') ADVANCE(317); + if (lookahead == 'a') ADVANCE(470); + if (lookahead == 'b') ADVANCE(554); + if (lookahead == 'c') ADVANCE(540); + if (lookahead == 'd') ADVANCE(479); + if (lookahead == 'f') ADVANCE(468); + if (lookahead == 'i') ADVANCE(500); + if (lookahead == 'l') ADVANCE(480); + if (lookahead == 'm') ADVANCE(463); + if (lookahead == 'n') ADVANCE(580); + if (lookahead == 'o') ADVANCE(501); + if (lookahead == 'r') ADVANCE(492); + if (lookahead == 's') ADVANCE(508); + if (lookahead == 't') ADVANCE(553); + if (lookahead == 'v') ADVANCE(541); + if (lookahead == '{') ADVANCE(242); + if (lookahead == '|') ADVANCE(313); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '~') ADVANCE(397); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(52) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('e' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 53: + if (lookahead == '!') ADVANCE(263); + if (lookahead == '"') ADVANCE(371); + if (lookahead == '&') ADVANCE(398); + if (lookahead == '\'') ADVANCE(365); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '+') ADVANCE(393); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(395); + if (lookahead == '.') ADVANCE(63); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '0') ADVANCE(330); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(250); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(6) + if (lookahead == ']') ADVANCE(317); + if (lookahead == 'a') ADVANCE(470); + if (lookahead == 'b') ADVANCE(554); + if (lookahead == 'c') ADVANCE(540); + if (lookahead == 'd') ADVANCE(479); + if (lookahead == 'e') ADVANCE(525); + if (lookahead == 'f') ADVANCE(468); + if (lookahead == 'i') ADVANCE(500); + if (lookahead == 'l') ADVANCE(480); + if (lookahead == 'm') ADVANCE(463); + if (lookahead == 'n') ADVANCE(580); + if (lookahead == 'o') ADVANCE(501); + if (lookahead == 'r') ADVANCE(492); + if (lookahead == 's') ADVANCE(508); + if (lookahead == 't') ADVANCE(553); + if (lookahead == 'v') ADVANCE(541); + if (lookahead == '{') ADVANCE(242); + if (lookahead == '~') ADVANCE(397); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(53) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('g' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 54: + if (lookahead == '!') ADVANCE(263); + if (lookahead == '"') ADVANCE(371); + if (lookahead == '&') ADVANCE(398); + if (lookahead == '\'') ADVANCE(365); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '+') ADVANCE(393); + if (lookahead == '-') ADVANCE(395); + if (lookahead == '.') ADVANCE(63); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '0') ADVANCE(330); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(250); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(8) + if (lookahead == ']') ADVANCE(317); + if (lookahead == 'a') ADVANCE(470); + if (lookahead == 'b') ADVANCE(554); + if (lookahead == 'c') ADVANCE(540); + if (lookahead == 'd') ADVANCE(479); + if (lookahead == 'f') ADVANCE(468); + if (lookahead == 'i') ADVANCE(500); + if (lookahead == 'l') ADVANCE(480); + if (lookahead == 'm') ADVANCE(463); + if (lookahead == 'n') ADVANCE(580); + if (lookahead == 'o') ADVANCE(501); + if (lookahead == 'r') ADVANCE(492); + if (lookahead == 's') ADVANCE(508); + if (lookahead == 't') ADVANCE(553); + if (lookahead == 'v') ADVANCE(541); + if (lookahead == '{') ADVANCE(242); + if (lookahead == '~') ADVANCE(397); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(54) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('e' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 55: + if (lookahead == '!') ADVANCE(263); + if (lookahead == '"') ADVANCE(371); + if (lookahead == '&') ADVANCE(398); + if (lookahead == '\'') ADVANCE(365); + if (lookahead == '(') ADVANCE(253); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '+') ADVANCE(393); + if (lookahead == '-') ADVANCE(395); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '0') ADVANCE(330); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == '=') ADVANCE(86); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(16) + if (lookahead == ']') ADVANCE(317); + if (lookahead == 'a') ADVANCE(470); + if (lookahead == 'd') ADVANCE(494); + if (lookahead == 'f') ADVANCE(469); + if (lookahead == 'l') ADVANCE(495); + if (lookahead == 'n') ADVANCE(580); + if (lookahead == 'o') ADVANCE(501); + if (lookahead == 's') ADVANCE(509); + if (lookahead == 't') ADVANCE(553); + if (lookahead == 'v') ADVANCE(541); + if (lookahead == '~') ADVANCE(397); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(55) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 56: + if (lookahead == '!') ADVANCE(263); + if (lookahead == '"') ADVANCE(371); + if (lookahead == '&') ADVANCE(398); + if (lookahead == '\'') ADVANCE(365); + if (lookahead == '(') ADVANCE(253); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '+') ADVANCE(393); + if (lookahead == '-') ADVANCE(395); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '0') ADVANCE(330); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(14) + if (lookahead == ']') ADVANCE(317); + if (lookahead == '_') ADVANCE(319); + if (lookahead == 'a') ADVANCE(470); + if (lookahead == 'd') ADVANCE(494); + if (lookahead == 'f') ADVANCE(469); + if (lookahead == 'l') ADVANCE(495); + if (lookahead == 'n') ADVANCE(580); + if (lookahead == 'o') ADVANCE(501); + if (lookahead == 's') ADVANCE(509); + if (lookahead == 't') ADVANCE(553); + if (lookahead == 'v') ADVANCE(541); + if (lookahead == '~') ADVANCE(397); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(56) + if (('A' <= lookahead && lookahead <= 'Z') || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 57: + if (lookahead == '"') ADVANCE(371); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '\\') ADVANCE(368); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(57) + END_STATE(); + case 58: + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '.') ADVANCE(64); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '=') ADVANCE(86); + if (lookahead == '@') ADVANCE(154); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(22) + if (lookahead == 'b') ADVANCE(544); + if (lookahead == 'c') ADVANCE(506); + if (lookahead == 'e') ADVANCE(536); + if (lookahead == 'f') ADVANCE(457); + if (lookahead == 'i') ADVANCE(452); + if (lookahead == 'n') ADVANCE(586); + if (lookahead == 'r') ADVANCE(583); + if (lookahead == 's') ADVANCE(510); + if (lookahead == 'u') ADVANCE(453); + if (lookahead == 'v') ADVANCE(541); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(58) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 59: + if (lookahead == '(') ADVANCE(253); + if (lookahead == '*') ADVANCE(305); + if (lookahead == '.') ADVANCE(64); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '@') ADVANCE(154); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(24) + if (lookahead == 'b') ADVANCE(544); + if (lookahead == 'c') ADVANCE(507); + if (lookahead == 'e') ADVANCE(536); + if (lookahead == 'f') ADVANCE(457); + if (lookahead == 'i') ADVANCE(452); + if (lookahead == 'n') ADVANCE(586); + if (lookahead == 'r') ADVANCE(583); + if (lookahead == 's') ADVANCE(510); + if (lookahead == 'u') ADVANCE(453); + if (lookahead == 'v') ADVANCE(541); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(59) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 60: + if (lookahead == ')') ADVANCE(254); + if (lookahead == '.') ADVANCE(64); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '\\') SKIP(37) + if (lookahead == '_') ADVANCE(319); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(60) + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 61: + if (lookahead == '.') ADVANCE(391); + END_STATE(); + case 62: + if (lookahead == '.') ADVANCE(320); + END_STATE(); + case 63: + if (lookahead == '.') ADVANCE(390); + END_STATE(); + case 64: + if (lookahead == '.') ADVANCE(62); + END_STATE(); + case 65: + if (lookahead == '.') ADVANCE(64); + if (lookahead == '/') ADVANCE(66); + if (lookahead == '\\') SKIP(34) + if (lookahead == 's') ADVANCE(578); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(65) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 66: + if (lookahead == '/') ADVANCE(589); + END_STATE(); + case 67: + if (lookahead == '/') ADVANCE(66); + if (lookahead == '0') ADVANCE(330); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '@') ADVANCE(183); + if (lookahead == '\\') SKIP(30) + if (lookahead == '}') ADVANCE(243); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(67) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 68: + if (lookahead == '/') ADVANCE(66); + if (lookahead == '@') ADVANCE(170); + if (lookahead == '\\') SKIP(32) + if (lookahead == 's') ADVANCE(578); + if (lookahead == 'u') ADVANCE(535); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(68) + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 69: + if (lookahead == '/') ADVANCE(66); + if (lookahead == '\\') SKIP(39) + if (lookahead == 'a') ADVANCE(193); + if (lookahead == 'c') ADVANCE(169); + if (lookahead == 'l') ADVANCE(116); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(69) + END_STATE(); + case 70: + if (lookahead == '/') ADVANCE(66); + if (lookahead == '\\') SKIP(41) + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(70) + END_STATE(); + case 71: + if (lookahead == '/') ADVANCE(367); + if (lookahead == '\\') ADVANCE(368); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(366); + if (lookahead != 0 && + lookahead != '\'') ADVANCE(366); + END_STATE(); + case 72: + if (lookahead == '1') ADVANCE(82); + if (lookahead == '3') ADVANCE(74); + if (lookahead == '6') ADVANCE(79); + if (lookahead == '8') ADVANCE(273); + if (lookahead == 'n') ADVANCE(194); + if (lookahead == 's') ADVANCE(402); + END_STATE(); + case 73: + if (lookahead == '1') ADVANCE(83); + if (lookahead == '3') ADVANCE(75); + if (lookahead == '6') ADVANCE(80); + if (lookahead == '8') ADVANCE(281); + if (lookahead == 'i') ADVANCE(158); + if (lookahead == 's') ADVANCE(100); + END_STATE(); + case 74: + if (lookahead == '2') ADVANCE(277); + END_STATE(); + case 75: + if (lookahead == '2') ADVANCE(285); + END_STATE(); + case 76: + if (lookahead == '2') ADVANCE(299); + END_STATE(); + case 77: + if (lookahead == '3') ADVANCE(76); + if (lookahead == '6') ADVANCE(81); + END_STATE(); + case 78: + if (lookahead == '3') ADVANCE(76); + if (lookahead == '6') ADVANCE(81); + if (lookahead == 'n') ADVANCE(257); + if (lookahead == 'o') ADVANCE(174); + END_STATE(); + case 79: + if (lookahead == '4') ADVANCE(279); + END_STATE(); + case 80: + if (lookahead == '4') ADVANCE(287); + END_STATE(); + case 81: + if (lookahead == '4') ADVANCE(301); + END_STATE(); + case 82: + if (lookahead == '6') ADVANCE(275); + END_STATE(); + case 83: + if (lookahead == '6') ADVANCE(283); + END_STATE(); + case 84: + if (lookahead == '=') ADVANCE(420); + END_STATE(); + case 85: + if (lookahead == '=') ADVANCE(419); + if (lookahead == '>') ADVANCE(432); + END_STATE(); + case 86: + if (lookahead == '>') ADVANCE(432); + END_STATE(); + case 87: + if (lookahead == 'a') ADVANCE(139); + END_STATE(); + case 88: + if (lookahead == 'a') ADVANCE(196); + END_STATE(); + case 89: + if (lookahead == 'a') ADVANCE(175); + END_STATE(); + case 90: + if (lookahead == 'a') ADVANCE(207); + if (lookahead == 'r') ADVANCE(267); + END_STATE(); + case 91: + if (lookahead == 'b') ADVANCE(168); + END_STATE(); + case 92: + if (lookahead == 'c') ADVANCE(126); + END_STATE(); + case 93: + if (lookahead == 'c') ADVANCE(374); + END_STATE(); + case 94: + if (lookahead == 'c') ADVANCE(383); + END_STATE(); + case 95: + if (lookahead == 'c') ADVANCE(127); + END_STATE(); + case 96: + if (lookahead == 'c') ADVANCE(202); + END_STATE(); + case 97: + if (lookahead == 'd') ADVANCE(271); + END_STATE(); + case 98: + if (lookahead == 'd') ADVANCE(376); + END_STATE(); + case 99: + if (lookahead == 'e') ADVANCE(150); + END_STATE(); + case 100: + if (lookahead == 'e') ADVANCE(236); + END_STATE(); + case 101: + if (lookahead == 'e') ADVANCE(426); + END_STATE(); + case 102: + if (lookahead == 'e') ADVANCE(378); + END_STATE(); + case 103: + if (lookahead == 'e') ADVANCE(265); + END_STATE(); + case 104: + if (lookahead == 'e') ADVANCE(293); + END_STATE(); + case 105: + if (lookahead == 'e') ADVANCE(321); + END_STATE(); + case 106: + if (lookahead == 'e') ADVANCE(256); + END_STATE(); + case 107: + if (lookahead == 'e') ADVANCE(448); + END_STATE(); + case 108: + if (lookahead == 'e') ADVANCE(186); + END_STATE(); + case 109: + if (lookahead == 'e') ADVANCE(87); + END_STATE(); + case 110: + if (lookahead == 'e') ADVANCE(121); + END_STATE(); + case 111: + if (lookahead == 'e') ADVANCE(206); + if (lookahead == 'u') ADVANCE(157); + END_STATE(); + case 112: + if (lookahead == 'e') ADVANCE(155); + END_STATE(); + case 113: + if (lookahead == 'e') ADVANCE(102); + END_STATE(); + case 114: + if (lookahead == 'e') ADVANCE(201); + END_STATE(); + case 115: + if (lookahead == 'e') ADVANCE(203); + END_STATE(); + case 116: + if (lookahead == 'e') ADVANCE(195); + END_STATE(); + case 117: + if (lookahead == 'e') ADVANCE(182); + END_STATE(); + case 118: + if (lookahead == 'e') ADVANCE(210); + END_STATE(); + case 119: + if (lookahead == 'f') ADVANCE(137); + if (lookahead == 'i') ADVANCE(159); + if (lookahead == 'n') ADVANCE(162); + if (lookahead == 'o') ADVANCE(125); + if (lookahead == 's') ADVANCE(217); + if (lookahead == 't') ADVANCE(108); + END_STATE(); + case 120: + if (lookahead == 'f') ADVANCE(137); + if (lookahead == 'i') ADVANCE(159); + if (lookahead == 'n') ADVANCE(162); + if (lookahead == 's') ADVANCE(217); + if (lookahead == 't') ADVANCE(108); + END_STATE(); + case 121: + if (lookahead == 'f') ADVANCE(255); + END_STATE(); + case 122: + if (lookahead == 'f') ADVANCE(123); + END_STATE(); + case 123: + if (lookahead == 'f') ADVANCE(190); + END_STATE(); + case 124: + if (lookahead == 'f') ADVANCE(191); + END_STATE(); + case 125: + if (lookahead == 'f') ADVANCE(124); + END_STATE(); + case 126: + if (lookahead == 'h') ADVANCE(433); + END_STATE(); + case 127: + if (lookahead == 'h') ADVANCE(430); + END_STATE(); + case 128: + if (lookahead == 'h') ADVANCE(89); + if (lookahead == 'o') ADVANCE(160); + END_STATE(); + case 129: + if (lookahead == 'i') ADVANCE(219); + END_STATE(); + case 130: + if (lookahead == 'i') ADVANCE(219); + if (lookahead == 't') ADVANCE(90); + if (lookahead == 'w') ADVANCE(138); + END_STATE(); + case 131: + if (lookahead == 'i') ADVANCE(97); + END_STATE(); + case 132: + if (lookahead == 'i') ADVANCE(259); + END_STATE(); + case 133: + if (lookahead == 'i') ADVANCE(94); + END_STATE(); + case 134: + if (lookahead == 'i') ADVANCE(167); + END_STATE(); + case 135: + if (lookahead == 'i') ADVANCE(197); + END_STATE(); + case 136: + if (lookahead == 'i') ADVANCE(161); + END_STATE(); + case 137: + if (lookahead == 'i') ADVANCE(156); + END_STATE(); + case 138: + if (lookahead == 'i') ADVANCE(209); + END_STATE(); + case 139: + if (lookahead == 'k') ADVANCE(446); + END_STATE(); + case 140: + if (lookahead == 'l') ADVANCE(187); + END_STATE(); + case 141: + if (lookahead == 'l') ADVANCE(187); + if (lookahead == 'x') ADVANCE(173); + END_STATE(); + case 142: + if (lookahead == 'l') ADVANCE(269); + END_STATE(); + case 143: + if (lookahead == 'l') ADVANCE(324); + END_STATE(); + case 144: + if (lookahead == 'l') ADVANCE(252); + END_STATE(); + case 145: + if (lookahead == 'l') ADVANCE(163); + END_STATE(); + case 146: + if (lookahead == 'l') ADVANCE(143); + END_STATE(); + case 147: + if (lookahead == 'm') ADVANCE(91); + END_STATE(); + case 148: + if (lookahead == 'm') ADVANCE(303); + END_STATE(); + case 149: + if (lookahead == 'n') ADVANCE(189); + END_STATE(); + case 150: + if (lookahead == 'n') ADVANCE(386); + if (lookahead == 't') ADVANCE(246); + END_STATE(); + case 151: + if (lookahead == 'n') ADVANCE(310); + END_STATE(); + case 152: + if (lookahead == 'n') ADVANCE(450); + END_STATE(); + case 153: + if (lookahead == 'n') ADVANCE(262); + END_STATE(); + case 154: + if (lookahead == 'n') ADVANCE(162); + END_STATE(); + case 155: + if (lookahead == 'n') ADVANCE(98); + END_STATE(); + case 156: + if (lookahead == 'n') ADVANCE(132); + END_STATE(); + case 157: + if (lookahead == 'n') ADVANCE(103); + END_STATE(); + case 158: + if (lookahead == 'n') ADVANCE(204); + END_STATE(); + case 159: + if (lookahead == 'n') ADVANCE(135); + END_STATE(); + case 160: + if (lookahead == 'n') ADVANCE(188); + END_STATE(); + case 161: + if (lookahead == 'n') ADVANCE(215); + END_STATE(); + case 162: + if (lookahead == 'o') ADVANCE(181); + END_STATE(); + case 163: + if (lookahead == 'o') ADVANCE(93); + END_STATE(); + case 164: + if (lookahead == 'o') ADVANCE(142); + END_STATE(); + case 165: + if (lookahead == 'o') ADVANCE(131); + END_STATE(); + case 166: + if (lookahead == 'o') ADVANCE(180); + END_STATE(); + case 167: + if (lookahead == 'o') ADVANCE(151); + END_STATE(); + case 168: + if (lookahead == 'o') ADVANCE(144); + END_STATE(); + case 169: + if (lookahead == 'o') ADVANCE(160); + END_STATE(); + case 170: + if (lookahead == 'o') ADVANCE(125); + END_STATE(); + case 171: + if (lookahead == 'p') ADVANCE(112); + END_STATE(); + case 172: + if (lookahead == 'p') ADVANCE(106); + END_STATE(); + case 173: + if (lookahead == 'p') ADVANCE(166); + END_STATE(); + case 174: + if (lookahead == 'r') ADVANCE(428); + END_STATE(); + case 175: + if (lookahead == 'r') ADVANCE(297); + END_STATE(); + case 176: + if (lookahead == 'r') ADVANCE(295); + END_STATE(); + case 177: + if (lookahead == 'r') ADVANCE(214); + if (lookahead == 'y') ADVANCE(172); + END_STATE(); + case 178: + if (lookahead == 'r') ADVANCE(152); + END_STATE(); + case 179: + if (lookahead == 'r') ADVANCE(153); + END_STATE(); + case 180: + if (lookahead == 'r') ADVANCE(200); + END_STATE(); + case 181: + if (lookahead == 'r') ADVANCE(118); + END_STATE(); + case 182: + if (lookahead == 'r') ADVANCE(205); + END_STATE(); + case 183: + if (lookahead == 's') ADVANCE(217); + END_STATE(); + case 184: + if (lookahead == 's') ADVANCE(401); + END_STATE(); + case 185: + if (lookahead == 's') ADVANCE(402); + END_STATE(); + case 186: + if (lookahead == 's') ADVANCE(198); + END_STATE(); + case 187: + if (lookahead == 's') ADVANCE(101); + END_STATE(); + case 188: + if (lookahead == 's') ADVANCE(199); + END_STATE(); + case 189: + if (lookahead == 's') ADVANCE(199); + if (lookahead == 't') ADVANCE(136); + END_STATE(); + case 190: + if (lookahead == 's') ADVANCE(114); + END_STATE(); + case 191: + if (lookahead == 's') ADVANCE(115); + END_STATE(); + case 192: + if (lookahead == 's') ADVANCE(117); + END_STATE(); + case 193: + if (lookahead == 's') ADVANCE(192); + END_STATE(); + case 194: + if (lookahead == 't') ADVANCE(289); + END_STATE(); + case 195: + if (lookahead == 't') ADVANCE(246); + END_STATE(); + case 196: + if (lookahead == 't') ADVANCE(92); + END_STATE(); + case 197: + if (lookahead == 't') ADVANCE(260); + END_STATE(); + case 198: + if (lookahead == 't') ADVANCE(261); + END_STATE(); + case 199: + if (lookahead == 't') ADVANCE(248); + END_STATE(); + case 200: + if (lookahead == 't') ADVANCE(245); + END_STATE(); + case 201: + if (lookahead == 't') ADVANCE(388); + END_STATE(); + case 202: + if (lookahead == 't') ADVANCE(308); + END_STATE(); + case 203: + if (lookahead == 't') ADVANCE(312); + END_STATE(); + case 204: + if (lookahead == 't') ADVANCE(292); + END_STATE(); + case 205: + if (lookahead == 't') ADVANCE(381); + END_STATE(); + case 206: + if (lookahead == 't') ADVANCE(213); + END_STATE(); + case 207: + if (lookahead == 't') ADVANCE(133); + END_STATE(); + case 208: + if (lookahead == 't') ADVANCE(176); + END_STATE(); + case 209: + if (lookahead == 't') ADVANCE(95); + END_STATE(); + case 210: + if (lookahead == 't') ADVANCE(216); + END_STATE(); + case 211: + if (lookahead == 'u') ADVANCE(146); + END_STATE(); + case 212: + if (lookahead == 'u') ADVANCE(148); + END_STATE(); + case 213: + if (lookahead == 'u') ADVANCE(178); + END_STATE(); + case 214: + if (lookahead == 'u') ADVANCE(105); + END_STATE(); + case 215: + if (lookahead == 'u') ADVANCE(107); + END_STATE(); + case 216: + if (lookahead == 'u') ADVANCE(179); + END_STATE(); + case 217: + if (lookahead == 'y') ADVANCE(147); + END_STATE(); + case 218: + if (lookahead == 'y') ADVANCE(172); + END_STATE(); + case 219: + if (lookahead == 'z') ADVANCE(104); + END_STATE(); + case 220: + if (aux_sym_named_escape_token1_character_set_1(lookahead)) ADVANCE(370); + if (lookahead == '/') ADVANCE(66); + if (lookahead == 'U') ADVANCE(228); + if (lookahead == '\\') ADVANCE(370); + if (lookahead == 'u') ADVANCE(224); + if (lookahead == 'x') ADVANCE(222); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(70) + END_STATE(); + case 221: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(369); + END_STATE(); + case 222: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(221); + END_STATE(); + case 223: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(222); + END_STATE(); + case 224: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(223); + END_STATE(); + case 225: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(224); + END_STATE(); + case 226: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(225); + END_STATE(); + case 227: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(226); + END_STATE(); + case 228: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(227); + END_STATE(); + case 229: + if (lookahead != 0 && + lookahead != '\r') ADVANCE(589); + if (lookahead == '\r') ADVANCE(590); + END_STATE(); + case 230: + if (eof) ADVANCE(235); + if (lookahead == '\n') SKIP(0) + END_STATE(); + case 231: + if (eof) ADVANCE(235); + if (lookahead == '\n') SKIP(0) + if (lookahead == '\r') SKIP(230) + END_STATE(); + case 232: + if (eof) ADVANCE(235); + if (lookahead == '\n') SKIP(234) + END_STATE(); + case 233: + if (eof) ADVANCE(235); + if (lookahead == '\n') SKIP(234) + if (lookahead == '\r') SKIP(232) + END_STATE(); + case 234: + if (eof) ADVANCE(235); + if (lookahead == '!') ADVANCE(84); + if (lookahead == '%') ADVANCE(406); + if (lookahead == '&') ADVANCE(400); + if (lookahead == '(') ADVANCE(253); + if (lookahead == ')') ADVANCE(254); + if (lookahead == '*') ADVANCE(306); + if (lookahead == '+') ADVANCE(394); + if (lookahead == ',') ADVANCE(244); + if (lookahead == '-') ADVANCE(396); + if (lookahead == '.') ADVANCE(362); + if (lookahead == '/') ADVANCE(404); + if (lookahead == '0') ADVANCE(329); + if (lookahead == '1') ADVANCE(331); + if (lookahead == '2') ADVANCE(332); + if (lookahead == '3') ADVANCE(333); + if (lookahead == '4') ADVANCE(334); + if (lookahead == '5') ADVANCE(335); + if (lookahead == '6') ADVANCE(336); + if (lookahead == '7') ADVANCE(337); + if (lookahead == '8') ADVANCE(338); + if (lookahead == '9') ADVANCE(339); + if (lookahead == ':') ADVANCE(250); + if (lookahead == ';') ADVANCE(237); + if (lookahead == '<') ADVANCE(413); + if (lookahead == '=') ADVANCE(239); + if (lookahead == '>') ADVANCE(415); + if (lookahead == '?') ADVANCE(392); + if (lookahead == '@') ADVANCE(120); + if (lookahead == '[') ADVANCE(316); + if (lookahead == '\\') SKIP(233) + if (lookahead == ']') ADVANCE(317); + if (lookahead == '^') ADVANCE(411); + if (lookahead == 'a') ADVANCE(184); + if (lookahead == 'c') ADVANCE(128); + if (lookahead == 'd') ADVANCE(110); + if (lookahead == 'e') ADVANCE(141); + if (lookahead == 'f') ADVANCE(78); + if (lookahead == 'i') ADVANCE(72); + if (lookahead == 'l') ADVANCE(116); + if (lookahead == 's') ADVANCE(129); + if (lookahead == 't') ADVANCE(218); + if (lookahead == 'u') ADVANCE(73); + if (lookahead == '{') ADVANCE(242); + if (lookahead == '|') ADVANCE(314); + if (lookahead == '}') ADVANCE(243); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == '\r' || + lookahead == ' ') SKIP(234) + END_STATE(); + case 235: + ACCEPT_TOKEN(ts_builtin_sym_end); + END_STATE(); + case 236: + ACCEPT_TOKEN(anon_sym_use); + END_STATE(); + case 237: + ACCEPT_TOKEN(anon_sym_SEMI); + END_STATE(); + case 238: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(419); + END_STATE(); + case 239: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(419); + if (lookahead == '>') ADVANCE(432); + END_STATE(); + case 240: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '>') ADVANCE(432); + END_STATE(); + case 241: + ACCEPT_TOKEN(anon_sym_COLON_COLON); + END_STATE(); + case 242: + ACCEPT_TOKEN(anon_sym_LBRACE); + END_STATE(); + case 243: + ACCEPT_TOKEN(anon_sym_RBRACE); + END_STATE(); + case 244: + ACCEPT_TOKEN(anon_sym_COMMA); + END_STATE(); + case 245: + ACCEPT_TOKEN(anon_sym_export); + END_STATE(); + case 246: + ACCEPT_TOKEN(anon_sym_let); + END_STATE(); + case 247: + ACCEPT_TOKEN(anon_sym_let); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 248: + ACCEPT_TOKEN(anon_sym_const); + END_STATE(); + case 249: + ACCEPT_TOKEN(anon_sym_const); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 250: + ACCEPT_TOKEN(anon_sym_COLON); + END_STATE(); + case 251: + ACCEPT_TOKEN(anon_sym_COLON); + if (lookahead == ':') ADVANCE(241); + END_STATE(); + case 252: + ACCEPT_TOKEN(anon_sym_ATsymbol); + END_STATE(); + case 253: + ACCEPT_TOKEN(anon_sym_LPAREN); + END_STATE(); + case 254: + ACCEPT_TOKEN(anon_sym_RPAREN); + END_STATE(); + case 255: + ACCEPT_TOKEN(anon_sym_def); + END_STATE(); + case 256: + ACCEPT_TOKEN(anon_sym_type); + END_STATE(); + case 257: + ACCEPT_TOKEN(anon_sym_fn); + END_STATE(); + case 258: + ACCEPT_TOKEN(anon_sym_fn); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 259: + ACCEPT_TOKEN(anon_sym_ATfini); + END_STATE(); + case 260: + ACCEPT_TOKEN(anon_sym_ATinit); + END_STATE(); + case 261: + ACCEPT_TOKEN(anon_sym_ATtest); + END_STATE(); + case 262: + ACCEPT_TOKEN(anon_sym_ATnoreturn); + END_STATE(); + case 263: + ACCEPT_TOKEN(anon_sym_BANG); + END_STATE(); + case 264: + ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '=') ADVANCE(420); + END_STATE(); + case 265: + ACCEPT_TOKEN(anon_sym_rune); + END_STATE(); + case 266: + ACCEPT_TOKEN(anon_sym_rune); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 267: + ACCEPT_TOKEN(anon_sym_str); + if (lookahead == 'u') ADVANCE(96); + END_STATE(); + case 268: + ACCEPT_TOKEN(anon_sym_str); + if (lookahead == 'u') ADVANCE(476); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 269: + ACCEPT_TOKEN(anon_sym_bool); + END_STATE(); + case 270: + ACCEPT_TOKEN(anon_sym_bool); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 271: + ACCEPT_TOKEN(anon_sym_void); + END_STATE(); + case 272: + ACCEPT_TOKEN(anon_sym_void); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 273: + ACCEPT_TOKEN(anon_sym_i8); + END_STATE(); + case 274: + ACCEPT_TOKEN(anon_sym_i8); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 275: + ACCEPT_TOKEN(anon_sym_i16); + END_STATE(); + case 276: + ACCEPT_TOKEN(anon_sym_i16); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 277: + ACCEPT_TOKEN(anon_sym_i32); + END_STATE(); + case 278: + ACCEPT_TOKEN(anon_sym_i32); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 279: + ACCEPT_TOKEN(anon_sym_i64); + END_STATE(); + case 280: + ACCEPT_TOKEN(anon_sym_i64); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 281: + ACCEPT_TOKEN(anon_sym_u8); + END_STATE(); + case 282: + ACCEPT_TOKEN(anon_sym_u8); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 283: + ACCEPT_TOKEN(anon_sym_u16); + END_STATE(); + case 284: + ACCEPT_TOKEN(anon_sym_u16); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 285: + ACCEPT_TOKEN(anon_sym_u32); + END_STATE(); + case 286: + ACCEPT_TOKEN(anon_sym_u32); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 287: + ACCEPT_TOKEN(anon_sym_u64); + END_STATE(); + case 288: + ACCEPT_TOKEN(anon_sym_u64); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 289: + ACCEPT_TOKEN(anon_sym_int); + END_STATE(); + case 290: + ACCEPT_TOKEN(anon_sym_int); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 291: + ACCEPT_TOKEN(anon_sym_uint); + if (lookahead == 'p') ADVANCE(575); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 292: + ACCEPT_TOKEN(anon_sym_uint); + if (lookahead == 'p') ADVANCE(208); + END_STATE(); + case 293: + ACCEPT_TOKEN(anon_sym_size); + END_STATE(); + case 294: + ACCEPT_TOKEN(anon_sym_size); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 295: + ACCEPT_TOKEN(anon_sym_uintptr); + END_STATE(); + case 296: + ACCEPT_TOKEN(anon_sym_uintptr); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 297: + ACCEPT_TOKEN(anon_sym_char); + END_STATE(); + case 298: + ACCEPT_TOKEN(anon_sym_char); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 299: + ACCEPT_TOKEN(anon_sym_f32); + END_STATE(); + case 300: + ACCEPT_TOKEN(anon_sym_f32); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 301: + ACCEPT_TOKEN(anon_sym_f64); + END_STATE(); + case 302: + ACCEPT_TOKEN(anon_sym_f64); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 303: + ACCEPT_TOKEN(anon_sym_enum); + END_STATE(); + case 304: + ACCEPT_TOKEN(anon_sym_enum); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 305: + ACCEPT_TOKEN(anon_sym_STAR); + END_STATE(); + case 306: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '=') ADVANCE(437); + END_STATE(); + case 307: + ACCEPT_TOKEN(anon_sym_nullable); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 308: + ACCEPT_TOKEN(anon_sym_struct); + END_STATE(); + case 309: + ACCEPT_TOKEN(anon_sym_struct); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 310: + ACCEPT_TOKEN(anon_sym_union); + END_STATE(); + case 311: + ACCEPT_TOKEN(anon_sym_union); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 312: + ACCEPT_TOKEN(anon_sym_AToffset); + END_STATE(); + case 313: + ACCEPT_TOKEN(anon_sym_PIPE); + END_STATE(); + case 314: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '=') ADVANCE(443); + if (lookahead == '|') ADVANCE(423); + END_STATE(); + case 315: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '|') ADVANCE(423); + END_STATE(); + case 316: + ACCEPT_TOKEN(anon_sym_LBRACK); + END_STATE(); + case 317: + ACCEPT_TOKEN(anon_sym_RBRACK); + END_STATE(); + case 318: + ACCEPT_TOKEN(anon_sym__); + END_STATE(); + case 319: + ACCEPT_TOKEN(anon_sym__); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 320: + ACCEPT_TOKEN(anon_sym_DOT_DOT_DOT); + END_STATE(); + case 321: + ACCEPT_TOKEN(anon_sym_true); + END_STATE(); + case 322: + ACCEPT_TOKEN(anon_sym_true); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 323: + ACCEPT_TOKEN(anon_sym_false); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 324: + ACCEPT_TOKEN(anon_sym_null); + END_STATE(); + case 325: + ACCEPT_TOKEN(anon_sym_null); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 326: + ACCEPT_TOKEN(anon_sym_0x); + END_STATE(); + case 327: + ACCEPT_TOKEN(anon_sym_0o); + END_STATE(); + case 328: + ACCEPT_TOKEN(anon_sym_0b); + END_STATE(); + case 329: + ACCEPT_TOKEN(anon_sym_0); + END_STATE(); + case 330: + ACCEPT_TOKEN(anon_sym_0); + if (lookahead == 'b') ADVANCE(328); + if (lookahead == 'o') ADVANCE(327); + if (lookahead == 'x') ADVANCE(326); + END_STATE(); + case 331: + ACCEPT_TOKEN(anon_sym_1); + END_STATE(); + case 332: + ACCEPT_TOKEN(anon_sym_2); + END_STATE(); + case 333: + ACCEPT_TOKEN(anon_sym_3); + END_STATE(); + case 334: + ACCEPT_TOKEN(anon_sym_4); + END_STATE(); + case 335: + ACCEPT_TOKEN(anon_sym_5); + END_STATE(); + case 336: + ACCEPT_TOKEN(anon_sym_6); + END_STATE(); + case 337: + ACCEPT_TOKEN(anon_sym_7); + END_STATE(); + case 338: + ACCEPT_TOKEN(anon_sym_8); + END_STATE(); + case 339: + ACCEPT_TOKEN(anon_sym_9); + END_STATE(); + case 340: + ACCEPT_TOKEN(anon_sym_A); + END_STATE(); + case 341: + ACCEPT_TOKEN(anon_sym_B); + END_STATE(); + case 342: + ACCEPT_TOKEN(anon_sym_C); + END_STATE(); + case 343: + ACCEPT_TOKEN(anon_sym_D); + END_STATE(); + case 344: + ACCEPT_TOKEN(anon_sym_E); + END_STATE(); + case 345: + ACCEPT_TOKEN(anon_sym_F); + END_STATE(); + case 346: + ACCEPT_TOKEN(anon_sym_a); + if (lookahead == 'l') ADVANCE(145); + if (lookahead == 'p') ADVANCE(171); + if (lookahead == 's') ADVANCE(401); + END_STATE(); + case 347: + ACCEPT_TOKEN(anon_sym_a); + if (lookahead == 's') ADVANCE(401); + END_STATE(); + case 348: + ACCEPT_TOKEN(anon_sym_b); + END_STATE(); + case 349: + ACCEPT_TOKEN(anon_sym_b); + if (lookahead == 'o') ADVANCE(164); + if (lookahead == 'r') ADVANCE(109); + END_STATE(); + case 350: + ACCEPT_TOKEN(anon_sym_c); + END_STATE(); + case 351: + ACCEPT_TOKEN(anon_sym_c); + if (lookahead == 'h') ADVANCE(89); + if (lookahead == 'o') ADVANCE(149); + END_STATE(); + case 352: + ACCEPT_TOKEN(anon_sym_d); + END_STATE(); + case 353: + ACCEPT_TOKEN(anon_sym_e); + if (lookahead == 'l') ADVANCE(187); + END_STATE(); + case 354: + ACCEPT_TOKEN(anon_sym_e); + if (lookahead == 'l') ADVANCE(187); + if (lookahead == 'n') ADVANCE(212); + if (lookahead == 'x') ADVANCE(173); + END_STATE(); + case 355: + ACCEPT_TOKEN(anon_sym_f); + END_STATE(); + case 356: + ACCEPT_TOKEN(anon_sym_f); + if (lookahead == 'n') ADVANCE(257); + if (lookahead == 'o') ADVANCE(174); + if (lookahead == 'r') ADVANCE(113); + END_STATE(); + case 357: + ACCEPT_TOKEN(anon_sym_i); + if (lookahead == '1') ADVANCE(82); + if (lookahead == '3') ADVANCE(74); + if (lookahead == '6') ADVANCE(79); + if (lookahead == '8') ADVANCE(273); + if (lookahead == 'f') ADVANCE(424); + if (lookahead == 'n') ADVANCE(194); + if (lookahead == 's') ADVANCE(402); + END_STATE(); + case 358: + ACCEPT_TOKEN(anon_sym_i); + if (lookahead == '1') ADVANCE(82); + if (lookahead == '3') ADVANCE(74); + if (lookahead == '6') ADVANCE(79); + if (lookahead == '8') ADVANCE(273); + if (lookahead == 's') ADVANCE(402); + END_STATE(); + case 359: + ACCEPT_TOKEN(anon_sym_u); + if (lookahead == '1') ADVANCE(83); + if (lookahead == '3') ADVANCE(75); + if (lookahead == '6') ADVANCE(80); + if (lookahead == '8') ADVANCE(281); + END_STATE(); + case 360: + ACCEPT_TOKEN(anon_sym_u); + if (lookahead == '1') ADVANCE(83); + if (lookahead == '3') ADVANCE(75); + if (lookahead == '6') ADVANCE(80); + if (lookahead == '8') ADVANCE(281); + if (lookahead == 'n') ADVANCE(134); + if (lookahead == 's') ADVANCE(100); + END_STATE(); + case 361: + ACCEPT_TOKEN(anon_sym_z); + END_STATE(); + case 362: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(391); + END_STATE(); + case 363: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(390); + END_STATE(); + case 364: + ACCEPT_TOKEN(anon_sym_DOT); + if (lookahead == '.') ADVANCE(62); + END_STATE(); + case 365: + ACCEPT_TOKEN(anon_sym_SQUOTE); + END_STATE(); + case 366: + ACCEPT_TOKEN(aux_sym_rune_token1); + END_STATE(); + case 367: + ACCEPT_TOKEN(aux_sym_rune_token1); + if (lookahead == '/') ADVANCE(589); + END_STATE(); + case 368: + ACCEPT_TOKEN(anon_sym_BSLASH); + END_STATE(); + case 369: + ACCEPT_TOKEN(aux_sym_escape_sequence_token1); + END_STATE(); + case 370: + ACCEPT_TOKEN(aux_sym_named_escape_token1); + END_STATE(); + case 371: + ACCEPT_TOKEN(anon_sym_DQUOTE); + END_STATE(); + case 372: + ACCEPT_TOKEN(aux_sym_string_char_token1); + END_STATE(); + case 373: + ACCEPT_TOKEN(aux_sym_string_char_token1); + if (lookahead == '/') ADVANCE(589); + END_STATE(); + case 374: + ACCEPT_TOKEN(anon_sym_alloc); + END_STATE(); + case 375: + ACCEPT_TOKEN(anon_sym_alloc); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 376: + ACCEPT_TOKEN(anon_sym_append); + END_STATE(); + case 377: + ACCEPT_TOKEN(anon_sym_append); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 378: + ACCEPT_TOKEN(anon_sym_free); + END_STATE(); + case 379: + ACCEPT_TOKEN(anon_sym_free); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 380: + ACCEPT_TOKEN(anon_sym_delete); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 381: + ACCEPT_TOKEN(anon_sym_assert); + END_STATE(); + case 382: + ACCEPT_TOKEN(anon_sym_assert); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 383: + ACCEPT_TOKEN(anon_sym_static); + END_STATE(); + case 384: + ACCEPT_TOKEN(anon_sym_static); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 385: + ACCEPT_TOKEN(anon_sym_abort); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 386: + ACCEPT_TOKEN(anon_sym_len); + END_STATE(); + case 387: + ACCEPT_TOKEN(anon_sym_len); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 388: + ACCEPT_TOKEN(anon_sym_offset); + END_STATE(); + case 389: + ACCEPT_TOKEN(anon_sym_offset); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 390: + ACCEPT_TOKEN(anon_sym_DOT_DOT); + END_STATE(); + case 391: + ACCEPT_TOKEN(anon_sym_DOT_DOT); + if (lookahead == '.') ADVANCE(320); + END_STATE(); + case 392: + ACCEPT_TOKEN(anon_sym_QMARK); + END_STATE(); + case 393: + ACCEPT_TOKEN(anon_sym_PLUS); + END_STATE(); + case 394: + ACCEPT_TOKEN(anon_sym_PLUS); + if (lookahead == '=') ADVANCE(435); + END_STATE(); + case 395: + ACCEPT_TOKEN(anon_sym_DASH); + END_STATE(); + case 396: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '=') ADVANCE(436); + END_STATE(); + case 397: + ACCEPT_TOKEN(anon_sym_TILDE); + END_STATE(); + case 398: + ACCEPT_TOKEN(anon_sym_AMP); + END_STATE(); + case 399: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(421); + END_STATE(); + case 400: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(421); + if (lookahead == '=') ADVANCE(442); + END_STATE(); + case 401: + ACCEPT_TOKEN(anon_sym_as); + END_STATE(); + case 402: + ACCEPT_TOKEN(anon_sym_is); + END_STATE(); + case 403: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(589); + END_STATE(); + case 404: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '/') ADVANCE(589); + if (lookahead == '=') ADVANCE(438); + END_STATE(); + case 405: + ACCEPT_TOKEN(anon_sym_PERCENT); + END_STATE(); + case 406: + ACCEPT_TOKEN(anon_sym_PERCENT); + if (lookahead == '=') ADVANCE(439); + END_STATE(); + case 407: + ACCEPT_TOKEN(anon_sym_LT_LT); + END_STATE(); + case 408: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '=') ADVANCE(440); + END_STATE(); + case 409: + ACCEPT_TOKEN(anon_sym_GT_GT); + END_STATE(); + case 410: + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '=') ADVANCE(441); + END_STATE(); + case 411: + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '=') ADVANCE(444); + if (lookahead == '^') ADVANCE(422); + END_STATE(); + case 412: + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '^') ADVANCE(422); + END_STATE(); + case 413: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(408); + if (lookahead == '=') ADVANCE(417); + END_STATE(); + case 414: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(407); + if (lookahead == '=') ADVANCE(417); + END_STATE(); + case 415: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(418); + if (lookahead == '>') ADVANCE(410); + END_STATE(); + case 416: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(418); + if (lookahead == '>') ADVANCE(409); + END_STATE(); + case 417: + ACCEPT_TOKEN(anon_sym_LT_EQ); + END_STATE(); + case 418: + ACCEPT_TOKEN(anon_sym_GT_EQ); + END_STATE(); + case 419: + ACCEPT_TOKEN(anon_sym_EQ_EQ); + END_STATE(); + case 420: + ACCEPT_TOKEN(anon_sym_BANG_EQ); + END_STATE(); + case 421: + ACCEPT_TOKEN(anon_sym_AMP_AMP); + END_STATE(); + case 422: + ACCEPT_TOKEN(anon_sym_CARET_CARET); + END_STATE(); + case 423: + ACCEPT_TOKEN(anon_sym_PIPE_PIPE); + END_STATE(); + case 424: + ACCEPT_TOKEN(anon_sym_if); + END_STATE(); + case 425: + ACCEPT_TOKEN(anon_sym_if); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 426: + ACCEPT_TOKEN(anon_sym_else); + END_STATE(); + case 427: + ACCEPT_TOKEN(anon_sym_else); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 428: + ACCEPT_TOKEN(anon_sym_for); + END_STATE(); + case 429: + ACCEPT_TOKEN(anon_sym_for); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 430: + ACCEPT_TOKEN(anon_sym_switch); + END_STATE(); + case 431: + ACCEPT_TOKEN(anon_sym_switch); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 432: + ACCEPT_TOKEN(anon_sym_EQ_GT); + END_STATE(); + case 433: + ACCEPT_TOKEN(anon_sym_match); + END_STATE(); + case 434: + ACCEPT_TOKEN(anon_sym_match); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 435: + ACCEPT_TOKEN(anon_sym_PLUS_EQ); + END_STATE(); + case 436: + ACCEPT_TOKEN(anon_sym_DASH_EQ); + END_STATE(); + case 437: + ACCEPT_TOKEN(anon_sym_STAR_EQ); + END_STATE(); + case 438: + ACCEPT_TOKEN(anon_sym_SLASH_EQ); + END_STATE(); + case 439: + ACCEPT_TOKEN(anon_sym_PERCENT_EQ); + END_STATE(); + case 440: + ACCEPT_TOKEN(anon_sym_LT_LT_EQ); + END_STATE(); + case 441: + ACCEPT_TOKEN(anon_sym_GT_GT_EQ); + END_STATE(); + case 442: + ACCEPT_TOKEN(anon_sym_AMP_EQ); + END_STATE(); + case 443: + ACCEPT_TOKEN(anon_sym_PIPE_EQ); + END_STATE(); + case 444: + ACCEPT_TOKEN(anon_sym_CARET_EQ); + END_STATE(); + case 445: + ACCEPT_TOKEN(anon_sym_defer); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 446: + ACCEPT_TOKEN(anon_sym_break); + END_STATE(); + case 447: + ACCEPT_TOKEN(anon_sym_break); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 448: + ACCEPT_TOKEN(anon_sym_continue); + END_STATE(); + case 449: + ACCEPT_TOKEN(anon_sym_continue); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 450: + ACCEPT_TOKEN(anon_sym_return); + END_STATE(); + case 451: + ACCEPT_TOKEN(anon_sym_return); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 452: + ACCEPT_TOKEN(sym_name); + if (lookahead == '1') ADVANCE(461); + if (lookahead == '3') ADVANCE(455); + if (lookahead == '6') ADVANCE(459); + if (lookahead == '8') ADVANCE(274); + if (lookahead == 'n') ADVANCE(571); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 453: + ACCEPT_TOKEN(sym_name); + if (lookahead == '1') ADVANCE(462); + if (lookahead == '3') ADVANCE(456); + if (lookahead == '6') ADVANCE(460); + if (lookahead == '8') ADVANCE(282); + if (lookahead == 'i') ADVANCE(537); + if (lookahead == 'n') ADVANCE(514); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 454: + ACCEPT_TOKEN(sym_name); + if (lookahead == '2') ADVANCE(300); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 455: + ACCEPT_TOKEN(sym_name); + if (lookahead == '2') ADVANCE(278); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 456: + ACCEPT_TOKEN(sym_name); + if (lookahead == '2') ADVANCE(286); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 457: + ACCEPT_TOKEN(sym_name); + if (lookahead == '3') ADVANCE(454); + if (lookahead == '6') ADVANCE(458); + if (lookahead == 'n') ADVANCE(258); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 458: + ACCEPT_TOKEN(sym_name); + if (lookahead == '4') ADVANCE(302); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 459: + ACCEPT_TOKEN(sym_name); + if (lookahead == '4') ADVANCE(280); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 460: + ACCEPT_TOKEN(sym_name); + if (lookahead == '4') ADVANCE(288); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 461: + ACCEPT_TOKEN(sym_name); + if (lookahead == '6') ADVANCE(276); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 462: + ACCEPT_TOKEN(sym_name); + if (lookahead == '6') ADVANCE(284); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 463: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'a') ADVANCE(565); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 464: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'a') ADVANCE(516); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 465: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'a') ADVANCE(471); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 466: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'a') ADVANCE(574); + if (lookahead == 'r') ADVANCE(581); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 467: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'a') ADVANCE(551); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 468: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'a') ADVANCE(526); + if (lookahead == 'o') ADVANCE(548); + if (lookahead == 'r') ADVANCE(498); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 469: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'a') ADVANCE(526); + if (lookahead == 'r') ADVANCE(498); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 470: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'b') ADVANCE(543); + if (lookahead == 'l') ADVANCE(519); + if (lookahead == 'p') ADVANCE(547); + if (lookahead == 's') ADVANCE(561); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 471: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'b') ADVANCE(524); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 472: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'c') ADVANCE(504); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 473: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'c') ADVANCE(375); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 474: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'c') ADVANCE(384); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 475: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'c') ADVANCE(505); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 476: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'c') ADVANCE(570); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 477: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'd') ADVANCE(272); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 478: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'd') ADVANCE(377); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 479: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(502); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 480: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(529); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 481: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(427); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 482: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(379); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 483: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(294); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 484: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(322); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 485: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(323); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 486: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(380); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 487: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(449); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 488: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(266); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 489: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(307); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 490: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(464); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 491: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(534); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 492: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(573); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 493: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(549); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 494: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(523); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 495: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(530); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 496: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(576); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 497: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(569); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 498: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(482); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 499: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'e') ADVANCE(558); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 500: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'f') ADVANCE(425); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 501: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'f') ADVANCE(503); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 502: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'f') ADVANCE(493); + if (lookahead == 'l') ADVANCE(496); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 503: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'f') ADVANCE(564); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 504: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'h') ADVANCE(434); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 505: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'h') ADVANCE(431); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 506: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'h') ADVANCE(467); + if (lookahead == 'o') ADVANCE(533); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 507: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'h') ADVANCE(467); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 508: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'i') ADVANCE(587); + if (lookahead == 't') ADVANCE(466); + if (lookahead == 'w') ADVANCE(515); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 509: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'i') ADVANCE(587); + if (lookahead == 't') ADVANCE(466); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 510: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'i') ADVANCE(587); + if (lookahead == 't') ADVANCE(550); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 511: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'i') ADVANCE(477); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 512: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'i') ADVANCE(539); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 513: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'i') ADVANCE(474); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 514: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'i') ADVANCE(546); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 515: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'i') ADVANCE(577); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 516: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'k') ADVANCE(447); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 517: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'l') ADVANCE(325); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 518: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'l') ADVANCE(270); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 519: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'l') ADVANCE(542); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 520: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'l') ADVANCE(517); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 521: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'l') ADVANCE(465); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 522: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'l') ADVANCE(521); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 523: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'l') ADVANCE(496); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 524: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'l') ADVANCE(489); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 525: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'l') ADVANCE(562); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 526: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'l') ADVANCE(563); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 527: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'm') ADVANCE(304); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 528: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(559); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 529: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(387); + if (lookahead == 't') ADVANCE(247); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 530: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(387); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 531: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(451); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 532: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(311); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 533: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(560); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 534: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(478); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 535: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(514); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 536: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(579); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 537: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(572); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 538: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(488); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 539: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'n') ADVANCE(585); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 540: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'o') ADVANCE(528); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 541: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'o') ADVANCE(511); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 542: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'o') ADVANCE(473); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 543: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'o') ADVANCE(557); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 544: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'o') ADVANCE(545); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 545: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'o') ADVANCE(518); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 546: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'o') ADVANCE(532); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 547: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'p') ADVANCE(491); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 548: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(429); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 549: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(445); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 550: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(268); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 551: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(298); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 552: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(296); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 553: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(584); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 554: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(490); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 555: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(581); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 556: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(531); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 557: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(566); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 558: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'r') ADVANCE(568); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 559: + ACCEPT_TOKEN(sym_name); + if (lookahead == 's') ADVANCE(567); + if (lookahead == 't') ADVANCE(512); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 560: + ACCEPT_TOKEN(sym_name); + if (lookahead == 's') ADVANCE(567); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 561: + ACCEPT_TOKEN(sym_name); + if (lookahead == 's') ADVANCE(499); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 562: + ACCEPT_TOKEN(sym_name); + if (lookahead == 's') ADVANCE(481); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 563: + ACCEPT_TOKEN(sym_name); + if (lookahead == 's') ADVANCE(485); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 564: + ACCEPT_TOKEN(sym_name); + if (lookahead == 's') ADVANCE(497); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 565: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(472); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 566: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(385); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 567: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(249); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 568: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(382); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 569: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(389); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 570: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(309); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 571: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(290); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 572: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(291); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 573: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(582); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 574: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(513); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 575: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(552); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 576: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(486); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 577: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(475); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 578: + ACCEPT_TOKEN(sym_name); + if (lookahead == 't') ADVANCE(555); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 579: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'u') ADVANCE(527); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 580: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'u') ADVANCE(520); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 581: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'u') ADVANCE(476); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 582: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'u') ADVANCE(556); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 583: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'u') ADVANCE(538); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 584: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'u') ADVANCE(484); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 585: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'u') ADVANCE(487); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 586: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'u') ADVANCE(522); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 587: + ACCEPT_TOKEN(sym_name); + if (lookahead == 'z') ADVANCE(483); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'y')) ADVANCE(588); + END_STATE(); + case 588: + ACCEPT_TOKEN(sym_name); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(588); + END_STATE(); + case 589: + ACCEPT_TOKEN(sym_comment); + if (lookahead == '\\') ADVANCE(229); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(589); + END_STATE(); + case 590: + ACCEPT_TOKEN(sym_comment); + if (lookahead != 0 && + lookahead != '\\') ADVANCE(589); + if (lookahead == '\\') ADVANCE(229); + END_STATE(); + default: + return false; + } +} + +static TSLexMode ts_lex_modes[STATE_COUNT] = { + [0] = {.lex_state = 0}, + [1] = {.lex_state = 234}, + [2] = {.lex_state = 50}, + [3] = {.lex_state = 51}, + [4] = {.lex_state = 53}, + [5] = {.lex_state = 51}, + [6] = {.lex_state = 54}, + [7] = {.lex_state = 51}, + [8] = {.lex_state = 52}, + [9] = {.lex_state = 51}, + [10] = {.lex_state = 51}, + [11] = {.lex_state = 51}, + [12] = {.lex_state = 52}, + [13] = {.lex_state = 52}, + [14] = {.lex_state = 51}, + [15] = {.lex_state = 52}, + [16] = {.lex_state = 51}, + [17] = {.lex_state = 51}, + [18] = {.lex_state = 51}, + [19] = {.lex_state = 51}, + [20] = {.lex_state = 51}, + [21] = {.lex_state = 52}, + [22] = {.lex_state = 54}, + [23] = {.lex_state = 54}, + [24] = {.lex_state = 51}, + [25] = {.lex_state = 51}, + [26] = {.lex_state = 51}, + [27] = {.lex_state = 51}, + [28] = {.lex_state = 51}, + [29] = {.lex_state = 54}, + [30] = {.lex_state = 51}, + [31] = {.lex_state = 51}, + [32] = {.lex_state = 51}, + [33] = {.lex_state = 51}, + [34] = {.lex_state = 51}, + [35] = {.lex_state = 51}, + [36] = {.lex_state = 51}, + [37] = {.lex_state = 51}, + [38] = {.lex_state = 51}, + [39] = {.lex_state = 51}, + [40] = {.lex_state = 51}, + [41] = {.lex_state = 51}, + [42] = {.lex_state = 51}, + [43] = {.lex_state = 51}, + [44] = {.lex_state = 51}, + [45] = {.lex_state = 51}, + [46] = {.lex_state = 51}, + [47] = {.lex_state = 51}, + [48] = {.lex_state = 51}, + [49] = {.lex_state = 51}, + [50] = {.lex_state = 51}, + [51] = {.lex_state = 51}, + [52] = {.lex_state = 51}, + [53] = {.lex_state = 51}, + [54] = {.lex_state = 51}, + [55] = {.lex_state = 51}, + [56] = {.lex_state = 51}, + [57] = {.lex_state = 51}, + [58] = {.lex_state = 51}, + [59] = {.lex_state = 51}, + [60] = {.lex_state = 51}, + [61] = {.lex_state = 51}, + [62] = {.lex_state = 51}, + [63] = {.lex_state = 51}, + [64] = {.lex_state = 51}, + [65] = {.lex_state = 51}, + [66] = {.lex_state = 51}, + [67] = {.lex_state = 51}, + [68] = {.lex_state = 51}, + [69] = {.lex_state = 51}, + [70] = {.lex_state = 51}, + [71] = {.lex_state = 51}, + [72] = {.lex_state = 51}, + [73] = {.lex_state = 51}, + [74] = {.lex_state = 51}, + [75] = {.lex_state = 51}, + [76] = {.lex_state = 51}, + [77] = {.lex_state = 51}, + [78] = {.lex_state = 51}, + [79] = {.lex_state = 51}, + [80] = {.lex_state = 51}, + [81] = {.lex_state = 51}, + [82] = {.lex_state = 51}, + [83] = {.lex_state = 51}, + [84] = {.lex_state = 51}, + [85] = {.lex_state = 51}, + [86] = {.lex_state = 51}, + [87] = {.lex_state = 51}, + [88] = {.lex_state = 51}, + [89] = {.lex_state = 51}, + [90] = {.lex_state = 51}, + [91] = {.lex_state = 51}, + [92] = {.lex_state = 51}, + [93] = {.lex_state = 51}, + [94] = {.lex_state = 51}, + [95] = {.lex_state = 51}, + [96] = {.lex_state = 51}, + [97] = {.lex_state = 51}, + [98] = {.lex_state = 51}, + [99] = {.lex_state = 51}, + [100] = {.lex_state = 51}, + [101] = {.lex_state = 51}, + [102] = {.lex_state = 51}, + [103] = {.lex_state = 45}, + [104] = {.lex_state = 45}, + [105] = {.lex_state = 56}, + [106] = {.lex_state = 56}, + [107] = {.lex_state = 45}, + [108] = {.lex_state = 55}, + [109] = {.lex_state = 55}, + [110] = {.lex_state = 55}, + [111] = {.lex_state = 55}, + [112] = {.lex_state = 55}, + [113] = {.lex_state = 55}, + [114] = {.lex_state = 46}, + [115] = {.lex_state = 46}, + [116] = {.lex_state = 55}, + [117] = {.lex_state = 55}, + [118] = {.lex_state = 46}, + [119] = {.lex_state = 44}, + [120] = {.lex_state = 44}, + [121] = {.lex_state = 55}, + [122] = {.lex_state = 55}, + [123] = {.lex_state = 55}, + [124] = {.lex_state = 55}, + [125] = {.lex_state = 55}, + [126] = {.lex_state = 44}, + [127] = {.lex_state = 55}, + [128] = {.lex_state = 55}, + [129] = {.lex_state = 45}, + [130] = {.lex_state = 55}, + [131] = {.lex_state = 55}, + [132] = {.lex_state = 55}, + [133] = {.lex_state = 55}, + [134] = {.lex_state = 55}, + [135] = {.lex_state = 55}, + [136] = {.lex_state = 45}, + [137] = {.lex_state = 55}, + [138] = {.lex_state = 55}, + [139] = {.lex_state = 45}, + [140] = {.lex_state = 46}, + [141] = {.lex_state = 55}, + [142] = {.lex_state = 55}, + [143] = {.lex_state = 46}, + [144] = {.lex_state = 45}, + [145] = {.lex_state = 48}, + [146] = {.lex_state = 55}, + [147] = {.lex_state = 55}, + [148] = {.lex_state = 55}, + [149] = {.lex_state = 48}, + [150] = {.lex_state = 45}, + [151] = {.lex_state = 55}, + [152] = {.lex_state = 55}, + [153] = {.lex_state = 55}, + [154] = {.lex_state = 45}, + [155] = {.lex_state = 55}, + [156] = {.lex_state = 46}, + [157] = {.lex_state = 48}, + [158] = {.lex_state = 45}, + [159] = {.lex_state = 45}, + [160] = {.lex_state = 44}, + [161] = {.lex_state = 44}, + [162] = {.lex_state = 44}, + [163] = {.lex_state = 58}, + [164] = {.lex_state = 48}, + [165] = {.lex_state = 58}, + [166] = {.lex_state = 46}, + [167] = {.lex_state = 58}, + [168] = {.lex_state = 58}, + [169] = {.lex_state = 58}, + [170] = {.lex_state = 51}, + [171] = {.lex_state = 48}, + [172] = {.lex_state = 58}, + [173] = {.lex_state = 44}, + [174] = {.lex_state = 44}, + [175] = {.lex_state = 58}, + [176] = {.lex_state = 58}, + [177] = {.lex_state = 58}, + [178] = {.lex_state = 44}, + [179] = {.lex_state = 58}, + [180] = {.lex_state = 58}, + [181] = {.lex_state = 58}, + [182] = {.lex_state = 58}, + [183] = {.lex_state = 234}, + [184] = {.lex_state = 58}, + [185] = {.lex_state = 58}, + [186] = {.lex_state = 58}, + [187] = {.lex_state = 58}, + [188] = {.lex_state = 58}, + [189] = {.lex_state = 58}, + [190] = {.lex_state = 58}, + [191] = {.lex_state = 58}, + [192] = {.lex_state = 58}, + [193] = {.lex_state = 58}, + [194] = {.lex_state = 58}, + [195] = {.lex_state = 58}, + [196] = {.lex_state = 0}, + [197] = {.lex_state = 0}, + [198] = {.lex_state = 58}, + [199] = {.lex_state = 58}, + [200] = {.lex_state = 58}, + [201] = {.lex_state = 58}, + [202] = {.lex_state = 58}, + [203] = {.lex_state = 48}, + [204] = {.lex_state = 58}, + [205] = {.lex_state = 58}, + [206] = {.lex_state = 58}, + [207] = {.lex_state = 58}, + [208] = {.lex_state = 0}, + [209] = {.lex_state = 0}, + [210] = {.lex_state = 44}, + [211] = {.lex_state = 58}, + [212] = {.lex_state = 0}, + [213] = {.lex_state = 58}, + [214] = {.lex_state = 0}, + [215] = {.lex_state = 58}, + [216] = {.lex_state = 0}, + [217] = {.lex_state = 0}, + [218] = {.lex_state = 0}, + [219] = {.lex_state = 44}, + [220] = {.lex_state = 0}, + [221] = {.lex_state = 0}, + [222] = {.lex_state = 0}, + [223] = {.lex_state = 0}, + [224] = {.lex_state = 59}, + [225] = {.lex_state = 0}, + [226] = {.lex_state = 0}, + [227] = {.lex_state = 0}, + [228] = {.lex_state = 0}, + [229] = {.lex_state = 0}, + [230] = {.lex_state = 0}, + [231] = {.lex_state = 0}, + [232] = {.lex_state = 0}, + [233] = {.lex_state = 0}, + [234] = {.lex_state = 59}, + [235] = {.lex_state = 0}, + [236] = {.lex_state = 0}, + [237] = {.lex_state = 0}, + [238] = {.lex_state = 0}, + [239] = {.lex_state = 0}, + [240] = {.lex_state = 0}, + [241] = {.lex_state = 0}, + [242] = {.lex_state = 0}, + [243] = {.lex_state = 0}, + [244] = {.lex_state = 0}, + [245] = {.lex_state = 0}, + [246] = {.lex_state = 0}, + [247] = {.lex_state = 0}, + [248] = {.lex_state = 0}, + [249] = {.lex_state = 0}, + [250] = {.lex_state = 0}, + [251] = {.lex_state = 0}, + [252] = {.lex_state = 0}, + [253] = {.lex_state = 0}, + [254] = {.lex_state = 0}, + [255] = {.lex_state = 0}, + [256] = {.lex_state = 0}, + [257] = {.lex_state = 0}, + [258] = {.lex_state = 0}, + [259] = {.lex_state = 0}, + [260] = {.lex_state = 0}, + [261] = {.lex_state = 0}, + [262] = {.lex_state = 0}, + [263] = {.lex_state = 0}, + [264] = {.lex_state = 0}, + [265] = {.lex_state = 0}, + [266] = {.lex_state = 0}, + [267] = {.lex_state = 0}, + [268] = {.lex_state = 48}, + [269] = {.lex_state = 47}, + [270] = {.lex_state = 48}, + [271] = {.lex_state = 44}, + [272] = {.lex_state = 47}, + [273] = {.lex_state = 44}, + [274] = {.lex_state = 44}, + [275] = {.lex_state = 44}, + [276] = {.lex_state = 44}, + [277] = {.lex_state = 44}, + [278] = {.lex_state = 44}, + [279] = {.lex_state = 44}, + [280] = {.lex_state = 44}, + [281] = {.lex_state = 44}, + [282] = {.lex_state = 44}, + [283] = {.lex_state = 44}, + [284] = {.lex_state = 44}, + [285] = {.lex_state = 44}, + [286] = {.lex_state = 44}, + [287] = {.lex_state = 44}, + [288] = {.lex_state = 44}, + [289] = {.lex_state = 44}, + [290] = {.lex_state = 44}, + [291] = {.lex_state = 44}, + [292] = {.lex_state = 44}, + [293] = {.lex_state = 44}, + [294] = {.lex_state = 44}, + [295] = {.lex_state = 44}, + [296] = {.lex_state = 44}, + [297] = {.lex_state = 44}, + [298] = {.lex_state = 44}, + [299] = {.lex_state = 44}, + [300] = {.lex_state = 44}, + [301] = {.lex_state = 44}, + [302] = {.lex_state = 44}, + [303] = {.lex_state = 44}, + [304] = {.lex_state = 44}, + [305] = {.lex_state = 44}, + [306] = {.lex_state = 44}, + [307] = {.lex_state = 44}, + [308] = {.lex_state = 44}, + [309] = {.lex_state = 44}, + [310] = {.lex_state = 44}, + [311] = {.lex_state = 44}, + [312] = {.lex_state = 44}, + [313] = {.lex_state = 44}, + [314] = {.lex_state = 44}, + [315] = {.lex_state = 44}, + [316] = {.lex_state = 44}, + [317] = {.lex_state = 44}, + [318] = {.lex_state = 44}, + [319] = {.lex_state = 44}, + [320] = {.lex_state = 44}, + [321] = {.lex_state = 44}, + [322] = {.lex_state = 44}, + [323] = {.lex_state = 44}, + [324] = {.lex_state = 44}, + [325] = {.lex_state = 44}, + [326] = {.lex_state = 44}, + [327] = {.lex_state = 44}, + [328] = {.lex_state = 44}, + [329] = {.lex_state = 44}, + [330] = {.lex_state = 44}, + [331] = {.lex_state = 44}, + [332] = {.lex_state = 44}, + [333] = {.lex_state = 44}, + [334] = {.lex_state = 44}, + [335] = {.lex_state = 49}, + [336] = {.lex_state = 44}, + [337] = {.lex_state = 44}, + [338] = {.lex_state = 44}, + [339] = {.lex_state = 44}, + [340] = {.lex_state = 44}, + [341] = {.lex_state = 44}, + [342] = {.lex_state = 44}, + [343] = {.lex_state = 44}, + [344] = {.lex_state = 44}, + [345] = {.lex_state = 44}, + [346] = {.lex_state = 44}, + [347] = {.lex_state = 44}, + [348] = {.lex_state = 44}, + [349] = {.lex_state = 49}, + [350] = {.lex_state = 44}, + [351] = {.lex_state = 44}, + [352] = {.lex_state = 44}, + [353] = {.lex_state = 44}, + [354] = {.lex_state = 44}, + [355] = {.lex_state = 44}, + [356] = {.lex_state = 44}, + [357] = {.lex_state = 44}, + [358] = {.lex_state = 44}, + [359] = {.lex_state = 44}, + [360] = {.lex_state = 45}, + [361] = {.lex_state = 45}, + [362] = {.lex_state = 0}, + [363] = {.lex_state = 234}, + [364] = {.lex_state = 0}, + [365] = {.lex_state = 234}, + [366] = {.lex_state = 234}, + [367] = {.lex_state = 0}, + [368] = {.lex_state = 0}, + [369] = {.lex_state = 0}, + [370] = {.lex_state = 0}, + [371] = {.lex_state = 0}, + [372] = {.lex_state = 234}, + [373] = {.lex_state = 0}, + [374] = {.lex_state = 0}, + [375] = {.lex_state = 0}, + [376] = {.lex_state = 0}, + [377] = {.lex_state = 67}, + [378] = {.lex_state = 67}, + [379] = {.lex_state = 0}, + [380] = {.lex_state = 52}, + [381] = {.lex_state = 234}, + [382] = {.lex_state = 234}, + [383] = {.lex_state = 234}, + [384] = {.lex_state = 234}, + [385] = {.lex_state = 0}, + [386] = {.lex_state = 0}, + [387] = {.lex_state = 234}, + [388] = {.lex_state = 52}, + [389] = {.lex_state = 234}, + [390] = {.lex_state = 234}, + [391] = {.lex_state = 234}, + [392] = {.lex_state = 234}, + [393] = {.lex_state = 234}, + [394] = {.lex_state = 234}, + [395] = {.lex_state = 234}, + [396] = {.lex_state = 234}, + [397] = {.lex_state = 0}, + [398] = {.lex_state = 0}, + [399] = {.lex_state = 0}, + [400] = {.lex_state = 0}, + [401] = {.lex_state = 0}, + [402] = {.lex_state = 0}, + [403] = {.lex_state = 0}, + [404] = {.lex_state = 234}, + [405] = {.lex_state = 68}, + [406] = {.lex_state = 0}, + [407] = {.lex_state = 0}, + [408] = {.lex_state = 234}, + [409] = {.lex_state = 68}, + [410] = {.lex_state = 234}, + [411] = {.lex_state = 234}, + [412] = {.lex_state = 68}, + [413] = {.lex_state = 52}, + [414] = {.lex_state = 234}, + [415] = {.lex_state = 68}, + [416] = {.lex_state = 0}, + [417] = {.lex_state = 68}, + [418] = {.lex_state = 0}, + [419] = {.lex_state = 52}, + [420] = {.lex_state = 52}, + [421] = {.lex_state = 52}, + [422] = {.lex_state = 0}, + [423] = {.lex_state = 0}, + [424] = {.lex_state = 52}, + [425] = {.lex_state = 0}, + [426] = {.lex_state = 0}, + [427] = {.lex_state = 52}, + [428] = {.lex_state = 52}, + [429] = {.lex_state = 52}, + [430] = {.lex_state = 52}, + [431] = {.lex_state = 0}, + [432] = {.lex_state = 0}, + [433] = {.lex_state = 52}, + [434] = {.lex_state = 0}, + [435] = {.lex_state = 52}, + [436] = {.lex_state = 0}, + [437] = {.lex_state = 52}, + [438] = {.lex_state = 52}, + [439] = {.lex_state = 52}, + [440] = {.lex_state = 0}, + [441] = {.lex_state = 52}, + [442] = {.lex_state = 52}, + [443] = {.lex_state = 0}, + [444] = {.lex_state = 0}, + [445] = {.lex_state = 0}, + [446] = {.lex_state = 0}, + [447] = {.lex_state = 0}, + [448] = {.lex_state = 0}, + [449] = {.lex_state = 0}, + [450] = {.lex_state = 0}, + [451] = {.lex_state = 52}, + [452] = {.lex_state = 0}, + [453] = {.lex_state = 52}, + [454] = {.lex_state = 52}, + [455] = {.lex_state = 52}, + [456] = {.lex_state = 0}, + [457] = {.lex_state = 52}, + [458] = {.lex_state = 52}, + [459] = {.lex_state = 0}, + [460] = {.lex_state = 65}, + [461] = {.lex_state = 0}, + [462] = {.lex_state = 65}, + [463] = {.lex_state = 35}, + [464] = {.lex_state = 35}, + [465] = {.lex_state = 65}, + [466] = {.lex_state = 35}, + [467] = {.lex_state = 35}, + [468] = {.lex_state = 67}, + [469] = {.lex_state = 234}, + [470] = {.lex_state = 65}, + [471] = {.lex_state = 60}, + [472] = {.lex_state = 67}, + [473] = {.lex_state = 65}, + [474] = {.lex_state = 65}, + [475] = {.lex_state = 60}, + [476] = {.lex_state = 68}, + [477] = {.lex_state = 65}, + [478] = {.lex_state = 47}, + [479] = {.lex_state = 234}, + [480] = {.lex_state = 234}, + [481] = {.lex_state = 71}, + [482] = {.lex_state = 53}, + [483] = {.lex_state = 234}, + [484] = {.lex_state = 0}, + [485] = {.lex_state = 60}, + [486] = {.lex_state = 47}, + [487] = {.lex_state = 234}, + [488] = {.lex_state = 71}, + [489] = {.lex_state = 0}, + [490] = {.lex_state = 47}, + [491] = {.lex_state = 0}, + [492] = {.lex_state = 0}, + [493] = {.lex_state = 67}, + [494] = {.lex_state = 67}, + [495] = {.lex_state = 67}, + [496] = {.lex_state = 67}, + [497] = {.lex_state = 67}, + [498] = {.lex_state = 0}, + [499] = {.lex_state = 67}, + [500] = {.lex_state = 67}, + [501] = {.lex_state = 67}, + [502] = {.lex_state = 67}, + [503] = {.lex_state = 0}, + [504] = {.lex_state = 67}, + [505] = {.lex_state = 50}, + [506] = {.lex_state = 67}, + [507] = {.lex_state = 67}, + [508] = {.lex_state = 0}, + [509] = {.lex_state = 0}, + [510] = {.lex_state = 67}, + [511] = {.lex_state = 0}, + [512] = {.lex_state = 0}, + [513] = {.lex_state = 67}, + [514] = {.lex_state = 67}, + [515] = {.lex_state = 67}, + [516] = {.lex_state = 0}, + [517] = {.lex_state = 0}, + [518] = {.lex_state = 35}, + [519] = {.lex_state = 0}, + [520] = {.lex_state = 67}, + [521] = {.lex_state = 67}, + [522] = {.lex_state = 69}, + [523] = {.lex_state = 69}, + [524] = {.lex_state = 67}, + [525] = {.lex_state = 0}, + [526] = {.lex_state = 0}, + [527] = {.lex_state = 68}, + [528] = {.lex_state = 52}, + [529] = {.lex_state = 0}, + [530] = {.lex_state = 0}, + [531] = {.lex_state = 52}, + [532] = {.lex_state = 52}, + [533] = {.lex_state = 52}, + [534] = {.lex_state = 0}, + [535] = {.lex_state = 0}, + [536] = {.lex_state = 0}, + [537] = {.lex_state = 0}, + [538] = {.lex_state = 35}, + [539] = {.lex_state = 35}, + [540] = {.lex_state = 35}, + [541] = {.lex_state = 52}, + [542] = {.lex_state = 69}, + [543] = {.lex_state = 0}, + [544] = {.lex_state = 0}, + [545] = {.lex_state = 0}, + [546] = {.lex_state = 69}, + [547] = {.lex_state = 67}, + [548] = {.lex_state = 67}, + [549] = {.lex_state = 0}, + [550] = {.lex_state = 67}, + [551] = {.lex_state = 0}, + [552] = {.lex_state = 0}, + [553] = {.lex_state = 52}, + [554] = {.lex_state = 0}, + [555] = {.lex_state = 67}, + [556] = {.lex_state = 0}, + [557] = {.lex_state = 53}, + [558] = {.lex_state = 67}, + [559] = {.lex_state = 0}, + [560] = {.lex_state = 0}, + [561] = {.lex_state = 0}, + [562] = {.lex_state = 0}, + [563] = {.lex_state = 0}, + [564] = {.lex_state = 0}, + [565] = {.lex_state = 0}, + [566] = {.lex_state = 0}, + [567] = {.lex_state = 0}, + [568] = {.lex_state = 0}, + [569] = {.lex_state = 0}, + [570] = {.lex_state = 0}, + [571] = {.lex_state = 0}, + [572] = {.lex_state = 0}, + [573] = {.lex_state = 0}, + [574] = {.lex_state = 0}, + [575] = {.lex_state = 0}, + [576] = {.lex_state = 0}, + [577] = {.lex_state = 0}, + [578] = {.lex_state = 0}, + [579] = {.lex_state = 0}, + [580] = {.lex_state = 0}, + [581] = {.lex_state = 0}, + [582] = {.lex_state = 0}, + [583] = {.lex_state = 67}, + [584] = {.lex_state = 0}, + [585] = {.lex_state = 0}, + [586] = {.lex_state = 0}, + [587] = {.lex_state = 0}, + [588] = {.lex_state = 0}, + [589] = {.lex_state = 0}, + [590] = {.lex_state = 67}, + [591] = {.lex_state = 0}, + [592] = {.lex_state = 0}, + [593] = {.lex_state = 0}, + [594] = {.lex_state = 0}, + [595] = {.lex_state = 67}, + [596] = {.lex_state = 0}, + [597] = {.lex_state = 0}, + [598] = {.lex_state = 0}, + [599] = {.lex_state = 0}, + [600] = {.lex_state = 0}, + [601] = {.lex_state = 0}, + [602] = {.lex_state = 67}, + [603] = {.lex_state = 0}, + [604] = {.lex_state = 0}, + [605] = {.lex_state = 0}, + [606] = {.lex_state = 0}, + [607] = {.lex_state = 0}, + [608] = {.lex_state = 0}, + [609] = {.lex_state = 67}, + [610] = {.lex_state = 67}, + [611] = {.lex_state = 0}, + [612] = {.lex_state = 0}, + [613] = {.lex_state = 0}, + [614] = {.lex_state = 220}, + [615] = {.lex_state = 67}, + [616] = {.lex_state = 0}, + [617] = {.lex_state = 67}, + [618] = {.lex_state = 0}, + [619] = {.lex_state = 0}, + [620] = {.lex_state = 0}, + [621] = {.lex_state = 0}, + [622] = {.lex_state = 0}, + [623] = {.lex_state = 0}, + [624] = {.lex_state = 0}, + [625] = {.lex_state = 0}, + [626] = {.lex_state = 220}, + [627] = {.lex_state = 67}, + [628] = {.lex_state = 53}, + [629] = {.lex_state = 0}, + [630] = {.lex_state = 0}, + [631] = {.lex_state = 0}, + [632] = {.lex_state = 67}, + [633] = {.lex_state = 0}, + [634] = {.lex_state = 0}, + [635] = {.lex_state = 67}, + [636] = {.lex_state = 53}, + [637] = {.lex_state = 67}, + [638] = {.lex_state = 0}, + [639] = {.lex_state = 0}, + [640] = {.lex_state = 0}, + [641] = {.lex_state = 0}, + [642] = {.lex_state = 0}, + [643] = {.lex_state = 50}, + [644] = {.lex_state = 50}, + [645] = {.lex_state = 0}, + [646] = {.lex_state = 0}, + [647] = {.lex_state = 0}, + [648] = {.lex_state = 0}, + [649] = {.lex_state = 0}, + [650] = {.lex_state = 0}, + [651] = {.lex_state = 234}, + [652] = {.lex_state = 0}, + [653] = {.lex_state = 0}, + [654] = {.lex_state = 0}, + [655] = {.lex_state = 0}, + [656] = {.lex_state = 0}, + [657] = {.lex_state = 0}, + [658] = {.lex_state = 0}, + [659] = {.lex_state = 0}, + [660] = {.lex_state = 0}, + [661] = {.lex_state = 0}, + [662] = {.lex_state = 0}, + [663] = {.lex_state = 0}, + [664] = {.lex_state = 0}, + [665] = {.lex_state = 0}, + [666] = {.lex_state = 0}, + [667] = {.lex_state = 0}, + [668] = {.lex_state = 0}, + [669] = {.lex_state = 0}, + [670] = {.lex_state = 0}, + [671] = {.lex_state = 0}, + [672] = {.lex_state = 0}, + [673] = {.lex_state = 0}, + [674] = {.lex_state = 0}, + [675] = {.lex_state = 0}, + [676] = {.lex_state = 0}, + [677] = {.lex_state = 67}, + [678] = {.lex_state = 0}, + [679] = {.lex_state = 0}, + [680] = {.lex_state = 50}, + [681] = {.lex_state = 0}, + [682] = {.lex_state = 0}, + [683] = {.lex_state = 0}, + [684] = {.lex_state = 0}, + [685] = {.lex_state = 0}, + [686] = {.lex_state = 0}, + [687] = {.lex_state = 0}, + [688] = {.lex_state = 67}, + [689] = {.lex_state = 0}, + [690] = {.lex_state = 0}, + [691] = {.lex_state = 0}, + [692] = {.lex_state = 0}, + [693] = {.lex_state = 0}, + [694] = {.lex_state = 0}, + [695] = {.lex_state = 0}, + [696] = {.lex_state = 0}, + [697] = {.lex_state = 0}, + [698] = {.lex_state = 0}, + [699] = {.lex_state = 0}, + [700] = {.lex_state = 0}, + [701] = {.lex_state = 67}, + [702] = {.lex_state = 0}, + [703] = {.lex_state = 0}, + [704] = {.lex_state = 0}, + [705] = {.lex_state = 0}, + [706] = {.lex_state = 0}, + [707] = {.lex_state = 67}, + [708] = {.lex_state = 0}, + [709] = {.lex_state = 0}, + [710] = {.lex_state = 0}, + [711] = {.lex_state = 0}, + [712] = {.lex_state = 0}, + [713] = {.lex_state = 0}, + [714] = {.lex_state = 0}, + [715] = {.lex_state = 0}, + [716] = {.lex_state = 0}, + [717] = {.lex_state = 0}, + [718] = {.lex_state = 0}, + [719] = {.lex_state = 0}, + [720] = {.lex_state = 0}, + [721] = {.lex_state = 0}, + [722] = {.lex_state = 0}, + [723] = {.lex_state = 0}, + [724] = {.lex_state = 0}, + [725] = {.lex_state = 0}, + [726] = {.lex_state = 0}, + [727] = {.lex_state = 0}, + [728] = {.lex_state = 0}, + [729] = {.lex_state = 234}, + [730] = {.lex_state = 0}, + [731] = {.lex_state = 0}, + [732] = {.lex_state = 0}, + [733] = {.lex_state = 0}, + [734] = {.lex_state = 0}, + [735] = {.lex_state = 0}, + [736] = {.lex_state = 0}, + [737] = {.lex_state = 0}, + [738] = {.lex_state = 0}, + [739] = {.lex_state = 234}, + [740] = {.lex_state = 0}, + [741] = {.lex_state = 0}, + [742] = {.lex_state = 0}, + [743] = {.lex_state = 0}, + [744] = {.lex_state = 0}, + [745] = {.lex_state = 0}, + [746] = {.lex_state = 0}, + [747] = {.lex_state = 0}, + [748] = {.lex_state = 0}, + [749] = {.lex_state = 0}, + [750] = {.lex_state = 0}, + [751] = {.lex_state = 0}, + [752] = {.lex_state = 0}, + [753] = {.lex_state = 0}, + [754] = {.lex_state = 0}, + [755] = {.lex_state = 0}, + [756] = {.lex_state = 0}, + [757] = {.lex_state = 0}, + [758] = {.lex_state = 0}, + [759] = {.lex_state = 0}, + [760] = {.lex_state = 0}, + [761] = {.lex_state = 0}, + [762] = {.lex_state = 0}, + [763] = {.lex_state = 0}, + [764] = {.lex_state = 0}, + [765] = {.lex_state = 0}, + [766] = {.lex_state = 0}, + [767] = {.lex_state = 0}, + [768] = {.lex_state = 0}, + [769] = {.lex_state = 0}, + [770] = {.lex_state = 0}, + [771] = {.lex_state = 0}, + [772] = {.lex_state = 234}, + [773] = {.lex_state = 0}, + [774] = {.lex_state = 0}, + [775] = {.lex_state = 0}, + [776] = {.lex_state = 0}, + [777] = {.lex_state = 0}, + [778] = {.lex_state = 0}, + [779] = {.lex_state = 0}, + [780] = {.lex_state = 0}, + [781] = {.lex_state = 0}, + [782] = {.lex_state = 0}, + [783] = {.lex_state = 0}, + [784] = {.lex_state = 0}, + [785] = {.lex_state = 0}, + [786] = {.lex_state = 0}, + [787] = {.lex_state = 0}, + [788] = {.lex_state = 0}, + [789] = {.lex_state = 0}, + [790] = {.lex_state = 0}, + [791] = {.lex_state = 0}, + [792] = {.lex_state = 0}, + [793] = {.lex_state = 0}, + [794] = {.lex_state = 0}, + [795] = {.lex_state = 0}, + [796] = {.lex_state = 0}, + [797] = {.lex_state = 0}, + [798] = {.lex_state = 0}, + [799] = {.lex_state = 0}, + [800] = {.lex_state = 0}, + [801] = {.lex_state = 0}, + [802] = {.lex_state = 0}, + [803] = {.lex_state = 0}, + [804] = {.lex_state = 0}, + [805] = {.lex_state = 0}, + [806] = {.lex_state = 0}, + [807] = {.lex_state = 0}, + [808] = {.lex_state = 0}, + [809] = {.lex_state = 0}, + [810] = {.lex_state = 0}, + [811] = {.lex_state = 0}, + [812] = {.lex_state = 0}, + [813] = {.lex_state = 50}, + [814] = {.lex_state = 0}, + [815] = {.lex_state = 234}, + [816] = {.lex_state = 0}, + [817] = {.lex_state = 0}, + [818] = {.lex_state = 0}, + [819] = {.lex_state = 234}, + [820] = {.lex_state = 0}, + [821] = {.lex_state = 234}, +}; + +static uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { + [0] = { + [ts_builtin_sym_end] = ACTIONS(1), + [anon_sym_use] = ACTIONS(1), + [anon_sym_SEMI] = ACTIONS(1), + [anon_sym_EQ] = ACTIONS(1), + [anon_sym_COLON_COLON] = ACTIONS(1), + [anon_sym_LBRACE] = ACTIONS(1), + [anon_sym_RBRACE] = ACTIONS(1), + [anon_sym_COMMA] = ACTIONS(1), + [anon_sym_export] = ACTIONS(1), + [anon_sym_let] = ACTIONS(1), + [anon_sym_const] = ACTIONS(1), + [anon_sym_COLON] = ACTIONS(1), + [anon_sym_ATsymbol] = ACTIONS(1), + [anon_sym_LPAREN] = ACTIONS(1), + [anon_sym_RPAREN] = ACTIONS(1), + [anon_sym_type] = ACTIONS(1), + [anon_sym_fn] = ACTIONS(1), + [anon_sym_ATfini] = ACTIONS(1), + [anon_sym_ATinit] = ACTIONS(1), + [anon_sym_ATtest] = ACTIONS(1), + [anon_sym_ATnoreturn] = ACTIONS(1), + [anon_sym_BANG] = ACTIONS(1), + [anon_sym_rune] = ACTIONS(1), + [anon_sym_str] = ACTIONS(1), + [anon_sym_bool] = ACTIONS(1), + [anon_sym_void] = ACTIONS(1), + [anon_sym_i8] = ACTIONS(1), + [anon_sym_i16] = ACTIONS(1), + [anon_sym_i32] = ACTIONS(1), + [anon_sym_i64] = ACTIONS(1), + [anon_sym_u8] = ACTIONS(1), + [anon_sym_u16] = ACTIONS(1), + [anon_sym_u32] = ACTIONS(1), + [anon_sym_u64] = ACTIONS(1), + [anon_sym_int] = ACTIONS(1), + [anon_sym_size] = ACTIONS(1), + [anon_sym_char] = ACTIONS(1), + [anon_sym_enum] = ACTIONS(1), + [anon_sym_STAR] = ACTIONS(1), + [anon_sym_struct] = ACTIONS(1), + [anon_sym_union] = ACTIONS(1), + [anon_sym_AToffset] = ACTIONS(1), + [anon_sym_PIPE] = ACTIONS(1), + [anon_sym_LBRACK] = ACTIONS(1), + [anon_sym_RBRACK] = ACTIONS(1), + [anon_sym__] = ACTIONS(1), + [anon_sym_DOT_DOT_DOT] = ACTIONS(1), + [anon_sym_true] = ACTIONS(1), + [anon_sym_null] = ACTIONS(1), + [anon_sym_0x] = ACTIONS(1), + [anon_sym_0o] = ACTIONS(1), + [anon_sym_0b] = ACTIONS(1), + [anon_sym_0] = ACTIONS(1), + [anon_sym_1] = ACTIONS(1), + [anon_sym_2] = ACTIONS(1), + [anon_sym_3] = ACTIONS(1), + [anon_sym_4] = ACTIONS(1), + [anon_sym_5] = ACTIONS(1), + [anon_sym_6] = ACTIONS(1), + [anon_sym_7] = ACTIONS(1), + [anon_sym_8] = ACTIONS(1), + [anon_sym_9] = ACTIONS(1), + [anon_sym_A] = ACTIONS(1), + [anon_sym_B] = ACTIONS(1), + [anon_sym_C] = ACTIONS(1), + [anon_sym_D] = ACTIONS(1), + [anon_sym_E] = ACTIONS(1), + [anon_sym_F] = ACTIONS(1), + [anon_sym_a] = ACTIONS(1), + [anon_sym_b] = ACTIONS(1), + [anon_sym_c] = ACTIONS(1), + [anon_sym_d] = ACTIONS(1), + [anon_sym_e] = ACTIONS(1), + [anon_sym_f] = ACTIONS(1), + [anon_sym_i] = ACTIONS(1), + [anon_sym_u] = ACTIONS(1), + [anon_sym_z] = ACTIONS(1), + [anon_sym_DOT] = ACTIONS(1), + [anon_sym_SQUOTE] = ACTIONS(1), + [anon_sym_DQUOTE] = ACTIONS(1), + [anon_sym_alloc] = ACTIONS(1), + [anon_sym_append] = ACTIONS(1), + [anon_sym_free] = ACTIONS(1), + [anon_sym_static] = ACTIONS(1), + [anon_sym_len] = ACTIONS(1), + [anon_sym_offset] = ACTIONS(1), + [anon_sym_DOT_DOT] = ACTIONS(1), + [anon_sym_QMARK] = ACTIONS(1), + [anon_sym_PLUS] = ACTIONS(1), + [anon_sym_DASH] = ACTIONS(1), + [anon_sym_TILDE] = ACTIONS(1), + [anon_sym_AMP] = ACTIONS(1), + [anon_sym_as] = ACTIONS(1), + [anon_sym_is] = ACTIONS(1), + [anon_sym_SLASH] = ACTIONS(1), + [anon_sym_PERCENT] = ACTIONS(1), + [anon_sym_LT_LT] = ACTIONS(1), + [anon_sym_GT_GT] = ACTIONS(1), + [anon_sym_CARET] = ACTIONS(1), + [anon_sym_LT] = ACTIONS(1), + [anon_sym_GT] = ACTIONS(1), + [anon_sym_LT_EQ] = ACTIONS(1), + [anon_sym_GT_EQ] = ACTIONS(1), + [anon_sym_EQ_EQ] = ACTIONS(1), + [anon_sym_BANG_EQ] = ACTIONS(1), + [anon_sym_AMP_AMP] = ACTIONS(1), + [anon_sym_CARET_CARET] = ACTIONS(1), + [anon_sym_PIPE_PIPE] = ACTIONS(1), + [anon_sym_if] = ACTIONS(1), + [anon_sym_else] = ACTIONS(1), + [anon_sym_for] = ACTIONS(1), + [anon_sym_switch] = ACTIONS(1), + [anon_sym_EQ_GT] = ACTIONS(1), + [anon_sym_match] = ACTIONS(1), + [anon_sym_PLUS_EQ] = ACTIONS(1), + [anon_sym_DASH_EQ] = ACTIONS(1), + [anon_sym_STAR_EQ] = ACTIONS(1), + [anon_sym_SLASH_EQ] = ACTIONS(1), + [anon_sym_PERCENT_EQ] = ACTIONS(1), + [anon_sym_LT_LT_EQ] = ACTIONS(1), + [anon_sym_GT_GT_EQ] = ACTIONS(1), + [anon_sym_AMP_EQ] = ACTIONS(1), + [anon_sym_PIPE_EQ] = ACTIONS(1), + [anon_sym_CARET_EQ] = ACTIONS(1), + [anon_sym_break] = ACTIONS(1), + [anon_sym_continue] = ACTIONS(1), + [anon_sym_return] = ACTIONS(1), + [sym_comment] = ACTIONS(3), + }, + [1] = { + [sym_unit] = STATE(784), + [sym_imports] = STATE(363), + [sym_use_statement] = STATE(381), + [sym_declarations] = STATE(777), + [sym_declaration] = STATE(774), + [sym_global_declaration] = STATE(773), + [sym_decl_attr] = STATE(479), + [sym_constant_declaration] = STATE(773), + [sym_type_declaration] = STATE(773), + [sym_function_declaration] = STATE(773), + [sym_fndec_attrs] = STATE(772), + [sym_fndec_attr] = STATE(411), + [sym_fntype_attr] = STATE(479), + [aux_sym_imports_repeat1] = STATE(381), + [aux_sym_declarations_repeat1] = STATE(366), + [aux_sym_fndec_attrs_repeat1] = STATE(411), + [ts_builtin_sym_end] = ACTIONS(5), + [anon_sym_use] = ACTIONS(7), + [anon_sym_export] = ACTIONS(9), + [anon_sym_let] = ACTIONS(11), + [anon_sym_const] = ACTIONS(11), + [anon_sym_ATsymbol] = ACTIONS(13), + [anon_sym_def] = ACTIONS(15), + [anon_sym_type] = ACTIONS(17), + [anon_sym_fn] = ACTIONS(19), + [anon_sym_ATfini] = ACTIONS(21), + [anon_sym_ATinit] = ACTIONS(21), + [anon_sym_ATtest] = ACTIONS(21), + [anon_sym_ATnoreturn] = ACTIONS(23), + [sym_comment] = ACTIONS(3), + }, + [2] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(281), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(402), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(819), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(449), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_SEMI] = ACTIONS(25), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_RBRACE] = ACTIONS(25), + [anon_sym_COMMA] = ACTIONS(25), + [anon_sym_let] = ACTIONS(29), + [anon_sym_const] = ACTIONS(29), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_RPAREN] = ACTIONS(25), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(25), + [anon_sym_DOT_DOT_DOT] = ACTIONS(25), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(71), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(83), + [anon_sym_else] = ACTIONS(79), + [anon_sym_for] = ACTIONS(85), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_EQ_GT] = ACTIONS(25), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(91), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(95), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [3] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(449), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_SEMI] = ACTIONS(25), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_RBRACE] = ACTIONS(25), + [anon_sym_COMMA] = ACTIONS(25), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_RPAREN] = ACTIONS(25), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(25), + [anon_sym_DOT_DOT_DOT] = ACTIONS(25), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(79), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_EQ_GT] = ACTIONS(25), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [4] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(335), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(398), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(815), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(449), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_SEMI] = ACTIONS(25), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(113), + [anon_sym_const] = ACTIONS(113), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_RPAREN] = ACTIONS(25), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(115), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(25), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(117), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(25), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(119), + [anon_sym_else] = ACTIONS(79), + [anon_sym_for] = ACTIONS(121), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(123), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(125), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [5] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_switch_cases] = STATE(719), + [sym_switch_case] = STATE(633), + [sym_case_options] = STATE(726), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(630), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_RBRACE] = ACTIONS(127), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(129), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [6] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(449), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_SEMI] = ACTIONS(25), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_RPAREN] = ACTIONS(25), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(25), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(25), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [7] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_switch_cases] = STATE(728), + [sym_switch_case] = STATE(633), + [sym_case_options] = STATE(726), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(630), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(129), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [8] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_append_values] = STATE(723), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(563), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_RPAREN] = ACTIONS(145), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_DOT_DOT_DOT] = ACTIONS(147), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [9] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_argument_list] = STATE(769), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(541), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_RPAREN] = ACTIONS(149), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [10] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_tuple_items] = STATE(780), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(580), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_RPAREN] = ACTIONS(151), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [11] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_case_options] = STATE(718), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(630), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_EQ_GT] = ACTIONS(153), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [12] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_append_values] = STATE(713), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(563), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_DOT_DOT_DOT] = ACTIONS(147), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [13] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_append_values] = STATE(709), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(563), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_DOT_DOT_DOT] = ACTIONS(147), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [14] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_array_members] = STATE(778), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(531), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(155), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [15] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_append_values] = STATE(752), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(563), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_DOT_DOT_DOT] = ACTIONS(147), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [16] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_array_members] = STATE(779), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(531), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(157), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [17] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_expression_list] = STATE(763), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(751), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_RBRACE] = ACTIONS(159), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [18] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_argument_list] = STATE(745), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(541), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_RPAREN] = ACTIONS(161), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [19] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_array_members] = STATE(672), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(531), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(163), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [20] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_argument_list] = STATE(693), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(541), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_RPAREN] = ACTIONS(165), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [21] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_append_values] = STATE(735), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(563), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_DOT_DOT_DOT] = ACTIONS(147), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [22] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(636), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(167), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [23] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(557), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(169), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [24] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_tuple_items] = STATE(780), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(580), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [25] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(742), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(171), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [26] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_tuple_items] = STATE(767), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(623), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [27] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_for_predicate] = STATE(700), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(589), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(587), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [28] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_for_predicate] = STATE(805), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(589), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(587), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [29] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(628), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_DOT_DOT] = ACTIONS(169), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [30] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_for_predicate] = STATE(708), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(589), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(587), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [31] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_tuple_items] = STATE(670), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(581), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [32] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(766), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(173), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [33] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(703), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(175), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [34] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_for_predicate] = STATE(731), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(589), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(587), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [35] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_for_predicate] = STATE(732), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(589), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(587), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [36] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_expression_list] = STATE(768), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(751), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [37] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_for_predicate] = STATE(771), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(589), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(587), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [38] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_for_predicate] = STATE(776), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(589), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(587), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [39] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_for_predicate] = STATE(754), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(589), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(587), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [40] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(711), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(177), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [41] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(687), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [42] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(564), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [43] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(281), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(402), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(819), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(446), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(29), + [anon_sym_const] = ACTIONS(29), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(71), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(83), + [anon_sym_for] = ACTIONS(85), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(91), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(95), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [44] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(281), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(402), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(819), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(444), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(29), + [anon_sym_const] = ACTIONS(29), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(71), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(83), + [anon_sym_for] = ACTIONS(85), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(91), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(95), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [45] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(281), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(402), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(819), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(456), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(29), + [anon_sym_const] = ACTIONS(29), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(71), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(83), + [anon_sym_for] = ACTIONS(85), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(91), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(95), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [46] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(444), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [47] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(432), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [48] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(447), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [49] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(281), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(402), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(819), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(450), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(29), + [anon_sym_const] = ACTIONS(29), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(71), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(83), + [anon_sym_for] = ACTIONS(85), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(91), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(95), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [50] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(765), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [51] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(446), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [52] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(444), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [53] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(446), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [54] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(566), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [55] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(456), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [56] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(747), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [57] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(806), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [58] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(281), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(402), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(819), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(432), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(29), + [anon_sym_const] = ACTIONS(29), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(71), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(83), + [anon_sym_for] = ACTIONS(85), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(91), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(95), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [59] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(448), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [60] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(621), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [61] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(335), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(398), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(815), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(448), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(113), + [anon_sym_const] = ACTIONS(113), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(115), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(117), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(119), + [anon_sym_for] = ACTIONS(121), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(123), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(125), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [62] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(578), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [63] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(752), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [64] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(440), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [65] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(281), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(402), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(819), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(448), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(29), + [anon_sym_const] = ACTIONS(29), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(71), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(83), + [anon_sym_for] = ACTIONS(85), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(91), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(95), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [66] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(629), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [67] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(456), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [68] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(567), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [69] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(335), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(398), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(815), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(450), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(113), + [anon_sym_const] = ACTIONS(113), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(115), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(117), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(119), + [anon_sym_for] = ACTIONS(121), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(123), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(125), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [70] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(447), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [71] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(577), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [72] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(740), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [73] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(335), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(398), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(815), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(456), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(113), + [anon_sym_const] = ACTIONS(113), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(115), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(117), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(119), + [anon_sym_for] = ACTIONS(121), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(123), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(125), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [74] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(770), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [75] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(281), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(402), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(819), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(447), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(29), + [anon_sym_const] = ACTIONS(29), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(71), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(83), + [anon_sym_for] = ACTIONS(85), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(91), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(95), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [76] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(639), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [77] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(431), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [78] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(691), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [79] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(335), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(398), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(815), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(432), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(113), + [anon_sym_const] = ACTIONS(113), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(115), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(117), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(119), + [anon_sym_for] = ACTIONS(121), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(123), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(125), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [80] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(281), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(402), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(819), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(431), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(29), + [anon_sym_const] = ACTIONS(29), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(71), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(83), + [anon_sym_for] = ACTIONS(85), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(91), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(95), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [81] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(432), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [82] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(582), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [83] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(624), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [84] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(785), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [85] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(666), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [86] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(335), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(398), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(815), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(447), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(113), + [anon_sym_const] = ACTIONS(113), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(115), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(117), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(119), + [anon_sym_for] = ACTIONS(121), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(123), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(125), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [87] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(722), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [88] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(612), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [89] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(560), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [90] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(586), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [91] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(709), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [92] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(448), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [93] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(608), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [94] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(607), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [95] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(802), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [96] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(591), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [97] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(730), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [98] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(288), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(400), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(821), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(598), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(99), + [anon_sym_const] = ACTIONS(99), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(101), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(103), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(105), + [anon_sym_for] = ACTIONS(107), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(109), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(111), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [99] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(349), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(399), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(729), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(801), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(131), + [anon_sym_const] = ACTIONS(131), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(133), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(135), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(137), + [anon_sym_for] = ACTIONS(139), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(141), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(143), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [100] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(281), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(402), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(819), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(440), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(29), + [anon_sym_const] = ACTIONS(29), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(41), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(71), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(83), + [anon_sym_for] = ACTIONS(85), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(91), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(95), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [101] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(335), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(398), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(815), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(446), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(113), + [anon_sym_const] = ACTIONS(113), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(115), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(117), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(119), + [anon_sym_for] = ACTIONS(121), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(123), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(125), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [102] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(221), + [sym_indexing_expression] = STATE(221), + [sym_slicing_expression] = STATE(335), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(291), + [sym_object_selector] = STATE(398), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(416), + [sym_if_expression] = STATE(422), + [sym_for_loop] = STATE(422), + [sym_label] = STATE(815), + [sym_switch_expression] = STATE(422), + [sym_match_expression] = STATE(422), + [sym_assignment] = STATE(422), + [sym_binding_list] = STATE(422), + [sym_deferred_expression] = STATE(422), + [sym_control_statement] = STATE(422), + [sym_expression] = STATE(444), + [sym_compound_expression] = STATE(422), + [sym_identifier] = STATE(216), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LBRACE] = ACTIONS(27), + [anon_sym_let] = ACTIONS(113), + [anon_sym_const] = ACTIONS(113), + [anon_sym_COLON] = ACTIONS(31), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(115), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(117), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [anon_sym_if] = ACTIONS(119), + [anon_sym_for] = ACTIONS(121), + [anon_sym_switch] = ACTIONS(87), + [anon_sym_match] = ACTIONS(89), + [anon_sym_defer] = ACTIONS(123), + [anon_sym_break] = ACTIONS(93), + [anon_sym_continue] = ACTIONS(93), + [anon_sym_return] = ACTIONS(125), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [103] = { + [sym_hex_digit] = STATE(104), + [aux_sym_hex_digits_repeat1] = STATE(104), + [anon_sym_SEMI] = ACTIONS(179), + [anon_sym_EQ] = ACTIONS(181), + [anon_sym_RBRACE] = ACTIONS(179), + [anon_sym_COMMA] = ACTIONS(179), + [anon_sym_COLON] = ACTIONS(179), + [anon_sym_LPAREN] = ACTIONS(179), + [anon_sym_RPAREN] = ACTIONS(179), + [anon_sym_i8] = ACTIONS(179), + [anon_sym_i16] = ACTIONS(179), + [anon_sym_i32] = ACTIONS(179), + [anon_sym_i64] = ACTIONS(179), + [anon_sym_u8] = ACTIONS(179), + [anon_sym_u16] = ACTIONS(179), + [anon_sym_u32] = ACTIONS(179), + [anon_sym_u64] = ACTIONS(179), + [anon_sym_STAR] = ACTIONS(181), + [anon_sym_PIPE] = ACTIONS(181), + [anon_sym_LBRACK] = ACTIONS(179), + [anon_sym_RBRACK] = ACTIONS(179), + [anon_sym_DOT_DOT_DOT] = ACTIONS(179), + [anon_sym_0] = ACTIONS(183), + [anon_sym_1] = ACTIONS(183), + [anon_sym_2] = ACTIONS(183), + [anon_sym_3] = ACTIONS(183), + [anon_sym_4] = ACTIONS(183), + [anon_sym_5] = ACTIONS(183), + [anon_sym_6] = ACTIONS(183), + [anon_sym_7] = ACTIONS(183), + [anon_sym_8] = ACTIONS(183), + [anon_sym_9] = ACTIONS(183), + [anon_sym_A] = ACTIONS(183), + [anon_sym_B] = ACTIONS(183), + [anon_sym_C] = ACTIONS(183), + [anon_sym_D] = ACTIONS(183), + [anon_sym_E] = ACTIONS(183), + [anon_sym_F] = ACTIONS(183), + [anon_sym_a] = ACTIONS(185), + [anon_sym_b] = ACTIONS(183), + [anon_sym_c] = ACTIONS(183), + [anon_sym_d] = ACTIONS(183), + [anon_sym_e] = ACTIONS(185), + [anon_sym_f] = ACTIONS(183), + [anon_sym_i] = ACTIONS(181), + [anon_sym_u] = ACTIONS(181), + [anon_sym_z] = ACTIONS(179), + [anon_sym_DOT] = ACTIONS(181), + [anon_sym_DOT_DOT] = ACTIONS(181), + [anon_sym_QMARK] = ACTIONS(179), + [anon_sym_PLUS] = ACTIONS(181), + [anon_sym_DASH] = ACTIONS(181), + [anon_sym_AMP] = ACTIONS(181), + [anon_sym_as] = ACTIONS(179), + [anon_sym_is] = ACTIONS(179), + [anon_sym_SLASH] = ACTIONS(181), + [anon_sym_PERCENT] = ACTIONS(181), + [anon_sym_LT_LT] = ACTIONS(181), + [anon_sym_GT_GT] = ACTIONS(181), + [anon_sym_CARET] = ACTIONS(181), + [anon_sym_LT] = ACTIONS(181), + [anon_sym_GT] = ACTIONS(181), + [anon_sym_LT_EQ] = ACTIONS(179), + [anon_sym_GT_EQ] = ACTIONS(179), + [anon_sym_EQ_EQ] = ACTIONS(179), + [anon_sym_BANG_EQ] = ACTIONS(179), + [anon_sym_AMP_AMP] = ACTIONS(179), + [anon_sym_CARET_CARET] = ACTIONS(179), + [anon_sym_PIPE_PIPE] = ACTIONS(179), + [anon_sym_else] = ACTIONS(179), + [anon_sym_EQ_GT] = ACTIONS(179), + [anon_sym_PLUS_EQ] = ACTIONS(179), + [anon_sym_DASH_EQ] = ACTIONS(179), + [anon_sym_STAR_EQ] = ACTIONS(179), + [anon_sym_SLASH_EQ] = ACTIONS(179), + [anon_sym_PERCENT_EQ] = ACTIONS(179), + [anon_sym_LT_LT_EQ] = ACTIONS(179), + [anon_sym_GT_GT_EQ] = ACTIONS(179), + [anon_sym_AMP_EQ] = ACTIONS(179), + [anon_sym_PIPE_EQ] = ACTIONS(179), + [anon_sym_CARET_EQ] = ACTIONS(179), + [sym_comment] = ACTIONS(3), + }, + [104] = { + [sym_hex_digit] = STATE(104), + [aux_sym_hex_digits_repeat1] = STATE(104), + [anon_sym_SEMI] = ACTIONS(187), + [anon_sym_EQ] = ACTIONS(189), + [anon_sym_RBRACE] = ACTIONS(187), + [anon_sym_COMMA] = ACTIONS(187), + [anon_sym_COLON] = ACTIONS(187), + [anon_sym_LPAREN] = ACTIONS(187), + [anon_sym_RPAREN] = ACTIONS(187), + [anon_sym_i8] = ACTIONS(187), + [anon_sym_i16] = ACTIONS(187), + [anon_sym_i32] = ACTIONS(187), + [anon_sym_i64] = ACTIONS(187), + [anon_sym_u8] = ACTIONS(187), + [anon_sym_u16] = ACTIONS(187), + [anon_sym_u32] = ACTIONS(187), + [anon_sym_u64] = ACTIONS(187), + [anon_sym_STAR] = ACTIONS(189), + [anon_sym_PIPE] = ACTIONS(189), + [anon_sym_LBRACK] = ACTIONS(187), + [anon_sym_RBRACK] = ACTIONS(187), + [anon_sym_DOT_DOT_DOT] = ACTIONS(187), + [anon_sym_0] = ACTIONS(191), + [anon_sym_1] = ACTIONS(191), + [anon_sym_2] = ACTIONS(191), + [anon_sym_3] = ACTIONS(191), + [anon_sym_4] = ACTIONS(191), + [anon_sym_5] = ACTIONS(191), + [anon_sym_6] = ACTIONS(191), + [anon_sym_7] = ACTIONS(191), + [anon_sym_8] = ACTIONS(191), + [anon_sym_9] = ACTIONS(191), + [anon_sym_A] = ACTIONS(191), + [anon_sym_B] = ACTIONS(191), + [anon_sym_C] = ACTIONS(191), + [anon_sym_D] = ACTIONS(191), + [anon_sym_E] = ACTIONS(191), + [anon_sym_F] = ACTIONS(191), + [anon_sym_a] = ACTIONS(194), + [anon_sym_b] = ACTIONS(191), + [anon_sym_c] = ACTIONS(191), + [anon_sym_d] = ACTIONS(191), + [anon_sym_e] = ACTIONS(194), + [anon_sym_f] = ACTIONS(191), + [anon_sym_i] = ACTIONS(189), + [anon_sym_u] = ACTIONS(189), + [anon_sym_z] = ACTIONS(187), + [anon_sym_DOT] = ACTIONS(189), + [anon_sym_DOT_DOT] = ACTIONS(189), + [anon_sym_QMARK] = ACTIONS(187), + [anon_sym_PLUS] = ACTIONS(189), + [anon_sym_DASH] = ACTIONS(189), + [anon_sym_AMP] = ACTIONS(189), + [anon_sym_as] = ACTIONS(187), + [anon_sym_is] = ACTIONS(187), + [anon_sym_SLASH] = ACTIONS(189), + [anon_sym_PERCENT] = ACTIONS(189), + [anon_sym_LT_LT] = ACTIONS(189), + [anon_sym_GT_GT] = ACTIONS(189), + [anon_sym_CARET] = ACTIONS(189), + [anon_sym_LT] = ACTIONS(189), + [anon_sym_GT] = ACTIONS(189), + [anon_sym_LT_EQ] = ACTIONS(187), + [anon_sym_GT_EQ] = ACTIONS(187), + [anon_sym_EQ_EQ] = ACTIONS(187), + [anon_sym_BANG_EQ] = ACTIONS(187), + [anon_sym_AMP_AMP] = ACTIONS(187), + [anon_sym_CARET_CARET] = ACTIONS(187), + [anon_sym_PIPE_PIPE] = ACTIONS(187), + [anon_sym_else] = ACTIONS(187), + [anon_sym_EQ_GT] = ACTIONS(187), + [anon_sym_PLUS_EQ] = ACTIONS(187), + [anon_sym_DASH_EQ] = ACTIONS(187), + [anon_sym_STAR_EQ] = ACTIONS(187), + [anon_sym_SLASH_EQ] = ACTIONS(187), + [anon_sym_PERCENT_EQ] = ACTIONS(187), + [anon_sym_LT_LT_EQ] = ACTIONS(187), + [anon_sym_GT_GT_EQ] = ACTIONS(187), + [anon_sym_AMP_EQ] = ACTIONS(187), + [anon_sym_PIPE_EQ] = ACTIONS(187), + [anon_sym_CARET_EQ] = ACTIONS(187), + [sym_comment] = ACTIONS(3), + }, + [105] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(574), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(197), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(199), + [anon_sym__] = ACTIONS(201), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [106] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(403), + [sym_logical_or_expression] = STATE(605), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(207), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(209), + [anon_sym__] = ACTIONS(211), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [107] = { + [anon_sym_SEMI] = ACTIONS(213), + [anon_sym_EQ] = ACTIONS(215), + [anon_sym_RBRACE] = ACTIONS(213), + [anon_sym_COMMA] = ACTIONS(213), + [anon_sym_COLON] = ACTIONS(213), + [anon_sym_LPAREN] = ACTIONS(213), + [anon_sym_RPAREN] = ACTIONS(213), + [anon_sym_i8] = ACTIONS(213), + [anon_sym_i16] = ACTIONS(213), + [anon_sym_i32] = ACTIONS(213), + [anon_sym_i64] = ACTIONS(213), + [anon_sym_u8] = ACTIONS(213), + [anon_sym_u16] = ACTIONS(213), + [anon_sym_u32] = ACTIONS(213), + [anon_sym_u64] = ACTIONS(213), + [anon_sym_STAR] = ACTIONS(215), + [anon_sym_PIPE] = ACTIONS(215), + [anon_sym_LBRACK] = ACTIONS(213), + [anon_sym_RBRACK] = ACTIONS(213), + [anon_sym_DOT_DOT_DOT] = ACTIONS(213), + [anon_sym_0] = ACTIONS(213), + [anon_sym_1] = ACTIONS(213), + [anon_sym_2] = ACTIONS(213), + [anon_sym_3] = ACTIONS(213), + [anon_sym_4] = ACTIONS(213), + [anon_sym_5] = ACTIONS(213), + [anon_sym_6] = ACTIONS(213), + [anon_sym_7] = ACTIONS(213), + [anon_sym_8] = ACTIONS(213), + [anon_sym_9] = ACTIONS(213), + [anon_sym_A] = ACTIONS(213), + [anon_sym_B] = ACTIONS(213), + [anon_sym_C] = ACTIONS(213), + [anon_sym_D] = ACTIONS(213), + [anon_sym_E] = ACTIONS(213), + [anon_sym_F] = ACTIONS(213), + [anon_sym_a] = ACTIONS(215), + [anon_sym_b] = ACTIONS(213), + [anon_sym_c] = ACTIONS(213), + [anon_sym_d] = ACTIONS(213), + [anon_sym_e] = ACTIONS(215), + [anon_sym_f] = ACTIONS(213), + [anon_sym_i] = ACTIONS(215), + [anon_sym_u] = ACTIONS(215), + [anon_sym_z] = ACTIONS(213), + [anon_sym_DOT] = ACTIONS(215), + [anon_sym_DOT_DOT] = ACTIONS(215), + [anon_sym_QMARK] = ACTIONS(213), + [anon_sym_PLUS] = ACTIONS(215), + [anon_sym_DASH] = ACTIONS(215), + [anon_sym_AMP] = ACTIONS(215), + [anon_sym_as] = ACTIONS(213), + [anon_sym_is] = ACTIONS(213), + [anon_sym_SLASH] = ACTIONS(215), + [anon_sym_PERCENT] = ACTIONS(215), + [anon_sym_LT_LT] = ACTIONS(215), + [anon_sym_GT_GT] = ACTIONS(215), + [anon_sym_CARET] = ACTIONS(215), + [anon_sym_LT] = ACTIONS(215), + [anon_sym_GT] = ACTIONS(215), + [anon_sym_LT_EQ] = ACTIONS(213), + [anon_sym_GT_EQ] = ACTIONS(213), + [anon_sym_EQ_EQ] = ACTIONS(213), + [anon_sym_BANG_EQ] = ACTIONS(213), + [anon_sym_AMP_AMP] = ACTIONS(213), + [anon_sym_CARET_CARET] = ACTIONS(213), + [anon_sym_PIPE_PIPE] = ACTIONS(213), + [anon_sym_else] = ACTIONS(213), + [anon_sym_EQ_GT] = ACTIONS(213), + [anon_sym_PLUS_EQ] = ACTIONS(213), + [anon_sym_DASH_EQ] = ACTIONS(213), + [anon_sym_STAR_EQ] = ACTIONS(213), + [anon_sym_SLASH_EQ] = ACTIONS(213), + [anon_sym_PERCENT_EQ] = ACTIONS(213), + [anon_sym_LT_LT_EQ] = ACTIONS(213), + [anon_sym_GT_GT_EQ] = ACTIONS(213), + [anon_sym_AMP_EQ] = ACTIONS(213), + [anon_sym_PIPE_EQ] = ACTIONS(213), + [anon_sym_CARET_EQ] = ACTIONS(213), + [sym_comment] = ACTIONS(3), + }, + [108] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(401), + [sym_logical_xor_expression] = STATE(406), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [109] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(386), + [sym_logical_and_expression] = STATE(397), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [110] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(379), + [sym_equality_expression] = STATE(385), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [111] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(374), + [sym_comparison_expression] = STATE(376), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [112] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(373), + [sym_inclusive_or_expression] = STATE(375), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [113] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(367), + [sym_exclusive_or_expression] = STATE(371), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [114] = { + [sym_decimal_digit] = STATE(114), + [aux_sym_decimal_digits_repeat1] = STATE(114), + [anon_sym_SEMI] = ACTIONS(217), + [anon_sym_EQ] = ACTIONS(219), + [anon_sym_RBRACE] = ACTIONS(217), + [anon_sym_COMMA] = ACTIONS(217), + [anon_sym_COLON] = ACTIONS(217), + [anon_sym_LPAREN] = ACTIONS(217), + [anon_sym_RPAREN] = ACTIONS(217), + [anon_sym_i8] = ACTIONS(217), + [anon_sym_i16] = ACTIONS(217), + [anon_sym_i32] = ACTIONS(217), + [anon_sym_i64] = ACTIONS(217), + [anon_sym_u8] = ACTIONS(217), + [anon_sym_u16] = ACTIONS(217), + [anon_sym_u32] = ACTIONS(217), + [anon_sym_u64] = ACTIONS(217), + [anon_sym_f32] = ACTIONS(217), + [anon_sym_f64] = ACTIONS(217), + [anon_sym_STAR] = ACTIONS(219), + [anon_sym_PIPE] = ACTIONS(219), + [anon_sym_LBRACK] = ACTIONS(217), + [anon_sym_RBRACK] = ACTIONS(217), + [anon_sym_DOT_DOT_DOT] = ACTIONS(217), + [anon_sym_0] = ACTIONS(221), + [anon_sym_1] = ACTIONS(221), + [anon_sym_2] = ACTIONS(221), + [anon_sym_3] = ACTIONS(221), + [anon_sym_4] = ACTIONS(221), + [anon_sym_5] = ACTIONS(221), + [anon_sym_6] = ACTIONS(221), + [anon_sym_7] = ACTIONS(221), + [anon_sym_8] = ACTIONS(221), + [anon_sym_9] = ACTIONS(221), + [anon_sym_e] = ACTIONS(219), + [anon_sym_i] = ACTIONS(219), + [anon_sym_u] = ACTIONS(219), + [anon_sym_z] = ACTIONS(217), + [anon_sym_DOT] = ACTIONS(219), + [anon_sym_DOT_DOT] = ACTIONS(219), + [anon_sym_QMARK] = ACTIONS(217), + [anon_sym_PLUS] = ACTIONS(219), + [anon_sym_DASH] = ACTIONS(219), + [anon_sym_AMP] = ACTIONS(219), + [anon_sym_as] = ACTIONS(217), + [anon_sym_is] = ACTIONS(217), + [anon_sym_SLASH] = ACTIONS(219), + [anon_sym_PERCENT] = ACTIONS(219), + [anon_sym_LT_LT] = ACTIONS(219), + [anon_sym_GT_GT] = ACTIONS(219), + [anon_sym_CARET] = ACTIONS(219), + [anon_sym_LT] = ACTIONS(219), + [anon_sym_GT] = ACTIONS(219), + [anon_sym_LT_EQ] = ACTIONS(217), + [anon_sym_GT_EQ] = ACTIONS(217), + [anon_sym_EQ_EQ] = ACTIONS(217), + [anon_sym_BANG_EQ] = ACTIONS(217), + [anon_sym_AMP_AMP] = ACTIONS(217), + [anon_sym_CARET_CARET] = ACTIONS(217), + [anon_sym_PIPE_PIPE] = ACTIONS(217), + [anon_sym_else] = ACTIONS(217), + [anon_sym_EQ_GT] = ACTIONS(217), + [anon_sym_PLUS_EQ] = ACTIONS(217), + [anon_sym_DASH_EQ] = ACTIONS(217), + [anon_sym_STAR_EQ] = ACTIONS(217), + [anon_sym_SLASH_EQ] = ACTIONS(217), + [anon_sym_PERCENT_EQ] = ACTIONS(217), + [anon_sym_LT_LT_EQ] = ACTIONS(217), + [anon_sym_GT_GT_EQ] = ACTIONS(217), + [anon_sym_AMP_EQ] = ACTIONS(217), + [anon_sym_PIPE_EQ] = ACTIONS(217), + [anon_sym_CARET_EQ] = ACTIONS(217), + [sym_comment] = ACTIONS(3), + }, + [115] = { + [sym_decimal_digit] = STATE(114), + [aux_sym_decimal_digits_repeat1] = STATE(114), + [anon_sym_SEMI] = ACTIONS(224), + [anon_sym_EQ] = ACTIONS(226), + [anon_sym_RBRACE] = ACTIONS(224), + [anon_sym_COMMA] = ACTIONS(224), + [anon_sym_COLON] = ACTIONS(224), + [anon_sym_LPAREN] = ACTIONS(224), + [anon_sym_RPAREN] = ACTIONS(224), + [anon_sym_i8] = ACTIONS(224), + [anon_sym_i16] = ACTIONS(224), + [anon_sym_i32] = ACTIONS(224), + [anon_sym_i64] = ACTIONS(224), + [anon_sym_u8] = ACTIONS(224), + [anon_sym_u16] = ACTIONS(224), + [anon_sym_u32] = ACTIONS(224), + [anon_sym_u64] = ACTIONS(224), + [anon_sym_f32] = ACTIONS(224), + [anon_sym_f64] = ACTIONS(224), + [anon_sym_STAR] = ACTIONS(226), + [anon_sym_PIPE] = ACTIONS(226), + [anon_sym_LBRACK] = ACTIONS(224), + [anon_sym_RBRACK] = ACTIONS(224), + [anon_sym_DOT_DOT_DOT] = ACTIONS(224), + [anon_sym_0] = ACTIONS(228), + [anon_sym_1] = ACTIONS(228), + [anon_sym_2] = ACTIONS(228), + [anon_sym_3] = ACTIONS(228), + [anon_sym_4] = ACTIONS(228), + [anon_sym_5] = ACTIONS(228), + [anon_sym_6] = ACTIONS(228), + [anon_sym_7] = ACTIONS(228), + [anon_sym_8] = ACTIONS(228), + [anon_sym_9] = ACTIONS(228), + [anon_sym_e] = ACTIONS(226), + [anon_sym_i] = ACTIONS(226), + [anon_sym_u] = ACTIONS(226), + [anon_sym_z] = ACTIONS(224), + [anon_sym_DOT] = ACTIONS(226), + [anon_sym_DOT_DOT] = ACTIONS(226), + [anon_sym_QMARK] = ACTIONS(224), + [anon_sym_PLUS] = ACTIONS(226), + [anon_sym_DASH] = ACTIONS(226), + [anon_sym_AMP] = ACTIONS(226), + [anon_sym_as] = ACTIONS(224), + [anon_sym_is] = ACTIONS(224), + [anon_sym_SLASH] = ACTIONS(226), + [anon_sym_PERCENT] = ACTIONS(226), + [anon_sym_LT_LT] = ACTIONS(226), + [anon_sym_GT_GT] = ACTIONS(226), + [anon_sym_CARET] = ACTIONS(226), + [anon_sym_LT] = ACTIONS(226), + [anon_sym_GT] = ACTIONS(226), + [anon_sym_LT_EQ] = ACTIONS(224), + [anon_sym_GT_EQ] = ACTIONS(224), + [anon_sym_EQ_EQ] = ACTIONS(224), + [anon_sym_BANG_EQ] = ACTIONS(224), + [anon_sym_AMP_AMP] = ACTIONS(224), + [anon_sym_CARET_CARET] = ACTIONS(224), + [anon_sym_PIPE_PIPE] = ACTIONS(224), + [anon_sym_else] = ACTIONS(224), + [anon_sym_EQ_GT] = ACTIONS(224), + [anon_sym_PLUS_EQ] = ACTIONS(224), + [anon_sym_DASH_EQ] = ACTIONS(224), + [anon_sym_STAR_EQ] = ACTIONS(224), + [anon_sym_SLASH_EQ] = ACTIONS(224), + [anon_sym_PERCENT_EQ] = ACTIONS(224), + [anon_sym_LT_LT_EQ] = ACTIONS(224), + [anon_sym_GT_GT_EQ] = ACTIONS(224), + [anon_sym_AMP_EQ] = ACTIONS(224), + [anon_sym_PIPE_EQ] = ACTIONS(224), + [anon_sym_CARET_EQ] = ACTIONS(224), + [sym_comment] = ACTIONS(3), + }, + [116] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(370), + [sym_and_expression] = STATE(369), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [117] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(358), + [sym_additive_expression] = STATE(364), + [sym_shift_expression] = STATE(368), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [118] = { + [anon_sym_SEMI] = ACTIONS(230), + [anon_sym_EQ] = ACTIONS(232), + [anon_sym_RBRACE] = ACTIONS(230), + [anon_sym_COMMA] = ACTIONS(230), + [anon_sym_COLON] = ACTIONS(230), + [anon_sym_LPAREN] = ACTIONS(230), + [anon_sym_RPAREN] = ACTIONS(230), + [anon_sym_i8] = ACTIONS(230), + [anon_sym_i16] = ACTIONS(230), + [anon_sym_i32] = ACTIONS(230), + [anon_sym_i64] = ACTIONS(230), + [anon_sym_u8] = ACTIONS(230), + [anon_sym_u16] = ACTIONS(230), + [anon_sym_u32] = ACTIONS(230), + [anon_sym_u64] = ACTIONS(230), + [anon_sym_f32] = ACTIONS(230), + [anon_sym_f64] = ACTIONS(230), + [anon_sym_STAR] = ACTIONS(232), + [anon_sym_PIPE] = ACTIONS(232), + [anon_sym_LBRACK] = ACTIONS(230), + [anon_sym_RBRACK] = ACTIONS(230), + [anon_sym_DOT_DOT_DOT] = ACTIONS(230), + [anon_sym_0] = ACTIONS(230), + [anon_sym_1] = ACTIONS(230), + [anon_sym_2] = ACTIONS(230), + [anon_sym_3] = ACTIONS(230), + [anon_sym_4] = ACTIONS(230), + [anon_sym_5] = ACTIONS(230), + [anon_sym_6] = ACTIONS(230), + [anon_sym_7] = ACTIONS(230), + [anon_sym_8] = ACTIONS(230), + [anon_sym_9] = ACTIONS(230), + [anon_sym_e] = ACTIONS(232), + [anon_sym_i] = ACTIONS(232), + [anon_sym_u] = ACTIONS(232), + [anon_sym_z] = ACTIONS(230), + [anon_sym_DOT] = ACTIONS(232), + [anon_sym_DOT_DOT] = ACTIONS(232), + [anon_sym_QMARK] = ACTIONS(230), + [anon_sym_PLUS] = ACTIONS(232), + [anon_sym_DASH] = ACTIONS(232), + [anon_sym_AMP] = ACTIONS(232), + [anon_sym_as] = ACTIONS(230), + [anon_sym_is] = ACTIONS(230), + [anon_sym_SLASH] = ACTIONS(232), + [anon_sym_PERCENT] = ACTIONS(232), + [anon_sym_LT_LT] = ACTIONS(232), + [anon_sym_GT_GT] = ACTIONS(232), + [anon_sym_CARET] = ACTIONS(232), + [anon_sym_LT] = ACTIONS(232), + [anon_sym_GT] = ACTIONS(232), + [anon_sym_LT_EQ] = ACTIONS(230), + [anon_sym_GT_EQ] = ACTIONS(230), + [anon_sym_EQ_EQ] = ACTIONS(230), + [anon_sym_BANG_EQ] = ACTIONS(230), + [anon_sym_AMP_AMP] = ACTIONS(230), + [anon_sym_CARET_CARET] = ACTIONS(230), + [anon_sym_PIPE_PIPE] = ACTIONS(230), + [anon_sym_else] = ACTIONS(230), + [anon_sym_EQ_GT] = ACTIONS(230), + [anon_sym_PLUS_EQ] = ACTIONS(230), + [anon_sym_DASH_EQ] = ACTIONS(230), + [anon_sym_STAR_EQ] = ACTIONS(230), + [anon_sym_SLASH_EQ] = ACTIONS(230), + [anon_sym_PERCENT_EQ] = ACTIONS(230), + [anon_sym_LT_LT_EQ] = ACTIONS(230), + [anon_sym_GT_GT_EQ] = ACTIONS(230), + [anon_sym_AMP_EQ] = ACTIONS(230), + [anon_sym_PIPE_EQ] = ACTIONS(230), + [anon_sym_CARET_EQ] = ACTIONS(230), + [sym_comment] = ACTIONS(3), + }, + [119] = { + [sym_hex_digit] = STATE(120), + [aux_sym_hex_digits_repeat1] = STATE(120), + [anon_sym_SEMI] = ACTIONS(179), + [anon_sym_RBRACE] = ACTIONS(179), + [anon_sym_COMMA] = ACTIONS(179), + [anon_sym_COLON] = ACTIONS(179), + [anon_sym_LPAREN] = ACTIONS(179), + [anon_sym_RPAREN] = ACTIONS(179), + [anon_sym_i8] = ACTIONS(179), + [anon_sym_i16] = ACTIONS(179), + [anon_sym_i32] = ACTIONS(179), + [anon_sym_i64] = ACTIONS(179), + [anon_sym_u8] = ACTIONS(179), + [anon_sym_u16] = ACTIONS(179), + [anon_sym_u32] = ACTIONS(179), + [anon_sym_u64] = ACTIONS(179), + [anon_sym_STAR] = ACTIONS(179), + [anon_sym_PIPE] = ACTIONS(181), + [anon_sym_LBRACK] = ACTIONS(179), + [anon_sym_RBRACK] = ACTIONS(179), + [anon_sym_DOT_DOT_DOT] = ACTIONS(179), + [anon_sym_0] = ACTIONS(234), + [anon_sym_1] = ACTIONS(234), + [anon_sym_2] = ACTIONS(234), + [anon_sym_3] = ACTIONS(234), + [anon_sym_4] = ACTIONS(234), + [anon_sym_5] = ACTIONS(234), + [anon_sym_6] = ACTIONS(234), + [anon_sym_7] = ACTIONS(234), + [anon_sym_8] = ACTIONS(234), + [anon_sym_9] = ACTIONS(234), + [anon_sym_A] = ACTIONS(234), + [anon_sym_B] = ACTIONS(234), + [anon_sym_C] = ACTIONS(234), + [anon_sym_D] = ACTIONS(234), + [anon_sym_E] = ACTIONS(234), + [anon_sym_F] = ACTIONS(234), + [anon_sym_a] = ACTIONS(236), + [anon_sym_b] = ACTIONS(234), + [anon_sym_c] = ACTIONS(234), + [anon_sym_d] = ACTIONS(234), + [anon_sym_e] = ACTIONS(236), + [anon_sym_f] = ACTIONS(234), + [anon_sym_i] = ACTIONS(181), + [anon_sym_u] = ACTIONS(181), + [anon_sym_z] = ACTIONS(179), + [anon_sym_DOT] = ACTIONS(181), + [anon_sym_DOT_DOT] = ACTIONS(181), + [anon_sym_QMARK] = ACTIONS(179), + [anon_sym_PLUS] = ACTIONS(179), + [anon_sym_DASH] = ACTIONS(179), + [anon_sym_AMP] = ACTIONS(181), + [anon_sym_as] = ACTIONS(179), + [anon_sym_is] = ACTIONS(179), + [anon_sym_SLASH] = ACTIONS(181), + [anon_sym_PERCENT] = ACTIONS(179), + [anon_sym_LT_LT] = ACTIONS(179), + [anon_sym_GT_GT] = ACTIONS(179), + [anon_sym_CARET] = ACTIONS(181), + [anon_sym_LT] = ACTIONS(181), + [anon_sym_GT] = ACTIONS(181), + [anon_sym_LT_EQ] = ACTIONS(179), + [anon_sym_GT_EQ] = ACTIONS(179), + [anon_sym_EQ_EQ] = ACTIONS(179), + [anon_sym_BANG_EQ] = ACTIONS(179), + [anon_sym_AMP_AMP] = ACTIONS(179), + [anon_sym_CARET_CARET] = ACTIONS(179), + [anon_sym_PIPE_PIPE] = ACTIONS(179), + [anon_sym_else] = ACTIONS(179), + [anon_sym_EQ_GT] = ACTIONS(179), + [sym_comment] = ACTIONS(3), + }, + [120] = { + [sym_hex_digit] = STATE(120), + [aux_sym_hex_digits_repeat1] = STATE(120), + [anon_sym_SEMI] = ACTIONS(187), + [anon_sym_RBRACE] = ACTIONS(187), + [anon_sym_COMMA] = ACTIONS(187), + [anon_sym_COLON] = ACTIONS(187), + [anon_sym_LPAREN] = ACTIONS(187), + [anon_sym_RPAREN] = ACTIONS(187), + [anon_sym_i8] = ACTIONS(187), + [anon_sym_i16] = ACTIONS(187), + [anon_sym_i32] = ACTIONS(187), + [anon_sym_i64] = ACTIONS(187), + [anon_sym_u8] = ACTIONS(187), + [anon_sym_u16] = ACTIONS(187), + [anon_sym_u32] = ACTIONS(187), + [anon_sym_u64] = ACTIONS(187), + [anon_sym_STAR] = ACTIONS(187), + [anon_sym_PIPE] = ACTIONS(189), + [anon_sym_LBRACK] = ACTIONS(187), + [anon_sym_RBRACK] = ACTIONS(187), + [anon_sym_DOT_DOT_DOT] = ACTIONS(187), + [anon_sym_0] = ACTIONS(238), + [anon_sym_1] = ACTIONS(238), + [anon_sym_2] = ACTIONS(238), + [anon_sym_3] = ACTIONS(238), + [anon_sym_4] = ACTIONS(238), + [anon_sym_5] = ACTIONS(238), + [anon_sym_6] = ACTIONS(238), + [anon_sym_7] = ACTIONS(238), + [anon_sym_8] = ACTIONS(238), + [anon_sym_9] = ACTIONS(238), + [anon_sym_A] = ACTIONS(238), + [anon_sym_B] = ACTIONS(238), + [anon_sym_C] = ACTIONS(238), + [anon_sym_D] = ACTIONS(238), + [anon_sym_E] = ACTIONS(238), + [anon_sym_F] = ACTIONS(238), + [anon_sym_a] = ACTIONS(241), + [anon_sym_b] = ACTIONS(238), + [anon_sym_c] = ACTIONS(238), + [anon_sym_d] = ACTIONS(238), + [anon_sym_e] = ACTIONS(241), + [anon_sym_f] = ACTIONS(238), + [anon_sym_i] = ACTIONS(189), + [anon_sym_u] = ACTIONS(189), + [anon_sym_z] = ACTIONS(187), + [anon_sym_DOT] = ACTIONS(189), + [anon_sym_DOT_DOT] = ACTIONS(189), + [anon_sym_QMARK] = ACTIONS(187), + [anon_sym_PLUS] = ACTIONS(187), + [anon_sym_DASH] = ACTIONS(187), + [anon_sym_AMP] = ACTIONS(189), + [anon_sym_as] = ACTIONS(187), + [anon_sym_is] = ACTIONS(187), + [anon_sym_SLASH] = ACTIONS(189), + [anon_sym_PERCENT] = ACTIONS(187), + [anon_sym_LT_LT] = ACTIONS(187), + [anon_sym_GT_GT] = ACTIONS(187), + [anon_sym_CARET] = ACTIONS(189), + [anon_sym_LT] = ACTIONS(189), + [anon_sym_GT] = ACTIONS(189), + [anon_sym_LT_EQ] = ACTIONS(187), + [anon_sym_GT_EQ] = ACTIONS(187), + [anon_sym_EQ_EQ] = ACTIONS(187), + [anon_sym_BANG_EQ] = ACTIONS(187), + [anon_sym_AMP_AMP] = ACTIONS(187), + [anon_sym_CARET_CARET] = ACTIONS(187), + [anon_sym_PIPE_PIPE] = ACTIONS(187), + [anon_sym_else] = ACTIONS(187), + [anon_sym_EQ_GT] = ACTIONS(187), + [sym_comment] = ACTIONS(3), + }, + [121] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(350), + [sym_multiplicative_expression] = STATE(359), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [122] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(362), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [123] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(357), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(244), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [124] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(357), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_RBRACK] = ACTIONS(246), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [125] = { + [sym_constant] = STATE(226), + [sym_integer_constant] = STATE(249), + [sym_decimal_digits] = STATE(140), + [sym_decimal_digit] = STATE(115), + [sym_floating_constant] = STATE(249), + [sym_rune_constant] = STATE(249), + [sym_string_constant] = STATE(249), + [sym_array_literal] = STATE(226), + [sym_enum_literal] = STATE(226), + [sym_struct_literal] = STATE(226), + [sym_plain_expression] = STATE(254), + [sym_nested_expression] = STATE(255), + [sym_allocation_expression] = STATE(255), + [sym_assertion_expression] = STATE(255), + [sym_call_expression] = STATE(255), + [sym_measurement_expression] = STATE(255), + [sym_size_expression] = STATE(256), + [sym_length_expression] = STATE(256), + [sym_offset_expression] = STATE(256), + [sym_field_access_expression] = STATE(255), + [sym_indexing_expression] = STATE(255), + [sym_slicing_expression] = STATE(255), + [sym_error_propagation] = STATE(255), + [sym_postfix_expression] = STATE(257), + [sym_unary_expression] = STATE(267), + [sym_identifier] = STATE(196), + [aux_sym_decimal_digits_repeat1] = STATE(115), + [aux_sym_string_constant_repeat1] = STATE(208), + [anon_sym_LPAREN] = ACTIONS(248), + [anon_sym_BANG] = ACTIONS(250), + [anon_sym_void] = ACTIONS(252), + [anon_sym_size] = ACTIONS(254), + [anon_sym_STAR] = ACTIONS(250), + [anon_sym_struct] = ACTIONS(256), + [anon_sym_LBRACK] = ACTIONS(258), + [anon_sym_true] = ACTIONS(252), + [anon_sym_false] = ACTIONS(252), + [anon_sym_null] = ACTIONS(252), + [anon_sym_0x] = ACTIONS(260), + [anon_sym_0o] = ACTIONS(262), + [anon_sym_0b] = ACTIONS(264), + [anon_sym_0] = ACTIONS(266), + [anon_sym_1] = ACTIONS(228), + [anon_sym_2] = ACTIONS(228), + [anon_sym_3] = ACTIONS(228), + [anon_sym_4] = ACTIONS(228), + [anon_sym_5] = ACTIONS(228), + [anon_sym_6] = ACTIONS(228), + [anon_sym_7] = ACTIONS(228), + [anon_sym_8] = ACTIONS(228), + [anon_sym_9] = ACTIONS(228), + [anon_sym_SQUOTE] = ACTIONS(268), + [anon_sym_DQUOTE] = ACTIONS(270), + [anon_sym_alloc] = ACTIONS(272), + [anon_sym_append] = ACTIONS(274), + [anon_sym_free] = ACTIONS(276), + [anon_sym_delete] = ACTIONS(278), + [anon_sym_assert] = ACTIONS(280), + [anon_sym_static] = ACTIONS(282), + [anon_sym_abort] = ACTIONS(284), + [anon_sym_len] = ACTIONS(286), + [anon_sym_offset] = ACTIONS(288), + [anon_sym_PLUS] = ACTIONS(250), + [anon_sym_DASH] = ACTIONS(250), + [anon_sym_TILDE] = ACTIONS(250), + [anon_sym_AMP] = ACTIONS(290), + [anon_sym_EQ_GT] = ACTIONS(292), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [126] = { + [anon_sym_SEMI] = ACTIONS(213), + [anon_sym_RBRACE] = ACTIONS(213), + [anon_sym_COMMA] = ACTIONS(213), + [anon_sym_COLON] = ACTIONS(213), + [anon_sym_LPAREN] = ACTIONS(213), + [anon_sym_RPAREN] = ACTIONS(213), + [anon_sym_i8] = ACTIONS(213), + [anon_sym_i16] = ACTIONS(213), + [anon_sym_i32] = ACTIONS(213), + [anon_sym_i64] = ACTIONS(213), + [anon_sym_u8] = ACTIONS(213), + [anon_sym_u16] = ACTIONS(213), + [anon_sym_u32] = ACTIONS(213), + [anon_sym_u64] = ACTIONS(213), + [anon_sym_STAR] = ACTIONS(213), + [anon_sym_PIPE] = ACTIONS(215), + [anon_sym_LBRACK] = ACTIONS(213), + [anon_sym_RBRACK] = ACTIONS(213), + [anon_sym_DOT_DOT_DOT] = ACTIONS(213), + [anon_sym_0] = ACTIONS(213), + [anon_sym_1] = ACTIONS(213), + [anon_sym_2] = ACTIONS(213), + [anon_sym_3] = ACTIONS(213), + [anon_sym_4] = ACTIONS(213), + [anon_sym_5] = ACTIONS(213), + [anon_sym_6] = ACTIONS(213), + [anon_sym_7] = ACTIONS(213), + [anon_sym_8] = ACTIONS(213), + [anon_sym_9] = ACTIONS(213), + [anon_sym_A] = ACTIONS(213), + [anon_sym_B] = ACTIONS(213), + [anon_sym_C] = ACTIONS(213), + [anon_sym_D] = ACTIONS(213), + [anon_sym_E] = ACTIONS(213), + [anon_sym_F] = ACTIONS(213), + [anon_sym_a] = ACTIONS(215), + [anon_sym_b] = ACTIONS(213), + [anon_sym_c] = ACTIONS(213), + [anon_sym_d] = ACTIONS(213), + [anon_sym_e] = ACTIONS(215), + [anon_sym_f] = ACTIONS(213), + [anon_sym_i] = ACTIONS(215), + [anon_sym_u] = ACTIONS(215), + [anon_sym_z] = ACTIONS(213), + [anon_sym_DOT] = ACTIONS(215), + [anon_sym_DOT_DOT] = ACTIONS(215), + [anon_sym_QMARK] = ACTIONS(213), + [anon_sym_PLUS] = ACTIONS(213), + [anon_sym_DASH] = ACTIONS(213), + [anon_sym_AMP] = ACTIONS(215), + [anon_sym_as] = ACTIONS(213), + [anon_sym_is] = ACTIONS(213), + [anon_sym_SLASH] = ACTIONS(215), + [anon_sym_PERCENT] = ACTIONS(213), + [anon_sym_LT_LT] = ACTIONS(213), + [anon_sym_GT_GT] = ACTIONS(213), + [anon_sym_CARET] = ACTIONS(215), + [anon_sym_LT] = ACTIONS(215), + [anon_sym_GT] = ACTIONS(215), + [anon_sym_LT_EQ] = ACTIONS(213), + [anon_sym_GT_EQ] = ACTIONS(213), + [anon_sym_EQ_EQ] = ACTIONS(213), + [anon_sym_BANG_EQ] = ACTIONS(213), + [anon_sym_AMP_AMP] = ACTIONS(213), + [anon_sym_CARET_CARET] = ACTIONS(213), + [anon_sym_PIPE_PIPE] = ACTIONS(213), + [anon_sym_else] = ACTIONS(213), + [anon_sym_EQ_GT] = ACTIONS(213), + [sym_comment] = ACTIONS(3), + }, + [127] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(351), + [sym_cast_expression] = STATE(356), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [128] = { + [sym_constant] = STATE(226), + [sym_integer_constant] = STATE(249), + [sym_decimal_digits] = STATE(140), + [sym_decimal_digit] = STATE(115), + [sym_floating_constant] = STATE(249), + [sym_rune_constant] = STATE(249), + [sym_string_constant] = STATE(249), + [sym_array_literal] = STATE(226), + [sym_enum_literal] = STATE(226), + [sym_struct_literal] = STATE(226), + [sym_plain_expression] = STATE(254), + [sym_nested_expression] = STATE(255), + [sym_allocation_expression] = STATE(255), + [sym_assertion_expression] = STATE(255), + [sym_call_expression] = STATE(255), + [sym_measurement_expression] = STATE(255), + [sym_size_expression] = STATE(256), + [sym_length_expression] = STATE(256), + [sym_offset_expression] = STATE(256), + [sym_field_access_expression] = STATE(255), + [sym_indexing_expression] = STATE(255), + [sym_slicing_expression] = STATE(255), + [sym_error_propagation] = STATE(255), + [sym_postfix_expression] = STATE(257), + [sym_unary_expression] = STATE(272), + [sym_identifier] = STATE(196), + [aux_sym_decimal_digits_repeat1] = STATE(115), + [aux_sym_string_constant_repeat1] = STATE(208), + [anon_sym_LPAREN] = ACTIONS(248), + [anon_sym_BANG] = ACTIONS(250), + [anon_sym_void] = ACTIONS(252), + [anon_sym_size] = ACTIONS(254), + [anon_sym_STAR] = ACTIONS(250), + [anon_sym_struct] = ACTIONS(256), + [anon_sym_LBRACK] = ACTIONS(258), + [anon_sym_true] = ACTIONS(252), + [anon_sym_false] = ACTIONS(252), + [anon_sym_null] = ACTIONS(252), + [anon_sym_0x] = ACTIONS(260), + [anon_sym_0o] = ACTIONS(262), + [anon_sym_0b] = ACTIONS(264), + [anon_sym_0] = ACTIONS(266), + [anon_sym_1] = ACTIONS(228), + [anon_sym_2] = ACTIONS(228), + [anon_sym_3] = ACTIONS(228), + [anon_sym_4] = ACTIONS(228), + [anon_sym_5] = ACTIONS(228), + [anon_sym_6] = ACTIONS(228), + [anon_sym_7] = ACTIONS(228), + [anon_sym_8] = ACTIONS(228), + [anon_sym_9] = ACTIONS(228), + [anon_sym_SQUOTE] = ACTIONS(268), + [anon_sym_DQUOTE] = ACTIONS(270), + [anon_sym_alloc] = ACTIONS(272), + [anon_sym_append] = ACTIONS(274), + [anon_sym_free] = ACTIONS(276), + [anon_sym_delete] = ACTIONS(278), + [anon_sym_assert] = ACTIONS(280), + [anon_sym_static] = ACTIONS(282), + [anon_sym_abort] = ACTIONS(284), + [anon_sym_len] = ACTIONS(286), + [anon_sym_offset] = ACTIONS(288), + [anon_sym_PLUS] = ACTIONS(250), + [anon_sym_DASH] = ACTIONS(250), + [anon_sym_TILDE] = ACTIONS(250), + [anon_sym_AMP] = ACTIONS(290), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [129] = { + [sym_octal_digit] = STATE(129), + [aux_sym_octal_digits_repeat1] = STATE(129), + [anon_sym_SEMI] = ACTIONS(294), + [anon_sym_EQ] = ACTIONS(296), + [anon_sym_RBRACE] = ACTIONS(294), + [anon_sym_COMMA] = ACTIONS(294), + [anon_sym_COLON] = ACTIONS(294), + [anon_sym_LPAREN] = ACTIONS(294), + [anon_sym_RPAREN] = ACTIONS(294), + [anon_sym_i8] = ACTIONS(294), + [anon_sym_i16] = ACTIONS(294), + [anon_sym_i32] = ACTIONS(294), + [anon_sym_i64] = ACTIONS(294), + [anon_sym_u8] = ACTIONS(294), + [anon_sym_u16] = ACTIONS(294), + [anon_sym_u32] = ACTIONS(294), + [anon_sym_u64] = ACTIONS(294), + [anon_sym_STAR] = ACTIONS(296), + [anon_sym_PIPE] = ACTIONS(296), + [anon_sym_LBRACK] = ACTIONS(294), + [anon_sym_RBRACK] = ACTIONS(294), + [anon_sym_DOT_DOT_DOT] = ACTIONS(294), + [anon_sym_0] = ACTIONS(298), + [anon_sym_1] = ACTIONS(298), + [anon_sym_2] = ACTIONS(298), + [anon_sym_3] = ACTIONS(298), + [anon_sym_4] = ACTIONS(298), + [anon_sym_5] = ACTIONS(298), + [anon_sym_6] = ACTIONS(298), + [anon_sym_7] = ACTIONS(298), + [anon_sym_i] = ACTIONS(296), + [anon_sym_u] = ACTIONS(296), + [anon_sym_z] = ACTIONS(294), + [anon_sym_DOT] = ACTIONS(296), + [anon_sym_DOT_DOT] = ACTIONS(296), + [anon_sym_QMARK] = ACTIONS(294), + [anon_sym_PLUS] = ACTIONS(296), + [anon_sym_DASH] = ACTIONS(296), + [anon_sym_AMP] = ACTIONS(296), + [anon_sym_as] = ACTIONS(294), + [anon_sym_is] = ACTIONS(294), + [anon_sym_SLASH] = ACTIONS(296), + [anon_sym_PERCENT] = ACTIONS(296), + [anon_sym_LT_LT] = ACTIONS(296), + [anon_sym_GT_GT] = ACTIONS(296), + [anon_sym_CARET] = ACTIONS(296), + [anon_sym_LT] = ACTIONS(296), + [anon_sym_GT] = ACTIONS(296), + [anon_sym_LT_EQ] = ACTIONS(294), + [anon_sym_GT_EQ] = ACTIONS(294), + [anon_sym_EQ_EQ] = ACTIONS(294), + [anon_sym_BANG_EQ] = ACTIONS(294), + [anon_sym_AMP_AMP] = ACTIONS(294), + [anon_sym_CARET_CARET] = ACTIONS(294), + [anon_sym_PIPE_PIPE] = ACTIONS(294), + [anon_sym_else] = ACTIONS(294), + [anon_sym_EQ_GT] = ACTIONS(294), + [anon_sym_PLUS_EQ] = ACTIONS(294), + [anon_sym_DASH_EQ] = ACTIONS(294), + [anon_sym_STAR_EQ] = ACTIONS(294), + [anon_sym_SLASH_EQ] = ACTIONS(294), + [anon_sym_PERCENT_EQ] = ACTIONS(294), + [anon_sym_LT_LT_EQ] = ACTIONS(294), + [anon_sym_GT_GT_EQ] = ACTIONS(294), + [anon_sym_AMP_EQ] = ACTIONS(294), + [anon_sym_PIPE_EQ] = ACTIONS(294), + [anon_sym_CARET_EQ] = ACTIONS(294), + [sym_comment] = ACTIONS(3), + }, + [130] = { + [sym_constant] = STATE(226), + [sym_integer_constant] = STATE(249), + [sym_decimal_digits] = STATE(140), + [sym_decimal_digit] = STATE(115), + [sym_floating_constant] = STATE(249), + [sym_rune_constant] = STATE(249), + [sym_string_constant] = STATE(249), + [sym_array_literal] = STATE(226), + [sym_enum_literal] = STATE(226), + [sym_struct_literal] = STATE(226), + [sym_plain_expression] = STATE(254), + [sym_nested_expression] = STATE(255), + [sym_allocation_expression] = STATE(255), + [sym_assertion_expression] = STATE(255), + [sym_call_expression] = STATE(255), + [sym_measurement_expression] = STATE(255), + [sym_size_expression] = STATE(256), + [sym_length_expression] = STATE(256), + [sym_offset_expression] = STATE(256), + [sym_field_access_expression] = STATE(255), + [sym_indexing_expression] = STATE(255), + [sym_slicing_expression] = STATE(255), + [sym_error_propagation] = STATE(255), + [sym_postfix_expression] = STATE(257), + [sym_unary_expression] = STATE(269), + [sym_identifier] = STATE(196), + [aux_sym_decimal_digits_repeat1] = STATE(115), + [aux_sym_string_constant_repeat1] = STATE(208), + [anon_sym_LPAREN] = ACTIONS(248), + [anon_sym_BANG] = ACTIONS(250), + [anon_sym_void] = ACTIONS(252), + [anon_sym_size] = ACTIONS(254), + [anon_sym_STAR] = ACTIONS(250), + [anon_sym_struct] = ACTIONS(256), + [anon_sym_LBRACK] = ACTIONS(258), + [anon_sym_true] = ACTIONS(252), + [anon_sym_false] = ACTIONS(252), + [anon_sym_null] = ACTIONS(252), + [anon_sym_0x] = ACTIONS(260), + [anon_sym_0o] = ACTIONS(262), + [anon_sym_0b] = ACTIONS(264), + [anon_sym_0] = ACTIONS(266), + [anon_sym_1] = ACTIONS(228), + [anon_sym_2] = ACTIONS(228), + [anon_sym_3] = ACTIONS(228), + [anon_sym_4] = ACTIONS(228), + [anon_sym_5] = ACTIONS(228), + [anon_sym_6] = ACTIONS(228), + [anon_sym_7] = ACTIONS(228), + [anon_sym_8] = ACTIONS(228), + [anon_sym_9] = ACTIONS(228), + [anon_sym_SQUOTE] = ACTIONS(268), + [anon_sym_DQUOTE] = ACTIONS(270), + [anon_sym_alloc] = ACTIONS(272), + [anon_sym_append] = ACTIONS(274), + [anon_sym_free] = ACTIONS(276), + [anon_sym_delete] = ACTIONS(278), + [anon_sym_assert] = ACTIONS(280), + [anon_sym_static] = ACTIONS(282), + [anon_sym_abort] = ACTIONS(284), + [anon_sym_len] = ACTIONS(286), + [anon_sym_offset] = ACTIONS(288), + [anon_sym_PLUS] = ACTIONS(250), + [anon_sym_DASH] = ACTIONS(250), + [anon_sym_TILDE] = ACTIONS(250), + [anon_sym_AMP] = ACTIONS(290), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [131] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(810), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(301), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(301), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(301), + [anon_sym_DASH] = ACTIONS(301), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_AMP] = ACTIONS(303), + [sym_name] = ACTIONS(305), + [sym_comment] = ACTIONS(3), + }, + [132] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(357), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(35), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(35), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(35), + [anon_sym_DASH] = ACTIONS(35), + [anon_sym_TILDE] = ACTIONS(35), + [anon_sym_AMP] = ACTIONS(81), + [sym_name] = ACTIONS(205), + [sym_comment] = ACTIONS(3), + }, + [133] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(357), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(301), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(301), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(301), + [anon_sym_DASH] = ACTIONS(301), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_AMP] = ACTIONS(303), + [sym_name] = ACTIONS(305), + [sym_comment] = ACTIONS(3), + }, + [134] = { + [sym_constant] = STATE(303), + [sym_integer_constant] = STATE(295), + [sym_decimal_digits] = STATE(164), + [sym_decimal_digit] = STATE(149), + [sym_floating_constant] = STATE(295), + [sym_rune_constant] = STATE(295), + [sym_string_constant] = STATE(295), + [sym_array_literal] = STATE(303), + [sym_enum_literal] = STATE(303), + [sym_struct_literal] = STATE(303), + [sym_plain_expression] = STATE(304), + [sym_nested_expression] = STATE(305), + [sym_allocation_expression] = STATE(305), + [sym_assertion_expression] = STATE(305), + [sym_call_expression] = STATE(305), + [sym_measurement_expression] = STATE(305), + [sym_size_expression] = STATE(306), + [sym_length_expression] = STATE(306), + [sym_offset_expression] = STATE(306), + [sym_field_access_expression] = STATE(305), + [sym_indexing_expression] = STATE(305), + [sym_slicing_expression] = STATE(305), + [sym_error_propagation] = STATE(305), + [sym_postfix_expression] = STATE(307), + [sym_unary_expression] = STATE(775), + [sym_identifier] = STATE(274), + [aux_sym_decimal_digits_repeat1] = STATE(149), + [aux_sym_string_constant_repeat1] = STATE(276), + [anon_sym_LPAREN] = ACTIONS(33), + [anon_sym_BANG] = ACTIONS(301), + [anon_sym_void] = ACTIONS(37), + [anon_sym_size] = ACTIONS(39), + [anon_sym_STAR] = ACTIONS(301), + [anon_sym_struct] = ACTIONS(43), + [anon_sym_LBRACK] = ACTIONS(45), + [anon_sym_true] = ACTIONS(37), + [anon_sym_false] = ACTIONS(37), + [anon_sym_null] = ACTIONS(37), + [anon_sym_0x] = ACTIONS(47), + [anon_sym_0o] = ACTIONS(49), + [anon_sym_0b] = ACTIONS(51), + [anon_sym_0] = ACTIONS(53), + [anon_sym_1] = ACTIONS(55), + [anon_sym_2] = ACTIONS(55), + [anon_sym_3] = ACTIONS(55), + [anon_sym_4] = ACTIONS(55), + [anon_sym_5] = ACTIONS(55), + [anon_sym_6] = ACTIONS(55), + [anon_sym_7] = ACTIONS(55), + [anon_sym_8] = ACTIONS(55), + [anon_sym_9] = ACTIONS(55), + [anon_sym_SQUOTE] = ACTIONS(57), + [anon_sym_DQUOTE] = ACTIONS(59), + [anon_sym_alloc] = ACTIONS(61), + [anon_sym_append] = ACTIONS(63), + [anon_sym_free] = ACTIONS(65), + [anon_sym_delete] = ACTIONS(67), + [anon_sym_assert] = ACTIONS(69), + [anon_sym_static] = ACTIONS(203), + [anon_sym_abort] = ACTIONS(73), + [anon_sym_len] = ACTIONS(75), + [anon_sym_offset] = ACTIONS(77), + [anon_sym_PLUS] = ACTIONS(301), + [anon_sym_DASH] = ACTIONS(301), + [anon_sym_TILDE] = ACTIONS(301), + [anon_sym_AMP] = ACTIONS(303), + [sym_name] = ACTIONS(305), + [sym_comment] = ACTIONS(3), + }, + [135] = { + [sym_constant] = STATE(226), + [sym_integer_constant] = STATE(249), + [sym_decimal_digits] = STATE(140), + [sym_decimal_digit] = STATE(115), + [sym_floating_constant] = STATE(249), + [sym_rune_constant] = STATE(249), + [sym_string_constant] = STATE(249), + [sym_array_literal] = STATE(226), + [sym_enum_literal] = STATE(226), + [sym_struct_literal] = STATE(226), + [sym_plain_expression] = STATE(254), + [sym_nested_expression] = STATE(255), + [sym_allocation_expression] = STATE(255), + [sym_assertion_expression] = STATE(255), + [sym_call_expression] = STATE(255), + [sym_measurement_expression] = STATE(255), + [sym_size_expression] = STATE(256), + [sym_length_expression] = STATE(256), + [sym_offset_expression] = STATE(256), + [sym_field_access_expression] = STATE(255), + [sym_indexing_expression] = STATE(255), + [sym_slicing_expression] = STATE(255), + [sym_error_propagation] = STATE(255), + [sym_postfix_expression] = STATE(257), + [sym_unary_expression] = STATE(267), + [sym_identifier] = STATE(196), + [aux_sym_decimal_digits_repeat1] = STATE(115), + [aux_sym_string_constant_repeat1] = STATE(208), + [anon_sym_LPAREN] = ACTIONS(248), + [anon_sym_BANG] = ACTIONS(250), + [anon_sym_void] = ACTIONS(252), + [anon_sym_size] = ACTIONS(254), + [anon_sym_STAR] = ACTIONS(250), + [anon_sym_struct] = ACTIONS(256), + [anon_sym_LBRACK] = ACTIONS(258), + [anon_sym_true] = ACTIONS(252), + [anon_sym_false] = ACTIONS(252), + [anon_sym_null] = ACTIONS(252), + [anon_sym_0x] = ACTIONS(260), + [anon_sym_0o] = ACTIONS(262), + [anon_sym_0b] = ACTIONS(264), + [anon_sym_0] = ACTIONS(266), + [anon_sym_1] = ACTIONS(228), + [anon_sym_2] = ACTIONS(228), + [anon_sym_3] = ACTIONS(228), + [anon_sym_4] = ACTIONS(228), + [anon_sym_5] = ACTIONS(228), + [anon_sym_6] = ACTIONS(228), + [anon_sym_7] = ACTIONS(228), + [anon_sym_8] = ACTIONS(228), + [anon_sym_9] = ACTIONS(228), + [anon_sym_SQUOTE] = ACTIONS(268), + [anon_sym_DQUOTE] = ACTIONS(270), + [anon_sym_alloc] = ACTIONS(272), + [anon_sym_append] = ACTIONS(274), + [anon_sym_free] = ACTIONS(276), + [anon_sym_delete] = ACTIONS(278), + [anon_sym_assert] = ACTIONS(280), + [anon_sym_static] = ACTIONS(282), + [anon_sym_abort] = ACTIONS(284), + [anon_sym_len] = ACTIONS(286), + [anon_sym_offset] = ACTIONS(288), + [anon_sym_PLUS] = ACTIONS(250), + [anon_sym_DASH] = ACTIONS(250), + [anon_sym_TILDE] = ACTIONS(250), + [anon_sym_AMP] = ACTIONS(290), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [136] = { + [sym_octal_digit] = STATE(129), + [aux_sym_octal_digits_repeat1] = STATE(129), + [anon_sym_SEMI] = ACTIONS(307), + [anon_sym_EQ] = ACTIONS(309), + [anon_sym_RBRACE] = ACTIONS(307), + [anon_sym_COMMA] = ACTIONS(307), + [anon_sym_COLON] = ACTIONS(307), + [anon_sym_LPAREN] = ACTIONS(307), + [anon_sym_RPAREN] = ACTIONS(307), + [anon_sym_i8] = ACTIONS(307), + [anon_sym_i16] = ACTIONS(307), + [anon_sym_i32] = ACTIONS(307), + [anon_sym_i64] = ACTIONS(307), + [anon_sym_u8] = ACTIONS(307), + [anon_sym_u16] = ACTIONS(307), + [anon_sym_u32] = ACTIONS(307), + [anon_sym_u64] = ACTIONS(307), + [anon_sym_STAR] = ACTIONS(309), + [anon_sym_PIPE] = ACTIONS(309), + [anon_sym_LBRACK] = ACTIONS(307), + [anon_sym_RBRACK] = ACTIONS(307), + [anon_sym_DOT_DOT_DOT] = ACTIONS(307), + [anon_sym_0] = ACTIONS(311), + [anon_sym_1] = ACTIONS(311), + [anon_sym_2] = ACTIONS(311), + [anon_sym_3] = ACTIONS(311), + [anon_sym_4] = ACTIONS(311), + [anon_sym_5] = ACTIONS(311), + [anon_sym_6] = ACTIONS(311), + [anon_sym_7] = ACTIONS(311), + [anon_sym_i] = ACTIONS(309), + [anon_sym_u] = ACTIONS(309), + [anon_sym_z] = ACTIONS(307), + [anon_sym_DOT] = ACTIONS(309), + [anon_sym_DOT_DOT] = ACTIONS(309), + [anon_sym_QMARK] = ACTIONS(307), + [anon_sym_PLUS] = ACTIONS(309), + [anon_sym_DASH] = ACTIONS(309), + [anon_sym_AMP] = ACTIONS(309), + [anon_sym_as] = ACTIONS(307), + [anon_sym_is] = ACTIONS(307), + [anon_sym_SLASH] = ACTIONS(309), + [anon_sym_PERCENT] = ACTIONS(309), + [anon_sym_LT_LT] = ACTIONS(309), + [anon_sym_GT_GT] = ACTIONS(309), + [anon_sym_CARET] = ACTIONS(309), + [anon_sym_LT] = ACTIONS(309), + [anon_sym_GT] = ACTIONS(309), + [anon_sym_LT_EQ] = ACTIONS(307), + [anon_sym_GT_EQ] = ACTIONS(307), + [anon_sym_EQ_EQ] = ACTIONS(307), + [anon_sym_BANG_EQ] = ACTIONS(307), + [anon_sym_AMP_AMP] = ACTIONS(307), + [anon_sym_CARET_CARET] = ACTIONS(307), + [anon_sym_PIPE_PIPE] = ACTIONS(307), + [anon_sym_else] = ACTIONS(307), + [anon_sym_EQ_GT] = ACTIONS(307), + [anon_sym_PLUS_EQ] = ACTIONS(307), + [anon_sym_DASH_EQ] = ACTIONS(307), + [anon_sym_STAR_EQ] = ACTIONS(307), + [anon_sym_SLASH_EQ] = ACTIONS(307), + [anon_sym_PERCENT_EQ] = ACTIONS(307), + [anon_sym_LT_LT_EQ] = ACTIONS(307), + [anon_sym_GT_GT_EQ] = ACTIONS(307), + [anon_sym_AMP_EQ] = ACTIONS(307), + [anon_sym_PIPE_EQ] = ACTIONS(307), + [anon_sym_CARET_EQ] = ACTIONS(307), + [sym_comment] = ACTIONS(3), + }, + [137] = { + [sym_constant] = STATE(226), + [sym_integer_constant] = STATE(249), + [sym_decimal_digits] = STATE(140), + [sym_decimal_digit] = STATE(115), + [sym_floating_constant] = STATE(249), + [sym_rune_constant] = STATE(249), + [sym_string_constant] = STATE(249), + [sym_array_literal] = STATE(226), + [sym_enum_literal] = STATE(226), + [sym_struct_literal] = STATE(226), + [sym_plain_expression] = STATE(254), + [sym_nested_expression] = STATE(255), + [sym_allocation_expression] = STATE(255), + [sym_assertion_expression] = STATE(255), + [sym_call_expression] = STATE(255), + [sym_measurement_expression] = STATE(255), + [sym_size_expression] = STATE(256), + [sym_length_expression] = STATE(256), + [sym_offset_expression] = STATE(256), + [sym_field_access_expression] = STATE(255), + [sym_indexing_expression] = STATE(255), + [sym_slicing_expression] = STATE(255), + [sym_error_propagation] = STATE(255), + [sym_postfix_expression] = STATE(257), + [sym_unary_expression] = STATE(264), + [sym_identifier] = STATE(196), + [aux_sym_decimal_digits_repeat1] = STATE(115), + [aux_sym_string_constant_repeat1] = STATE(208), + [anon_sym_LPAREN] = ACTIONS(248), + [anon_sym_BANG] = ACTIONS(250), + [anon_sym_void] = ACTIONS(252), + [anon_sym_size] = ACTIONS(254), + [anon_sym_STAR] = ACTIONS(250), + [anon_sym_struct] = ACTIONS(256), + [anon_sym_LBRACK] = ACTIONS(258), + [anon_sym_true] = ACTIONS(252), + [anon_sym_false] = ACTIONS(252), + [anon_sym_null] = ACTIONS(252), + [anon_sym_0x] = ACTIONS(260), + [anon_sym_0o] = ACTIONS(262), + [anon_sym_0b] = ACTIONS(264), + [anon_sym_0] = ACTIONS(266), + [anon_sym_1] = ACTIONS(228), + [anon_sym_2] = ACTIONS(228), + [anon_sym_3] = ACTIONS(228), + [anon_sym_4] = ACTIONS(228), + [anon_sym_5] = ACTIONS(228), + [anon_sym_6] = ACTIONS(228), + [anon_sym_7] = ACTIONS(228), + [anon_sym_8] = ACTIONS(228), + [anon_sym_9] = ACTIONS(228), + [anon_sym_SQUOTE] = ACTIONS(268), + [anon_sym_DQUOTE] = ACTIONS(270), + [anon_sym_alloc] = ACTIONS(272), + [anon_sym_append] = ACTIONS(274), + [anon_sym_free] = ACTIONS(276), + [anon_sym_delete] = ACTIONS(278), + [anon_sym_assert] = ACTIONS(280), + [anon_sym_static] = ACTIONS(282), + [anon_sym_abort] = ACTIONS(284), + [anon_sym_len] = ACTIONS(286), + [anon_sym_offset] = ACTIONS(288), + [anon_sym_PLUS] = ACTIONS(250), + [anon_sym_DASH] = ACTIONS(250), + [anon_sym_TILDE] = ACTIONS(250), + [anon_sym_AMP] = ACTIONS(290), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [138] = { + [sym_constant] = STATE(226), + [sym_integer_constant] = STATE(249), + [sym_decimal_digits] = STATE(140), + [sym_decimal_digit] = STATE(115), + [sym_floating_constant] = STATE(249), + [sym_rune_constant] = STATE(249), + [sym_string_constant] = STATE(249), + [sym_array_literal] = STATE(226), + [sym_enum_literal] = STATE(226), + [sym_struct_literal] = STATE(226), + [sym_plain_expression] = STATE(254), + [sym_nested_expression] = STATE(255), + [sym_allocation_expression] = STATE(255), + [sym_assertion_expression] = STATE(255), + [sym_call_expression] = STATE(255), + [sym_measurement_expression] = STATE(255), + [sym_size_expression] = STATE(256), + [sym_length_expression] = STATE(256), + [sym_offset_expression] = STATE(256), + [sym_field_access_expression] = STATE(255), + [sym_indexing_expression] = STATE(255), + [sym_slicing_expression] = STATE(255), + [sym_error_propagation] = STATE(255), + [sym_postfix_expression] = STATE(257), + [sym_unary_expression] = STATE(265), + [sym_identifier] = STATE(196), + [aux_sym_decimal_digits_repeat1] = STATE(115), + [aux_sym_string_constant_repeat1] = STATE(208), + [anon_sym_LPAREN] = ACTIONS(248), + [anon_sym_BANG] = ACTIONS(250), + [anon_sym_void] = ACTIONS(252), + [anon_sym_size] = ACTIONS(254), + [anon_sym_STAR] = ACTIONS(250), + [anon_sym_struct] = ACTIONS(256), + [anon_sym_LBRACK] = ACTIONS(258), + [anon_sym_true] = ACTIONS(252), + [anon_sym_false] = ACTIONS(252), + [anon_sym_null] = ACTIONS(252), + [anon_sym_0x] = ACTIONS(260), + [anon_sym_0o] = ACTIONS(262), + [anon_sym_0b] = ACTIONS(264), + [anon_sym_0] = ACTIONS(266), + [anon_sym_1] = ACTIONS(228), + [anon_sym_2] = ACTIONS(228), + [anon_sym_3] = ACTIONS(228), + [anon_sym_4] = ACTIONS(228), + [anon_sym_5] = ACTIONS(228), + [anon_sym_6] = ACTIONS(228), + [anon_sym_7] = ACTIONS(228), + [anon_sym_8] = ACTIONS(228), + [anon_sym_9] = ACTIONS(228), + [anon_sym_SQUOTE] = ACTIONS(268), + [anon_sym_DQUOTE] = ACTIONS(270), + [anon_sym_alloc] = ACTIONS(272), + [anon_sym_append] = ACTIONS(274), + [anon_sym_free] = ACTIONS(276), + [anon_sym_delete] = ACTIONS(278), + [anon_sym_assert] = ACTIONS(280), + [anon_sym_static] = ACTIONS(282), + [anon_sym_abort] = ACTIONS(284), + [anon_sym_len] = ACTIONS(286), + [anon_sym_offset] = ACTIONS(288), + [anon_sym_PLUS] = ACTIONS(250), + [anon_sym_DASH] = ACTIONS(250), + [anon_sym_TILDE] = ACTIONS(250), + [anon_sym_AMP] = ACTIONS(290), + [sym_name] = ACTIONS(97), + [sym_comment] = ACTIONS(3), + }, + [139] = { + [anon_sym_SEMI] = ACTIONS(313), + [anon_sym_EQ] = ACTIONS(315), + [anon_sym_RBRACE] = ACTIONS(313), + [anon_sym_COMMA] = ACTIONS(313), + [anon_sym_COLON] = ACTIONS(313), + [anon_sym_LPAREN] = ACTIONS(313), + [anon_sym_RPAREN] = ACTIONS(313), + [anon_sym_i8] = ACTIONS(313), + [anon_sym_i16] = ACTIONS(313), + [anon_sym_i32] = ACTIONS(313), + [anon_sym_i64] = ACTIONS(313), + [anon_sym_u8] = ACTIONS(313), + [anon_sym_u16] = ACTIONS(313), + [anon_sym_u32] = ACTIONS(313), + [anon_sym_u64] = ACTIONS(313), + [anon_sym_STAR] = ACTIONS(315), + [anon_sym_PIPE] = ACTIONS(315), + [anon_sym_LBRACK] = ACTIONS(313), + [anon_sym_RBRACK] = ACTIONS(313), + [anon_sym_DOT_DOT_DOT] = ACTIONS(313), + [anon_sym_0] = ACTIONS(313), + [anon_sym_1] = ACTIONS(313), + [anon_sym_2] = ACTIONS(313), + [anon_sym_3] = ACTIONS(313), + [anon_sym_4] = ACTIONS(313), + [anon_sym_5] = ACTIONS(313), + [anon_sym_6] = ACTIONS(313), + [anon_sym_7] = ACTIONS(313), + [anon_sym_i] = ACTIONS(315), + [anon_sym_u] = ACTIONS(315), + [anon_sym_z] = ACTIONS(313), + [anon_sym_DOT] = ACTIONS(315), + [anon_sym_DOT_DOT] = ACTIONS(315), + [anon_sym_QMARK] = ACTIONS(313), + [anon_sym_PLUS] = ACTIONS(315), + [anon_sym_DASH] = ACTIONS(315), + [anon_sym_AMP] = ACTIONS(315), + [anon_sym_as] = ACTIONS(313), + [anon_sym_is] = ACTIONS(313), + [anon_sym_SLASH] = ACTIONS(315), + [anon_sym_PERCENT] = ACTIONS(315), + [anon_sym_LT_LT] = ACTIONS(315), + [anon_sym_GT_GT] = ACTIONS(315), + [anon_sym_CARET] = ACTIONS(315), + [anon_sym_LT] = ACTIONS(315), + [anon_sym_GT] = ACTIONS(315), + [anon_sym_LT_EQ] = ACTIONS(313), + [anon_sym_GT_EQ] = ACTIONS(313), + [anon_sym_EQ_EQ] = ACTIONS(313), + [anon_sym_BANG_EQ] = ACTIONS(313), + [anon_sym_AMP_AMP] = ACTIONS(313), + [anon_sym_CARET_CARET] = ACTIONS(313), + [anon_sym_PIPE_PIPE] = ACTIONS(313), + [anon_sym_else] = ACTIONS(313), + [anon_sym_EQ_GT] = ACTIONS(313), + [anon_sym_PLUS_EQ] = ACTIONS(313), + [anon_sym_DASH_EQ] = ACTIONS(313), + [anon_sym_STAR_EQ] = ACTIONS(313), + [anon_sym_SLASH_EQ] = ACTIONS(313), + [anon_sym_PERCENT_EQ] = ACTIONS(313), + [anon_sym_LT_LT_EQ] = ACTIONS(313), + [anon_sym_GT_GT_EQ] = ACTIONS(313), + [anon_sym_AMP_EQ] = ACTIONS(313), + [anon_sym_PIPE_EQ] = ACTIONS(313), + [anon_sym_CARET_EQ] = ACTIONS(313), + [sym_comment] = ACTIONS(3), + }, +}; + +static uint16_t ts_small_parse_table[] = { + [0] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(325), 1, + anon_sym_e, + ACTIONS(329), 1, + anon_sym_DOT, + STATE(143), 1, + sym_exponent, + STATE(251), 1, + sym_floating_suffix, + STATE(252), 1, + sym_integer_suffix, + ACTIONS(323), 2, + anon_sym_f32, + anon_sym_f64, + ACTIONS(327), 2, + anon_sym_i, + anon_sym_u, + ACTIONS(321), 9, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_z, + ACTIONS(319), 14, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(317), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [87] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(33), 1, + anon_sym_LPAREN, + ACTIONS(39), 1, + anon_sym_size, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(45), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_0x, + ACTIONS(49), 1, + anon_sym_0o, + ACTIONS(51), 1, + anon_sym_0b, + ACTIONS(53), 1, + anon_sym_0, + ACTIONS(57), 1, + anon_sym_SQUOTE, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(61), 1, + anon_sym_alloc, + ACTIONS(63), 1, + anon_sym_append, + ACTIONS(65), 1, + anon_sym_free, + ACTIONS(67), 1, + anon_sym_delete, + ACTIONS(69), 1, + anon_sym_assert, + ACTIONS(73), 1, + anon_sym_abort, + ACTIONS(75), 1, + anon_sym_len, + ACTIONS(77), 1, + anon_sym_offset, + ACTIONS(203), 1, + anon_sym_static, + ACTIONS(305), 1, + sym_name, + ACTIONS(332), 1, + anon_sym_STAR, + STATE(164), 1, + sym_decimal_digits, + STATE(273), 1, + sym_identifier, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(304), 1, + sym_plain_expression, + STATE(516), 1, + sym_postfix_expression, + STATE(736), 1, + sym_object_selector, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + STATE(315), 2, + sym_field_access_expression, + sym_indexing_expression, + STATE(306), 3, + sym_size_expression, + sym_length_expression, + sym_offset_expression, + ACTIONS(37), 4, + anon_sym_void, + anon_sym_true, + anon_sym_false, + anon_sym_null, + STATE(295), 4, + sym_integer_constant, + sym_floating_constant, + sym_rune_constant, + sym_string_constant, + STATE(303), 4, + sym_constant, + sym_array_literal, + sym_enum_literal, + sym_struct_literal, + STATE(305), 7, + sym_nested_expression, + sym_allocation_expression, + sym_assertion_expression, + sym_call_expression, + sym_measurement_expression, + sym_slicing_expression, + sym_error_propagation, + ACTIONS(55), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [223] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(33), 1, + anon_sym_LPAREN, + ACTIONS(39), 1, + anon_sym_size, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(45), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_0x, + ACTIONS(49), 1, + anon_sym_0o, + ACTIONS(51), 1, + anon_sym_0b, + ACTIONS(53), 1, + anon_sym_0, + ACTIONS(57), 1, + anon_sym_SQUOTE, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(61), 1, + anon_sym_alloc, + ACTIONS(63), 1, + anon_sym_append, + ACTIONS(65), 1, + anon_sym_free, + ACTIONS(67), 1, + anon_sym_delete, + ACTIONS(69), 1, + anon_sym_assert, + ACTIONS(73), 1, + anon_sym_abort, + ACTIONS(75), 1, + anon_sym_len, + ACTIONS(77), 1, + anon_sym_offset, + ACTIONS(203), 1, + anon_sym_static, + ACTIONS(305), 1, + sym_name, + ACTIONS(334), 1, + anon_sym_STAR, + STATE(164), 1, + sym_decimal_digits, + STATE(273), 1, + sym_identifier, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(304), 1, + sym_plain_expression, + STATE(516), 1, + sym_postfix_expression, + STATE(808), 1, + sym_object_selector, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + STATE(315), 2, + sym_field_access_expression, + sym_indexing_expression, + STATE(306), 3, + sym_size_expression, + sym_length_expression, + sym_offset_expression, + ACTIONS(37), 4, + anon_sym_void, + anon_sym_true, + anon_sym_false, + anon_sym_null, + STATE(295), 4, + sym_integer_constant, + sym_floating_constant, + sym_rune_constant, + sym_string_constant, + STATE(303), 4, + sym_constant, + sym_array_literal, + sym_enum_literal, + sym_struct_literal, + STATE(305), 7, + sym_nested_expression, + sym_allocation_expression, + sym_assertion_expression, + sym_call_expression, + sym_measurement_expression, + sym_slicing_expression, + sym_error_propagation, + ACTIONS(55), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [359] = 8, + ACTIONS(3), 1, + sym_comment, + STATE(228), 1, + sym_floating_suffix, + STATE(244), 1, + sym_integer_suffix, + ACTIONS(323), 2, + anon_sym_f32, + anon_sym_f64, + ACTIONS(327), 2, + anon_sym_i, + anon_sym_u, + ACTIONS(321), 9, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_z, + ACTIONS(338), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(336), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [438] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(344), 2, + anon_sym_0, + anon_sym_1, + STATE(144), 2, + sym_binary_digit, + aux_sym_binary_digits_repeat1, + ACTIONS(342), 17, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(340), 40, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_z, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [511] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(145), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + ACTIONS(347), 10, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + ACTIONS(219), 11, + anon_sym_PIPE, + anon_sym_e, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(217), 38, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_f32, + anon_sym_f64, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_z, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [584] = 35, + ACTIONS(3), 1, + sym_comment, + ACTIONS(33), 1, + anon_sym_LPAREN, + ACTIONS(39), 1, + anon_sym_size, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(45), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_0x, + ACTIONS(49), 1, + anon_sym_0o, + ACTIONS(51), 1, + anon_sym_0b, + ACTIONS(53), 1, + anon_sym_0, + ACTIONS(57), 1, + anon_sym_SQUOTE, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(61), 1, + anon_sym_alloc, + ACTIONS(63), 1, + anon_sym_append, + ACTIONS(65), 1, + anon_sym_free, + ACTIONS(67), 1, + anon_sym_delete, + ACTIONS(69), 1, + anon_sym_assert, + ACTIONS(73), 1, + anon_sym_abort, + ACTIONS(75), 1, + anon_sym_len, + ACTIONS(77), 1, + anon_sym_offset, + ACTIONS(97), 1, + sym_name, + ACTIONS(203), 1, + anon_sym_static, + STATE(164), 1, + sym_decimal_digits, + STATE(212), 1, + sym_identifier, + STATE(266), 1, + sym_object_selector, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(304), 1, + sym_plain_expression, + STATE(509), 1, + sym_postfix_expression, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + STATE(230), 2, + sym_field_access_expression, + sym_indexing_expression, + STATE(306), 3, + sym_size_expression, + sym_length_expression, + sym_offset_expression, + ACTIONS(37), 4, + anon_sym_void, + anon_sym_true, + anon_sym_false, + anon_sym_null, + STATE(295), 4, + sym_integer_constant, + sym_floating_constant, + sym_rune_constant, + sym_string_constant, + STATE(303), 4, + sym_constant, + sym_array_literal, + sym_enum_literal, + sym_struct_literal, + STATE(305), 7, + sym_nested_expression, + sym_allocation_expression, + sym_assertion_expression, + sym_call_expression, + sym_measurement_expression, + sym_slicing_expression, + sym_error_propagation, + ACTIONS(55), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [717] = 35, + ACTIONS(3), 1, + sym_comment, + ACTIONS(33), 1, + anon_sym_LPAREN, + ACTIONS(39), 1, + anon_sym_size, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(45), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_0x, + ACTIONS(49), 1, + anon_sym_0o, + ACTIONS(51), 1, + anon_sym_0b, + ACTIONS(53), 1, + anon_sym_0, + ACTIONS(57), 1, + anon_sym_SQUOTE, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(61), 1, + anon_sym_alloc, + ACTIONS(63), 1, + anon_sym_append, + ACTIONS(65), 1, + anon_sym_free, + ACTIONS(67), 1, + anon_sym_delete, + ACTIONS(69), 1, + anon_sym_assert, + ACTIONS(73), 1, + anon_sym_abort, + ACTIONS(75), 1, + anon_sym_len, + ACTIONS(77), 1, + anon_sym_offset, + ACTIONS(203), 1, + anon_sym_static, + ACTIONS(205), 1, + sym_name, + STATE(164), 1, + sym_decimal_digits, + STATE(273), 1, + sym_identifier, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(304), 1, + sym_plain_expression, + STATE(352), 1, + sym_object_selector, + STATE(516), 1, + sym_postfix_expression, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + STATE(315), 2, + sym_field_access_expression, + sym_indexing_expression, + STATE(306), 3, + sym_size_expression, + sym_length_expression, + sym_offset_expression, + ACTIONS(37), 4, + anon_sym_void, + anon_sym_true, + anon_sym_false, + anon_sym_null, + STATE(295), 4, + sym_integer_constant, + sym_floating_constant, + sym_rune_constant, + sym_string_constant, + STATE(303), 4, + sym_constant, + sym_array_literal, + sym_enum_literal, + sym_struct_literal, + STATE(305), 7, + sym_nested_expression, + sym_allocation_expression, + sym_assertion_expression, + sym_call_expression, + sym_measurement_expression, + sym_slicing_expression, + sym_error_propagation, + ACTIONS(55), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [850] = 35, + ACTIONS(3), 1, + sym_comment, + ACTIONS(33), 1, + anon_sym_LPAREN, + ACTIONS(39), 1, + anon_sym_size, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(45), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_0x, + ACTIONS(49), 1, + anon_sym_0o, + ACTIONS(51), 1, + anon_sym_0b, + ACTIONS(53), 1, + anon_sym_0, + ACTIONS(57), 1, + anon_sym_SQUOTE, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(61), 1, + anon_sym_alloc, + ACTIONS(63), 1, + anon_sym_append, + ACTIONS(65), 1, + anon_sym_free, + ACTIONS(67), 1, + anon_sym_delete, + ACTIONS(69), 1, + anon_sym_assert, + ACTIONS(73), 1, + anon_sym_abort, + ACTIONS(75), 1, + anon_sym_len, + ACTIONS(77), 1, + anon_sym_offset, + ACTIONS(203), 1, + anon_sym_static, + ACTIONS(305), 1, + sym_name, + STATE(164), 1, + sym_decimal_digits, + STATE(273), 1, + sym_identifier, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(304), 1, + sym_plain_expression, + STATE(352), 1, + sym_object_selector, + STATE(516), 1, + sym_postfix_expression, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + STATE(315), 2, + sym_field_access_expression, + sym_indexing_expression, + STATE(306), 3, + sym_size_expression, + sym_length_expression, + sym_offset_expression, + ACTIONS(37), 4, + anon_sym_void, + anon_sym_true, + anon_sym_false, + anon_sym_null, + STATE(295), 4, + sym_integer_constant, + sym_floating_constant, + sym_rune_constant, + sym_string_constant, + STATE(303), 4, + sym_constant, + sym_array_literal, + sym_enum_literal, + sym_struct_literal, + STATE(305), 7, + sym_nested_expression, + sym_allocation_expression, + sym_assertion_expression, + sym_call_expression, + sym_measurement_expression, + sym_slicing_expression, + sym_error_propagation, + ACTIONS(55), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [983] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(145), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + ACTIONS(55), 10, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + ACTIONS(226), 11, + anon_sym_PIPE, + anon_sym_e, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(224), 38, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_f32, + anon_sym_f64, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_z, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [1056] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(354), 2, + anon_sym_0, + anon_sym_1, + STATE(144), 2, + sym_binary_digit, + aux_sym_binary_digits_repeat1, + ACTIONS(352), 17, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(350), 40, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_z, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [1129] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(33), 1, + anon_sym_LPAREN, + ACTIONS(39), 1, + anon_sym_size, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(45), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_0x, + ACTIONS(49), 1, + anon_sym_0o, + ACTIONS(51), 1, + anon_sym_0b, + ACTIONS(53), 1, + anon_sym_0, + ACTIONS(57), 1, + anon_sym_SQUOTE, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(61), 1, + anon_sym_alloc, + ACTIONS(63), 1, + anon_sym_append, + ACTIONS(65), 1, + anon_sym_free, + ACTIONS(67), 1, + anon_sym_delete, + ACTIONS(69), 1, + anon_sym_assert, + ACTIONS(73), 1, + anon_sym_abort, + ACTIONS(75), 1, + anon_sym_len, + ACTIONS(77), 1, + anon_sym_offset, + ACTIONS(203), 1, + anon_sym_static, + ACTIONS(305), 1, + sym_name, + STATE(164), 1, + sym_decimal_digits, + STATE(274), 1, + sym_identifier, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(304), 1, + sym_plain_expression, + STATE(516), 1, + sym_postfix_expression, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + STATE(491), 2, + sym_indexing_expression, + sym_slicing_expression, + STATE(306), 3, + sym_size_expression, + sym_length_expression, + sym_offset_expression, + ACTIONS(37), 4, + anon_sym_void, + anon_sym_true, + anon_sym_false, + anon_sym_null, + STATE(295), 4, + sym_integer_constant, + sym_floating_constant, + sym_rune_constant, + sym_string_constant, + STATE(303), 4, + sym_constant, + sym_array_literal, + sym_enum_literal, + sym_struct_literal, + STATE(305), 7, + sym_nested_expression, + sym_allocation_expression, + sym_assertion_expression, + sym_call_expression, + sym_measurement_expression, + sym_field_access_expression, + sym_error_propagation, + ACTIONS(55), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [1259] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(33), 1, + anon_sym_LPAREN, + ACTIONS(39), 1, + anon_sym_size, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(45), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_0x, + ACTIONS(49), 1, + anon_sym_0o, + ACTIONS(51), 1, + anon_sym_0b, + ACTIONS(53), 1, + anon_sym_0, + ACTIONS(57), 1, + anon_sym_SQUOTE, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(61), 1, + anon_sym_alloc, + ACTIONS(63), 1, + anon_sym_append, + ACTIONS(65), 1, + anon_sym_free, + ACTIONS(67), 1, + anon_sym_delete, + ACTIONS(69), 1, + anon_sym_assert, + ACTIONS(73), 1, + anon_sym_abort, + ACTIONS(75), 1, + anon_sym_len, + ACTIONS(77), 1, + anon_sym_offset, + ACTIONS(203), 1, + anon_sym_static, + ACTIONS(305), 1, + sym_name, + STATE(164), 1, + sym_decimal_digits, + STATE(274), 1, + sym_identifier, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(304), 1, + sym_plain_expression, + STATE(492), 1, + sym_field_access_expression, + STATE(516), 1, + sym_postfix_expression, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + STATE(306), 3, + sym_size_expression, + sym_length_expression, + sym_offset_expression, + ACTIONS(37), 4, + anon_sym_void, + anon_sym_true, + anon_sym_false, + anon_sym_null, + STATE(295), 4, + sym_integer_constant, + sym_floating_constant, + sym_rune_constant, + sym_string_constant, + STATE(303), 4, + sym_constant, + sym_array_literal, + sym_enum_literal, + sym_struct_literal, + STATE(305), 8, + sym_nested_expression, + sym_allocation_expression, + sym_assertion_expression, + sym_call_expression, + sym_measurement_expression, + sym_indexing_expression, + sym_slicing_expression, + sym_error_propagation, + ACTIONS(55), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [1389] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(33), 1, + anon_sym_LPAREN, + ACTIONS(39), 1, + anon_sym_size, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(45), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_0x, + ACTIONS(49), 1, + anon_sym_0o, + ACTIONS(51), 1, + anon_sym_0b, + ACTIONS(53), 1, + anon_sym_0, + ACTIONS(57), 1, + anon_sym_SQUOTE, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(61), 1, + anon_sym_alloc, + ACTIONS(63), 1, + anon_sym_append, + ACTIONS(65), 1, + anon_sym_free, + ACTIONS(67), 1, + anon_sym_delete, + ACTIONS(69), 1, + anon_sym_assert, + ACTIONS(73), 1, + anon_sym_abort, + ACTIONS(75), 1, + anon_sym_len, + ACTIONS(77), 1, + anon_sym_offset, + ACTIONS(203), 1, + anon_sym_static, + ACTIONS(305), 1, + sym_name, + STATE(164), 1, + sym_decimal_digits, + STATE(274), 1, + sym_identifier, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(304), 1, + sym_plain_expression, + STATE(516), 1, + sym_postfix_expression, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + STATE(484), 2, + sym_indexing_expression, + sym_slicing_expression, + STATE(306), 3, + sym_size_expression, + sym_length_expression, + sym_offset_expression, + ACTIONS(37), 4, + anon_sym_void, + anon_sym_true, + anon_sym_false, + anon_sym_null, + STATE(295), 4, + sym_integer_constant, + sym_floating_constant, + sym_rune_constant, + sym_string_constant, + STATE(303), 4, + sym_constant, + sym_array_literal, + sym_enum_literal, + sym_struct_literal, + STATE(305), 7, + sym_nested_expression, + sym_allocation_expression, + sym_assertion_expression, + sym_call_expression, + sym_measurement_expression, + sym_field_access_expression, + sym_error_propagation, + ACTIONS(55), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [1519] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(325), 1, + anon_sym_e, + STATE(159), 1, + sym_exponent, + STATE(252), 1, + sym_integer_suffix, + ACTIONS(327), 2, + anon_sym_i, + anon_sym_u, + ACTIONS(321), 9, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_z, + ACTIONS(319), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(317), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [1597] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(33), 1, + anon_sym_LPAREN, + ACTIONS(39), 1, + anon_sym_size, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(45), 1, + anon_sym_LBRACK, + ACTIONS(47), 1, + anon_sym_0x, + ACTIONS(49), 1, + anon_sym_0o, + ACTIONS(51), 1, + anon_sym_0b, + ACTIONS(53), 1, + anon_sym_0, + ACTIONS(57), 1, + anon_sym_SQUOTE, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(61), 1, + anon_sym_alloc, + ACTIONS(63), 1, + anon_sym_append, + ACTIONS(65), 1, + anon_sym_free, + ACTIONS(67), 1, + anon_sym_delete, + ACTIONS(69), 1, + anon_sym_assert, + ACTIONS(73), 1, + anon_sym_abort, + ACTIONS(75), 1, + anon_sym_len, + ACTIONS(77), 1, + anon_sym_offset, + ACTIONS(203), 1, + anon_sym_static, + ACTIONS(305), 1, + sym_name, + STATE(164), 1, + sym_decimal_digits, + STATE(274), 1, + sym_identifier, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(304), 1, + sym_plain_expression, + STATE(489), 1, + sym_field_access_expression, + STATE(516), 1, + sym_postfix_expression, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + STATE(306), 3, + sym_size_expression, + sym_length_expression, + sym_offset_expression, + ACTIONS(37), 4, + anon_sym_void, + anon_sym_true, + anon_sym_false, + anon_sym_null, + STATE(295), 4, + sym_integer_constant, + sym_floating_constant, + sym_rune_constant, + sym_string_constant, + STATE(303), 4, + sym_constant, + sym_array_literal, + sym_enum_literal, + sym_struct_literal, + STATE(305), 8, + sym_nested_expression, + sym_allocation_expression, + sym_assertion_expression, + sym_call_expression, + sym_measurement_expression, + sym_indexing_expression, + sym_slicing_expression, + sym_error_propagation, + ACTIONS(55), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [1727] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(358), 17, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(356), 42, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_f32, + anon_sym_f64, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_z, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [1794] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(232), 11, + anon_sym_PIPE, + anon_sym_e, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(230), 48, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_f32, + anon_sym_f64, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + anon_sym_z, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [1861] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(362), 17, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(360), 42, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_0, + anon_sym_1, + anon_sym_z, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [1928] = 6, + ACTIONS(3), 1, + sym_comment, + STATE(244), 1, + sym_integer_suffix, + ACTIONS(327), 2, + anon_sym_i, + anon_sym_u, + ACTIONS(321), 9, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_z, + ACTIONS(338), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(336), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [2000] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(161), 2, + sym_octal_digit, + aux_sym_octal_digits_repeat1, + ACTIONS(364), 8, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + ACTIONS(309), 10, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(307), 36, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_z, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [2068] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(161), 2, + sym_octal_digit, + aux_sym_octal_digits_repeat1, + ACTIONS(366), 8, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + ACTIONS(296), 10, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(294), 36, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_z, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [2136] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(315), 10, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(313), 44, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_z, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [2198] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(369), 1, + anon_sym_RBRACE, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(385), 1, + anon_sym_STAR, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(397), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(625), 1, + sym_match_case, + STATE(651), 1, + sym_fntype_attr, + STATE(716), 1, + sym_match_cases, + STATE(725), 1, + sym_type, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [2302] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(403), 1, + anon_sym_e, + ACTIONS(407), 1, + anon_sym_DOT, + STATE(171), 1, + sym_exponent, + STATE(296), 1, + sym_integer_suffix, + STATE(301), 1, + sym_floating_suffix, + ACTIONS(401), 2, + anon_sym_f32, + anon_sym_f64, + ACTIONS(405), 2, + anon_sym_i, + anon_sym_u, + ACTIONS(319), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(399), 9, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_z, + ACTIONS(317), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [2378] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(410), 1, + anon_sym_RPAREN, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(569), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + STATE(686), 1, + sym_tuple_types, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [2479] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(325), 1, + anon_sym_e, + STATE(183), 1, + sym_exponent, + STATE(227), 1, + sym_floating_suffix, + ACTIONS(323), 2, + anon_sym_f32, + anon_sym_f64, + ACTIONS(418), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(416), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [2546] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(606), 1, + sym_type, + STATE(648), 1, + sym_tuple_types, + STATE(649), 1, + sym_tagged_types, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [2647] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(385), 1, + anon_sym_STAR, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(397), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(625), 1, + sym_match_case, + STATE(651), 1, + sym_fntype_attr, + STATE(724), 1, + sym_match_cases, + STATE(725), 1, + sym_type, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [2748] = 24, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(606), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + STATE(660), 1, + sym_tuple_types, + STATE(661), 1, + sym_tagged_types, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [2849] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(420), 24, + anon_sym_LBRACE, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_BANG, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_0x, + anon_sym_0o, + anon_sym_0b, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + anon_sym_SQUOTE, + anon_sym_DQUOTE, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_TILDE, + anon_sym_AMP, + ACTIONS(422), 27, + anon_sym_let, + anon_sym_const, + anon_sym_void, + anon_sym_size, + anon_sym_struct, + anon_sym_true, + anon_sym_false, + anon_sym_null, + anon_sym_0, + anon_sym_alloc, + anon_sym_append, + anon_sym_free, + anon_sym_delete, + anon_sym_assert, + anon_sym_static, + anon_sym_abort, + anon_sym_len, + anon_sym_offset, + anon_sym_if, + anon_sym_for, + anon_sym_switch, + anon_sym_match, + anon_sym_defer, + anon_sym_break, + anon_sym_continue, + anon_sym_return, + sym_name, + [2908] = 8, + ACTIONS(3), 1, + sym_comment, + STATE(300), 1, + sym_floating_suffix, + STATE(322), 1, + sym_integer_suffix, + ACTIONS(401), 2, + anon_sym_f32, + anon_sym_f64, + ACTIONS(405), 2, + anon_sym_i, + anon_sym_u, + ACTIONS(338), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(399), 9, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_z, + ACTIONS(336), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [2976] = 23, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(569), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + STATE(686), 1, + sym_tuple_types, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [3074] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(424), 2, + anon_sym_0, + anon_sym_1, + STATE(173), 2, + sym_binary_digit, + aux_sym_binary_digits_repeat1, + ACTIONS(342), 10, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(340), 36, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_z, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [3136] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(427), 2, + anon_sym_0, + anon_sym_1, + STATE(173), 2, + sym_binary_digit, + aux_sym_binary_digits_repeat1, + ACTIONS(352), 10, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(350), 36, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_z, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [3198] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + STATE(655), 1, + sym_type, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [3293] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(536), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [3388] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(588), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [3483] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(403), 1, + anon_sym_e, + STATE(219), 1, + sym_exponent, + STATE(296), 1, + sym_integer_suffix, + ACTIONS(405), 2, + anon_sym_i, + anon_sym_u, + ACTIONS(319), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(399), 9, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_z, + ACTIONS(317), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [3550] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(429), 1, + anon_sym_const, + ACTIONS(431), 1, + anon_sym_LPAREN, + ACTIONS(433), 1, + anon_sym_fn, + ACTIONS(441), 1, + anon_sym_enum, + ACTIONS(443), 1, + anon_sym_STAR, + ACTIONS(445), 1, + anon_sym_nullable, + ACTIONS(447), 1, + anon_sym_struct, + ACTIONS(449), 1, + anon_sym_union, + ACTIONS(451), 1, + anon_sym_LBRACK, + ACTIONS(453), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(455), 1, + sym_name, + STATE(327), 1, + sym_identifier, + STATE(354), 1, + sym_type, + STATE(739), 1, + sym_fntype_attr, + ACTIONS(439), 2, + anon_sym_f32, + anon_sym_f64, + STATE(340), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(435), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(329), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(334), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(437), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [3645] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + STATE(762), 1, + sym_type, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [3740] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + STATE(717), 1, + sym_type, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [3835] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(429), 1, + anon_sym_const, + ACTIONS(431), 1, + anon_sym_LPAREN, + ACTIONS(433), 1, + anon_sym_fn, + ACTIONS(441), 1, + anon_sym_enum, + ACTIONS(443), 1, + anon_sym_STAR, + ACTIONS(445), 1, + anon_sym_nullable, + ACTIONS(447), 1, + anon_sym_struct, + ACTIONS(449), 1, + anon_sym_union, + ACTIONS(451), 1, + anon_sym_LBRACK, + ACTIONS(453), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(455), 1, + sym_name, + STATE(327), 1, + sym_identifier, + STATE(355), 1, + sym_type, + STATE(739), 1, + sym_fntype_attr, + ACTIONS(439), 2, + anon_sym_f32, + anon_sym_f64, + STATE(340), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(435), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(329), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(334), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(437), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [3930] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(239), 1, + sym_floating_suffix, + ACTIONS(323), 2, + anon_sym_f32, + anon_sym_f64, + ACTIONS(459), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(457), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [3991] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(429), 1, + anon_sym_const, + ACTIONS(431), 1, + anon_sym_LPAREN, + ACTIONS(433), 1, + anon_sym_fn, + ACTIONS(441), 1, + anon_sym_enum, + ACTIONS(443), 1, + anon_sym_STAR, + ACTIONS(445), 1, + anon_sym_nullable, + ACTIONS(447), 1, + anon_sym_struct, + ACTIONS(449), 1, + anon_sym_union, + ACTIONS(451), 1, + anon_sym_LBRACK, + ACTIONS(453), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(455), 1, + sym_name, + STATE(327), 1, + sym_identifier, + STATE(353), 1, + sym_type, + STATE(739), 1, + sym_fntype_attr, + ACTIONS(439), 2, + anon_sym_f32, + anon_sym_f64, + STATE(340), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(435), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(329), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(334), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(437), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [4086] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(543), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [4181] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(584), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [4276] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + STATE(753), 1, + sym_type, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [4371] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(553), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [4466] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + ACTIONS(461), 1, + anon_sym_EQ_GT, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(442), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [4561] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + STATE(684), 1, + sym_type, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [4656] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(556), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [4751] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + STATE(698), 1, + sym_type, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [4846] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + STATE(705), 1, + sym_type, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [4941] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(618), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [5036] = 22, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(544), 1, + sym_type, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(427), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [5131] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(467), 1, + anon_sym_COLON_COLON, + ACTIONS(469), 1, + anon_sym_LBRACE, + ACTIONS(465), 16, + anon_sym_EQ, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(463), 30, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [5191] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(475), 1, + anon_sym_DQUOTE, + STATE(197), 1, + aux_sym_string_constant_repeat1, + ACTIONS(473), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(471), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [5251] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(455), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [5343] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(420), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [5435] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(429), 1, + anon_sym_const, + ACTIONS(431), 1, + anon_sym_LPAREN, + ACTIONS(433), 1, + anon_sym_fn, + ACTIONS(441), 1, + anon_sym_enum, + ACTIONS(443), 1, + anon_sym_STAR, + ACTIONS(445), 1, + anon_sym_nullable, + ACTIONS(447), 1, + anon_sym_struct, + ACTIONS(449), 1, + anon_sym_union, + ACTIONS(451), 1, + anon_sym_LBRACK, + ACTIONS(453), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(455), 1, + sym_name, + STATE(327), 1, + sym_identifier, + STATE(739), 1, + sym_fntype_attr, + ACTIONS(439), 2, + anon_sym_f32, + anon_sym_f64, + STATE(342), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(435), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(329), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(334), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(437), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [5527] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(429), 1, + anon_sym_const, + ACTIONS(431), 1, + anon_sym_LPAREN, + ACTIONS(433), 1, + anon_sym_fn, + ACTIONS(441), 1, + anon_sym_enum, + ACTIONS(443), 1, + anon_sym_STAR, + ACTIONS(445), 1, + anon_sym_nullable, + ACTIONS(447), 1, + anon_sym_struct, + ACTIONS(449), 1, + anon_sym_union, + ACTIONS(451), 1, + anon_sym_LBRACK, + ACTIONS(453), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(455), 1, + sym_name, + STATE(327), 1, + sym_identifier, + STATE(739), 1, + sym_fntype_attr, + ACTIONS(439), 2, + anon_sym_f32, + anon_sym_f64, + STATE(331), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(435), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(329), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(334), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(437), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [5619] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(429), 1, + anon_sym_const, + ACTIONS(431), 1, + anon_sym_LPAREN, + ACTIONS(433), 1, + anon_sym_fn, + ACTIONS(441), 1, + anon_sym_enum, + ACTIONS(443), 1, + anon_sym_STAR, + ACTIONS(445), 1, + anon_sym_nullable, + ACTIONS(447), 1, + anon_sym_struct, + ACTIONS(449), 1, + anon_sym_union, + ACTIONS(451), 1, + anon_sym_LBRACK, + ACTIONS(453), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(455), 1, + sym_name, + STATE(327), 1, + sym_identifier, + STATE(739), 1, + sym_fntype_attr, + ACTIONS(439), 2, + anon_sym_f32, + anon_sym_f64, + STATE(344), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(435), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(329), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(334), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(437), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [5711] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(358), 10, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(356), 38, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_f32, + anon_sym_f64, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_z, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [5767] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(429), 1, + anon_sym_const, + ACTIONS(431), 1, + anon_sym_LPAREN, + ACTIONS(433), 1, + anon_sym_fn, + ACTIONS(441), 1, + anon_sym_enum, + ACTIONS(443), 1, + anon_sym_STAR, + ACTIONS(445), 1, + anon_sym_nullable, + ACTIONS(447), 1, + anon_sym_struct, + ACTIONS(449), 1, + anon_sym_union, + ACTIONS(451), 1, + anon_sym_LBRACK, + ACTIONS(453), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(455), 1, + sym_name, + STATE(327), 1, + sym_identifier, + STATE(739), 1, + sym_fntype_attr, + ACTIONS(439), 2, + anon_sym_f32, + anon_sym_f64, + STATE(339), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(435), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(329), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(334), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(437), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [5859] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(429), 1, + anon_sym_const, + ACTIONS(431), 1, + anon_sym_LPAREN, + ACTIONS(433), 1, + anon_sym_fn, + ACTIONS(441), 1, + anon_sym_enum, + ACTIONS(443), 1, + anon_sym_STAR, + ACTIONS(445), 1, + anon_sym_nullable, + ACTIONS(447), 1, + anon_sym_struct, + ACTIONS(449), 1, + anon_sym_union, + ACTIONS(451), 1, + anon_sym_LBRACK, + ACTIONS(453), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(455), 1, + sym_name, + STATE(327), 1, + sym_identifier, + STATE(739), 1, + sym_fntype_attr, + ACTIONS(439), 2, + anon_sym_f32, + anon_sym_f64, + STATE(336), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(435), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(329), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(334), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(437), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [5951] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(458), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [6043] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(429), 1, + anon_sym_const, + ACTIONS(431), 1, + anon_sym_LPAREN, + ACTIONS(433), 1, + anon_sym_fn, + ACTIONS(441), 1, + anon_sym_enum, + ACTIONS(443), 1, + anon_sym_STAR, + ACTIONS(445), 1, + anon_sym_nullable, + ACTIONS(447), 1, + anon_sym_struct, + ACTIONS(449), 1, + anon_sym_union, + ACTIONS(451), 1, + anon_sym_LBRACK, + ACTIONS(453), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(455), 1, + sym_name, + STATE(327), 1, + sym_identifier, + STATE(739), 1, + sym_fntype_attr, + ACTIONS(439), 2, + anon_sym_f32, + anon_sym_f64, + STATE(333), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(435), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(329), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(334), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(437), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [6135] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(270), 1, + anon_sym_DQUOTE, + STATE(197), 1, + aux_sym_string_constant_repeat1, + ACTIONS(480), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(478), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [6195] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(484), 16, + anon_sym_EQ, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(482), 32, + anon_sym_SEMI, + anon_sym_COLON_COLON, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [6251] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(362), 10, + anon_sym_PIPE, + anon_sym_i, + anon_sym_u, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(360), 38, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_0, + anon_sym_1, + anon_sym_z, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [6307] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(442), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [6399] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(465), 1, + anon_sym_DOT, + ACTIONS(490), 1, + anon_sym_COLON_COLON, + ACTIONS(492), 1, + anon_sym_LBRACE, + ACTIONS(463), 3, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_QMARK, + ACTIONS(488), 15, + anon_sym_EQ, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(486), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [6463] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(437), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [6555] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(498), 1, + anon_sym_COLON_COLON, + ACTIONS(496), 16, + anon_sym_EQ, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(494), 31, + anon_sym_SEMI, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [6613] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(371), 1, + anon_sym_const, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + STATE(438), 2, + sym__inner_type, + sym_storage_class, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [6705] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(488), 1, + anon_sym_EQ, + ACTIONS(490), 1, + anon_sym_COLON_COLON, + ACTIONS(492), 1, + anon_sym_LBRACE, + ACTIONS(486), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + ACTIONS(465), 15, + anon_sym_COLON, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(463), 20, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [6769] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(473), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(471), 32, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_DQUOTE, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [6824] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(503), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(501), 32, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_DQUOTE, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [6879] = 6, + ACTIONS(3), 1, + sym_comment, + STATE(322), 1, + sym_integer_suffix, + ACTIONS(405), 2, + anon_sym_i, + anon_sym_u, + ACTIONS(338), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(399), 9, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_z, + ACTIONS(336), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [6940] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(507), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(505), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [6994] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(488), 1, + anon_sym_EQ, + ACTIONS(486), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + ACTIONS(511), 14, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(509), 21, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [7052] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(515), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(513), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7106] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(519), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(517), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7160] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(373), 1, + anon_sym_LPAREN, + ACTIONS(375), 1, + anon_sym_fn, + ACTIONS(383), 1, + anon_sym_enum, + ACTIONS(387), 1, + anon_sym_nullable, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(393), 1, + anon_sym_LBRACK, + ACTIONS(395), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(412), 1, + anon_sym_STAR, + ACTIONS(414), 1, + sym_name, + STATE(419), 1, + sym_storage_class, + STATE(429), 1, + sym_identifier, + STATE(651), 1, + sym_fntype_attr, + ACTIONS(381), 2, + anon_sym_f32, + anon_sym_f64, + ACTIONS(377), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(430), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(428), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(379), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [7248] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(523), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(521), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7302] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(465), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(463), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7356] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(459), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(457), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7410] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(418), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(416), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7464] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(527), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(525), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7518] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(511), 1, + anon_sym_DOT, + ACTIONS(509), 3, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_QMARK, + ACTIONS(488), 14, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(486), 28, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7576] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(531), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(529), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7630] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(535), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(533), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7684] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(539), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(537), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7738] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(431), 1, + anon_sym_LPAREN, + ACTIONS(433), 1, + anon_sym_fn, + ACTIONS(441), 1, + anon_sym_enum, + ACTIONS(443), 1, + anon_sym_STAR, + ACTIONS(445), 1, + anon_sym_nullable, + ACTIONS(447), 1, + anon_sym_struct, + ACTIONS(449), 1, + anon_sym_union, + ACTIONS(451), 1, + anon_sym_LBRACK, + ACTIONS(453), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(455), 1, + sym_name, + STATE(327), 1, + sym_identifier, + STATE(330), 1, + sym_storage_class, + STATE(739), 1, + sym_fntype_attr, + ACTIONS(439), 2, + anon_sym_f32, + anon_sym_f64, + ACTIONS(435), 4, + anon_sym_rune, + anon_sym_str, + anon_sym_bool, + anon_sym_void, + STATE(329), 4, + sym_integer_type, + sym_floating_type, + sym_enum_type, + sym_pointer_type, + STATE(334), 9, + sym_scalar_type, + sym_struct_type, + sym_union_type, + sym_tuple_type, + sym_tagged_union_type, + sym_slice_array_type, + sym_function_type, + sym_alias_type, + sym_unwrapped_alias, + ACTIONS(437), 13, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_uint, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [7826] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(543), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(541), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7880] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(547), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(545), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7934] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(551), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(549), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [7988] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(555), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(553), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8042] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(559), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(557), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8096] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(563), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(561), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8150] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(567), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(565), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8204] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(571), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(569), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8258] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(575), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(573), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8312] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(579), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(577), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8366] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(583), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(581), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8420] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(587), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(585), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8474] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(591), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(589), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8528] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(595), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(593), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8582] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(599), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(597), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8636] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(603), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(601), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8690] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(607), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(605), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8744] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(338), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(336), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8798] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(611), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(609), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8852] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(615), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(613), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8906] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(511), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(509), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [8960] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(619), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(617), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [9014] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(625), 1, + anon_sym_LPAREN, + ACTIONS(627), 1, + anon_sym_LBRACK, + ACTIONS(629), 1, + anon_sym_DOT, + ACTIONS(631), 1, + anon_sym_QMARK, + ACTIONS(623), 14, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(621), 28, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [9076] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(635), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(633), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [9130] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(639), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(637), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [9184] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(643), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(641), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [9238] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(647), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(645), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [9292] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(651), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(649), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [9346] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(655), 15, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(653), 31, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [9400] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(659), 1, + anon_sym_EQ, + STATE(44), 1, + sym_assignment_op, + ACTIONS(663), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + ACTIONS(661), 13, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(657), 18, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [9457] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(661), 14, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(657), 28, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [9507] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(667), 14, + anon_sym_EQ, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(665), 28, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [9557] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(659), 1, + anon_sym_EQ, + STATE(52), 1, + sym_assignment_op, + ACTIONS(663), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + ACTIONS(661), 13, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(657), 17, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_EQ_GT, + [9613] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(403), 1, + anon_sym_e, + STATE(270), 1, + sym_exponent, + STATE(285), 1, + sym_floating_suffix, + ACTIONS(401), 2, + anon_sym_f32, + anon_sym_f64, + ACTIONS(418), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(416), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [9669] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(659), 1, + anon_sym_EQ, + STATE(102), 1, + sym_assignment_op, + ACTIONS(663), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + ACTIONS(661), 12, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(657), 15, + anon_sym_SEMI, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + [9722] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(314), 1, + sym_floating_suffix, + ACTIONS(401), 2, + anon_sym_f32, + anon_sym_f64, + ACTIONS(459), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(457), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [9772] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(484), 10, + anon_sym_COLON, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(482), 28, + anon_sym_SEMI, + anon_sym_COLON_COLON, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [9818] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(659), 1, + anon_sym_EQ, + STATE(46), 1, + sym_assignment_op, + ACTIONS(663), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + ACTIONS(661), 12, + anon_sym_STAR, + anon_sym_PIPE, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(657), 14, + anon_sym_SEMI, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT, + anon_sym_as, + anon_sym_is, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + [9870] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(465), 1, + anon_sym_DOT, + ACTIONS(490), 1, + anon_sym_COLON_COLON, + ACTIONS(492), 1, + anon_sym_LBRACE, + ACTIONS(463), 3, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_QMARK, + ACTIONS(488), 8, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(486), 23, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [9923] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(490), 1, + anon_sym_COLON_COLON, + ACTIONS(492), 1, + anon_sym_LBRACE, + ACTIONS(465), 9, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(463), 26, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [9972] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(669), 1, + anon_sym_COLON_COLON, + ACTIONS(496), 9, + anon_sym_COLON, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(494), 27, + anon_sym_SEMI, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10019] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DQUOTE, + STATE(277), 1, + aux_sym_string_constant_repeat1, + ACTIONS(480), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(478), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10068] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(672), 1, + anon_sym_DQUOTE, + STATE(277), 1, + aux_sym_string_constant_repeat1, + ACTIONS(473), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(471), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10117] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(473), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(471), 28, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_DQUOTE, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10161] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(555), 9, + anon_sym_EQ, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(553), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10205] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(503), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(501), 28, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_DQUOTE, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10249] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(675), 1, + anon_sym_EQ, + ACTIONS(511), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(509), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10295] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(587), 9, + anon_sym_EQ, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(585), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10339] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(519), 9, + anon_sym_EQ, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(517), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10383] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(571), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(569), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10426] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(459), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(457), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10469] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(639), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(637), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10512] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(647), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(645), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10555] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(677), 1, + anon_sym_EQ, + ACTIONS(511), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(509), 26, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_EQ_GT, + [10600] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(611), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(609), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10643] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(635), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(633), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10686] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(629), 1, + anon_sym_DOT, + ACTIONS(679), 1, + anon_sym_LPAREN, + ACTIONS(681), 1, + anon_sym_LBRACK, + ACTIONS(683), 1, + anon_sym_QMARK, + ACTIONS(623), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(621), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10737] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(655), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(653), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10780] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(539), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(537), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10823] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(543), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(541), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10866] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(599), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(597), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10909] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(338), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(336), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10952] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(531), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(529), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [10995] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(527), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(525), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11038] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(515), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(513), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11081] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(418), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(416), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11124] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(607), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(605), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11167] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(651), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(649), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11210] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(465), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(463), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11253] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(615), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(613), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11296] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(511), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(509), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11339] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(619), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(617), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11382] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(679), 1, + anon_sym_LPAREN, + ACTIONS(683), 1, + anon_sym_QMARK, + ACTIONS(685), 1, + anon_sym_LBRACK, + ACTIONS(687), 1, + anon_sym_DOT, + ACTIONS(623), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(621), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11433] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(523), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(521), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11476] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(551), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(549), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11519] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(603), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(601), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11562] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(595), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(593), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11605] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(643), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(641), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11648] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(575), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(573), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11691] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(559), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(557), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11734] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(511), 1, + anon_sym_DOT, + ACTIONS(509), 3, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_QMARK, + ACTIONS(488), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(486), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11781] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(507), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(505), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11824] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(567), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(565), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11867] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(591), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(589), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11910] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(563), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(561), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11953] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(547), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(545), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [11996] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(535), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(533), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12039] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(579), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(577), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12082] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(583), 8, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(581), 27, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12125] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(689), 1, + anon_sym_COLON_COLON, + ACTIONS(496), 9, + anon_sym_COLON, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(494), 23, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12168] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(693), 8, + anon_sym_EQ, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(691), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12208] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(697), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(695), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12248] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(701), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(699), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12288] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(705), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(703), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12328] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(709), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(707), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12368] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(713), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(711), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12408] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(717), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(715), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12448] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(721), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(719), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12488] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(725), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(723), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12528] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(729), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(727), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12568] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(731), 1, + anon_sym_EQ, + ACTIONS(511), 7, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(509), 24, + anon_sym_SEMI, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + [12610] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(735), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(733), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12650] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(739), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(737), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12690] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(743), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(741), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12730] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(747), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(745), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12770] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(751), 1, + anon_sym_BANG, + ACTIONS(753), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(749), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12812] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(757), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(755), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12852] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(761), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(759), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12892] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(765), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(763), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12932] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(769), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(767), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [12972] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(773), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(771), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13012] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(777), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(775), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13052] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(781), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(779), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13092] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(785), 8, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(783), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13132] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(787), 1, + anon_sym_EQ, + ACTIONS(511), 7, + anon_sym_PIPE, + anon_sym_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(509), 23, + anon_sym_SEMI, + anon_sym_COLON, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_LBRACK, + anon_sym_RBRACK, + anon_sym_DOT_DOT, + anon_sym_QMARK, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + [13173] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(791), 1, + anon_sym_COLON, + ACTIONS(795), 1, + anon_sym_as, + ACTIONS(797), 1, + anon_sym_is, + ACTIONS(793), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(789), 21, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13218] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(801), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(799), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13257] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(667), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(665), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13296] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(805), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(803), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13335] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(809), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(807), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13374] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(813), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(811), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13413] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(791), 1, + anon_sym_COLON, + ACTIONS(795), 1, + anon_sym_as, + ACTIONS(797), 1, + anon_sym_is, + ACTIONS(817), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(815), 21, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13458] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(661), 7, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_SLASH, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(657), 24, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_COLON, + anon_sym_RPAREN, + anon_sym_STAR, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_as, + anon_sym_is, + anon_sym_PERCENT, + anon_sym_LT_LT, + anon_sym_GT_GT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13497] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(825), 1, + anon_sym_SLASH, + ACTIONS(821), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(827), 2, + anon_sym_LT_LT, + anon_sym_GT_GT, + ACTIONS(823), 6, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(819), 17, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13539] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(825), 1, + anon_sym_SLASH, + ACTIONS(821), 2, + anon_sym_STAR, + anon_sym_PERCENT, + ACTIONS(831), 6, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(829), 17, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13577] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(219), 1, + sym_hex_digits, + STATE(119), 2, + sym_hex_digit, + aux_sym_hex_digits_repeat1, + ACTIONS(234), 22, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + anon_sym_A, + anon_sym_B, + anon_sym_C, + anon_sym_D, + anon_sym_E, + anon_sym_F, + anon_sym_a, + anon_sym_b, + anon_sym_c, + anon_sym_d, + anon_sym_e, + anon_sym_f, + [13612] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(159), 1, + sym_hex_digits, + STATE(103), 2, + sym_hex_digit, + aux_sym_hex_digits_repeat1, + ACTIONS(183), 22, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + anon_sym_A, + anon_sym_B, + anon_sym_C, + anon_sym_D, + anon_sym_E, + anon_sym_F, + anon_sym_a, + anon_sym_b, + anon_sym_c, + anon_sym_d, + anon_sym_e, + anon_sym_f, + [13647] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(791), 1, + anon_sym_COLON, + ACTIONS(795), 1, + anon_sym_as, + ACTIONS(797), 1, + anon_sym_is, + ACTIONS(835), 6, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(833), 15, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13685] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_export, + ACTIONS(13), 1, + anon_sym_ATsymbol, + ACTIONS(15), 1, + anon_sym_def, + ACTIONS(17), 1, + anon_sym_type, + ACTIONS(19), 1, + anon_sym_fn, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(837), 1, + ts_builtin_sym_end, + STATE(366), 1, + aux_sym_declarations_repeat1, + STATE(727), 1, + sym_declarations, + STATE(772), 1, + sym_fndec_attrs, + STATE(774), 1, + sym_declaration, + ACTIONS(11), 2, + anon_sym_let, + anon_sym_const, + STATE(411), 2, + sym_fndec_attr, + aux_sym_fndec_attrs_repeat1, + STATE(479), 2, + sym_decl_attr, + sym_fntype_attr, + ACTIONS(21), 3, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + STATE(773), 4, + sym_global_declaration, + sym_constant_declaration, + sym_type_declaration, + sym_function_declaration, + [13745] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(843), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(841), 6, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(839), 15, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13778] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(845), 1, + ts_builtin_sym_end, + ACTIONS(847), 1, + anon_sym_export, + ACTIONS(853), 1, + anon_sym_ATsymbol, + ACTIONS(856), 1, + anon_sym_def, + ACTIONS(859), 1, + anon_sym_type, + ACTIONS(862), 1, + anon_sym_fn, + ACTIONS(868), 1, + anon_sym_ATnoreturn, + STATE(365), 1, + aux_sym_declarations_repeat1, + STATE(772), 1, + sym_fndec_attrs, + STATE(774), 1, + sym_declaration, + ACTIONS(850), 2, + anon_sym_let, + anon_sym_const, + STATE(411), 2, + sym_fndec_attr, + aux_sym_fndec_attrs_repeat1, + STATE(479), 2, + sym_decl_attr, + sym_fntype_attr, + ACTIONS(865), 3, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + STATE(773), 4, + sym_global_declaration, + sym_constant_declaration, + sym_type_declaration, + sym_function_declaration, + [13835] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_export, + ACTIONS(13), 1, + anon_sym_ATsymbol, + ACTIONS(15), 1, + anon_sym_def, + ACTIONS(17), 1, + anon_sym_type, + ACTIONS(19), 1, + anon_sym_fn, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(871), 1, + ts_builtin_sym_end, + STATE(365), 1, + aux_sym_declarations_repeat1, + STATE(772), 1, + sym_fndec_attrs, + STATE(774), 1, + sym_declaration, + ACTIONS(11), 2, + anon_sym_let, + anon_sym_const, + STATE(411), 2, + sym_fndec_attr, + aux_sym_fndec_attrs_repeat1, + STATE(479), 2, + sym_decl_attr, + sym_fntype_attr, + ACTIONS(21), 3, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + STATE(773), 4, + sym_global_declaration, + sym_constant_declaration, + sym_type_declaration, + sym_function_declaration, + [13892] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(877), 1, + anon_sym_AMP, + ACTIONS(875), 5, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(873), 15, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13923] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(881), 6, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(879), 15, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13952] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(877), 1, + anon_sym_AMP, + ACTIONS(885), 5, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(883), 15, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [13983] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(889), 6, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_AMP, + anon_sym_CARET, + anon_sym_LT, + anon_sym_GT, + ACTIONS(887), 15, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14012] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(895), 1, + anon_sym_CARET, + ACTIONS(893), 4, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(891), 15, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14042] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(13), 1, + anon_sym_ATsymbol, + ACTIONS(15), 1, + anon_sym_def, + ACTIONS(17), 1, + anon_sym_type, + ACTIONS(19), 1, + anon_sym_fn, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + STATE(761), 1, + sym_declaration, + STATE(772), 1, + sym_fndec_attrs, + ACTIONS(11), 2, + anon_sym_let, + anon_sym_const, + STATE(411), 2, + sym_fndec_attr, + aux_sym_fndec_attrs_repeat1, + STATE(479), 2, + sym_decl_attr, + sym_fntype_attr, + ACTIONS(21), 3, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + STATE(773), 4, + sym_global_declaration, + sym_constant_declaration, + sym_type_declaration, + sym_function_declaration, + [14090] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(895), 1, + anon_sym_CARET, + ACTIONS(899), 4, + anon_sym_PIPE, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(897), 15, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14120] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(903), 1, + anon_sym_PIPE, + ACTIONS(905), 3, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(901), 15, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14149] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(903), 1, + anon_sym_PIPE, + ACTIONS(909), 3, + anon_sym_DOT_DOT, + anon_sym_LT, + anon_sym_GT, + ACTIONS(907), 15, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14178] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(913), 1, + anon_sym_DOT_DOT, + ACTIONS(915), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(917), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(911), 13, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14208] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(47), 1, + anon_sym_0x, + ACTIONS(49), 1, + anon_sym_0o, + ACTIONS(51), 1, + anon_sym_0b, + ACTIONS(53), 1, + anon_sym_0, + ACTIONS(919), 1, + sym_name, + STATE(178), 1, + sym_decimal_digits, + STATE(293), 1, + sym_integer_constant, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + ACTIONS(55), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [14248] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(260), 1, + anon_sym_0x, + ACTIONS(262), 1, + anon_sym_0o, + ACTIONS(264), 1, + anon_sym_0b, + ACTIONS(266), 1, + anon_sym_0, + ACTIONS(921), 1, + sym_name, + STATE(154), 1, + sym_decimal_digits, + STATE(233), 1, + sym_integer_constant, + STATE(115), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + ACTIONS(228), 9, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [14288] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(925), 1, + anon_sym_DOT_DOT, + ACTIONS(915), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(917), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(923), 13, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14318] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(484), 3, + anon_sym_EQ, + anon_sym_COLON, + anon_sym_DOT, + ACTIONS(482), 13, + anon_sym_SEMI, + anon_sym_COLON_COLON, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_LBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_QMARK, + anon_sym_EQ_GT, + [14342] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + anon_sym_use, + STATE(384), 2, + sym_use_statement, + aux_sym_imports_repeat1, + ACTIONS(927), 12, + ts_builtin_sym_end, + anon_sym_export, + anon_sym_let, + anon_sym_const, + anon_sym_ATsymbol, + anon_sym_def, + anon_sym_type, + anon_sym_fn, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + anon_sym_ATnoreturn, + [14367] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(379), 1, + anon_sym_uint, + ACTIONS(929), 1, + anon_sym_LBRACE, + STATE(792), 1, + sym_integer_type, + ACTIONS(931), 12, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [14394] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(379), 1, + anon_sym_uint, + ACTIONS(933), 1, + anon_sym_LBRACE, + STATE(662), 1, + sym_integer_type, + ACTIONS(931), 12, + anon_sym_i8, + anon_sym_i16, + anon_sym_i32, + anon_sym_i64, + anon_sym_u8, + anon_sym_u16, + anon_sym_u32, + anon_sym_u64, + anon_sym_int, + anon_sym_size, + anon_sym_uintptr, + anon_sym_char, + [14421] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(937), 1, + anon_sym_use, + STATE(384), 2, + sym_use_statement, + aux_sym_imports_repeat1, + ACTIONS(935), 12, + ts_builtin_sym_end, + anon_sym_export, + anon_sym_let, + anon_sym_const, + anon_sym_ATsymbol, + anon_sym_def, + anon_sym_type, + anon_sym_fn, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + anon_sym_ATnoreturn, + [14446] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(942), 1, + anon_sym_DOT_DOT, + ACTIONS(944), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(940), 11, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14470] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(948), 1, + anon_sym_DOT_DOT, + ACTIONS(944), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(946), 11, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_AMP_AMP, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14494] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(268), 1, + sym_decimal_digits, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + ACTIONS(55), 10, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [14517] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(950), 1, + anon_sym_COLON_COLON, + ACTIONS(496), 2, + anon_sym_EQ, + anon_sym_COLON, + ACTIONS(494), 10, + anon_sym_SEMI, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [14540] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(952), 13, + ts_builtin_sym_end, + anon_sym_use, + anon_sym_export, + anon_sym_let, + anon_sym_const, + anon_sym_ATsymbol, + anon_sym_def, + anon_sym_type, + anon_sym_fn, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + anon_sym_ATnoreturn, + [14559] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(954), 13, + ts_builtin_sym_end, + anon_sym_use, + anon_sym_export, + anon_sym_let, + anon_sym_const, + anon_sym_ATsymbol, + anon_sym_def, + anon_sym_type, + anon_sym_fn, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + anon_sym_ATnoreturn, + [14578] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(203), 1, + sym_decimal_digits, + STATE(149), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + ACTIONS(55), 10, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [14601] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(956), 13, + ts_builtin_sym_end, + anon_sym_use, + anon_sym_export, + anon_sym_let, + anon_sym_const, + anon_sym_ATsymbol, + anon_sym_def, + anon_sym_type, + anon_sym_fn, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + anon_sym_ATnoreturn, + [14620] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(166), 1, + sym_decimal_digits, + STATE(115), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + ACTIONS(228), 10, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [14643] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(156), 1, + sym_decimal_digits, + STATE(115), 2, + sym_decimal_digit, + aux_sym_decimal_digits_repeat1, + ACTIONS(228), 10, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + anon_sym_8, + anon_sym_9, + [14666] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(958), 12, + ts_builtin_sym_end, + anon_sym_export, + anon_sym_let, + anon_sym_const, + anon_sym_ATsymbol, + anon_sym_def, + anon_sym_type, + anon_sym_fn, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + anon_sym_ATnoreturn, + [14684] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(845), 12, + ts_builtin_sym_end, + anon_sym_export, + anon_sym_let, + anon_sym_const, + anon_sym_ATsymbol, + anon_sym_def, + anon_sym_type, + anon_sym_fn, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + anon_sym_ATnoreturn, + [14702] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(962), 1, + anon_sym_DOT_DOT, + ACTIONS(964), 1, + anon_sym_AMP_AMP, + ACTIONS(960), 10, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14724] = 3, + ACTIONS(3), 1, + sym_comment, + STATE(73), 1, + sym_assignment_op, + ACTIONS(663), 11, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [14744] = 3, + ACTIONS(3), 1, + sym_comment, + STATE(67), 1, + sym_assignment_op, + ACTIONS(663), 11, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [14764] = 3, + ACTIONS(3), 1, + sym_comment, + STATE(55), 1, + sym_assignment_op, + ACTIONS(663), 11, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [14784] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(964), 1, + anon_sym_AMP_AMP, + ACTIONS(968), 1, + anon_sym_DOT_DOT, + ACTIONS(966), 10, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_CARET_CARET, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14806] = 3, + ACTIONS(3), 1, + sym_comment, + STATE(45), 1, + sym_assignment_op, + ACTIONS(663), 11, + anon_sym_EQ, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_PIPE_EQ, + anon_sym_CARET_EQ, + [14826] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(972), 1, + anon_sym_DOT_DOT, + ACTIONS(974), 1, + anon_sym_CARET_CARET, + ACTIONS(970), 9, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14847] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(159), 1, + sym_octal_digits, + STATE(136), 2, + sym_octal_digit, + aux_sym_octal_digits_repeat1, + ACTIONS(311), 8, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + [14868] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(976), 1, + anon_sym_RBRACE, + ACTIONS(978), 1, + anon_sym_AToffset, + ACTIONS(980), 1, + sym_name, + STATE(476), 1, + sym_offset_specifier, + STATE(599), 1, + sym_struct_union_field, + STATE(783), 1, + sym_struct_union_fields, + STATE(593), 3, + sym_struct_type, + sym_union_type, + sym_identifier, + [14901] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(974), 1, + anon_sym_CARET_CARET, + ACTIONS(984), 1, + anon_sym_DOT_DOT, + ACTIONS(982), 9, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_PIPE_PIPE, + anon_sym_else, + anon_sym_EQ_GT, + [14922] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(31), 1, + anon_sym_COLON, + ACTIONS(79), 1, + anon_sym_DOT_DOT, + STATE(449), 1, + sym_label, + ACTIONS(25), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [14945] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(219), 1, + sym_octal_digits, + STATE(160), 2, + sym_octal_digit, + aux_sym_octal_digits_repeat1, + ACTIONS(364), 8, + anon_sym_0, + anon_sym_1, + anon_sym_2, + anon_sym_3, + anon_sym_4, + anon_sym_5, + anon_sym_6, + anon_sym_7, + [14966] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(978), 1, + anon_sym_AToffset, + ACTIONS(980), 1, + sym_name, + STATE(476), 1, + sym_offset_specifier, + STATE(599), 1, + sym_struct_union_field, + STATE(758), 1, + sym_struct_union_fields, + STATE(593), 3, + sym_struct_type, + sym_union_type, + sym_identifier, + [14996] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(986), 1, + anon_sym_ATsymbol, + ACTIONS(989), 1, + anon_sym_fn, + ACTIONS(994), 1, + anon_sym_ATnoreturn, + STATE(410), 2, + sym_fndec_attr, + aux_sym_fndec_attrs_repeat1, + STATE(479), 2, + sym_decl_attr, + sym_fntype_attr, + ACTIONS(991), 3, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + [15022] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(13), 1, + anon_sym_ATsymbol, + ACTIONS(23), 1, + anon_sym_ATnoreturn, + ACTIONS(997), 1, + anon_sym_fn, + STATE(410), 2, + sym_fndec_attr, + aux_sym_fndec_attrs_repeat1, + STATE(479), 2, + sym_decl_attr, + sym_fntype_attr, + ACTIONS(21), 3, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + [15048] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(978), 1, + anon_sym_AToffset, + ACTIONS(980), 1, + sym_name, + STATE(476), 1, + sym_offset_specifier, + STATE(599), 1, + sym_struct_union_field, + STATE(764), 1, + sym_struct_union_fields, + STATE(593), 3, + sym_struct_type, + sym_union_type, + sym_identifier, + [15078] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(705), 1, + anon_sym_EQ, + ACTIONS(703), 9, + anon_sym_SEMI, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15096] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1001), 1, + anon_sym_DOT_DOT, + ACTIONS(999), 9, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_for, + anon_sym_EQ_GT, + [15114] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(978), 1, + anon_sym_AToffset, + ACTIONS(980), 1, + sym_name, + STATE(476), 1, + sym_offset_specifier, + STATE(599), 1, + sym_struct_union_field, + STATE(669), 1, + sym_struct_union_fields, + STATE(593), 3, + sym_struct_type, + sym_union_type, + sym_identifier, + [15144] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1005), 1, + anon_sym_DOT_DOT, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1003), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15164] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(978), 1, + anon_sym_AToffset, + ACTIONS(980), 1, + sym_name, + STATE(476), 1, + sym_offset_specifier, + STATE(599), 1, + sym_struct_union_field, + STATE(668), 1, + sym_struct_union_fields, + STATE(593), 3, + sym_struct_type, + sym_union_type, + sym_identifier, + [15194] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1011), 1, + anon_sym_DOT_DOT, + ACTIONS(1009), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15211] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(713), 1, + anon_sym_EQ, + ACTIONS(711), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15228] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(769), 1, + anon_sym_EQ, + ACTIONS(767), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15245] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(777), 1, + anon_sym_EQ, + ACTIONS(775), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15262] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1005), 1, + anon_sym_DOT_DOT, + ACTIONS(1003), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15279] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1015), 1, + anon_sym_DOT_DOT, + ACTIONS(1017), 1, + anon_sym_else, + ACTIONS(1013), 7, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15298] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(721), 1, + anon_sym_EQ, + ACTIONS(719), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15315] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1022), 1, + anon_sym_DOT_DOT, + ACTIONS(1020), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15332] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1026), 1, + anon_sym_DOT_DOT, + ACTIONS(1024), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15349] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(753), 1, + anon_sym_EQ, + ACTIONS(1028), 1, + anon_sym_BANG, + ACTIONS(749), 7, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15368] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(729), 1, + anon_sym_EQ, + ACTIONS(727), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15385] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(701), 1, + anon_sym_EQ, + ACTIONS(699), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15402] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(709), 1, + anon_sym_EQ, + ACTIONS(707), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15419] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1032), 1, + anon_sym_DOT_DOT, + ACTIONS(1030), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15436] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1036), 1, + anon_sym_DOT_DOT, + ACTIONS(1034), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15453] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(739), 1, + anon_sym_EQ, + ACTIONS(737), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15470] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1015), 1, + anon_sym_DOT_DOT, + ACTIONS(1038), 1, + anon_sym_else, + ACTIONS(1013), 7, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15489] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(743), 1, + anon_sym_EQ, + ACTIONS(741), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15506] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1042), 1, + anon_sym_COMMA, + ACTIONS(1045), 1, + anon_sym_DOT_DOT, + ACTIONS(1040), 7, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15525] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(735), 1, + anon_sym_EQ, + ACTIONS(733), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15542] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(761), 1, + anon_sym_EQ, + ACTIONS(759), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15559] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(781), 1, + anon_sym_EQ, + ACTIONS(779), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15576] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1049), 1, + anon_sym_DOT_DOT, + ACTIONS(1047), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15593] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(773), 1, + anon_sym_EQ, + ACTIONS(771), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15610] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(725), 1, + anon_sym_EQ, + ACTIONS(723), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15627] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1053), 1, + anon_sym_DOT_DOT, + ACTIONS(1051), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15644] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1057), 1, + anon_sym_DOT_DOT, + ACTIONS(1055), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15661] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1061), 1, + anon_sym_DOT_DOT, + ACTIONS(1059), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15678] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1065), 1, + anon_sym_DOT_DOT, + ACTIONS(1063), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15695] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1069), 1, + anon_sym_DOT_DOT, + ACTIONS(1067), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15712] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1073), 1, + anon_sym_DOT_DOT, + ACTIONS(1071), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15729] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1077), 1, + anon_sym_DOT_DOT, + ACTIONS(1075), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15746] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1081), 1, + anon_sym_DOT_DOT, + ACTIONS(1079), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15763] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(697), 1, + anon_sym_EQ, + ACTIONS(695), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15780] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1085), 1, + anon_sym_DOT_DOT, + ACTIONS(1083), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15797] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(757), 1, + anon_sym_EQ, + ACTIONS(755), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15814] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(765), 1, + anon_sym_EQ, + ACTIONS(763), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15831] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(747), 1, + anon_sym_EQ, + ACTIONS(745), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15848] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1089), 1, + anon_sym_DOT_DOT, + ACTIONS(1087), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_else, + anon_sym_EQ_GT, + [15865] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(785), 1, + anon_sym_EQ, + ACTIONS(783), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15882] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(717), 1, + anon_sym_EQ, + ACTIONS(715), 8, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_BANG, + anon_sym_PIPE, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15899] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1045), 1, + anon_sym_DOT_DOT, + ACTIONS(1091), 1, + anon_sym_COMMA, + ACTIONS(1040), 6, + anon_sym_SEMI, + anon_sym_RBRACE, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT_DOT, + anon_sym_EQ_GT, + [15917] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(1094), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(1096), 1, + sym_name, + STATE(579), 1, + sym_struct_literal, + STATE(585), 1, + sym_field_value, + STATE(634), 1, + sym_field_values, + STATE(704), 1, + sym_identifier, + STATE(818), 1, + sym_struct_initializer, + [15945] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1098), 1, + anon_sym_COLON_COLON, + ACTIONS(494), 7, + anon_sym_SEMI, + anon_sym_LBRACE, + anon_sym_COMMA, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DOT, + anon_sym_QMARK, + [15961] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(1094), 1, + anon_sym_DOT_DOT_DOT, + ACTIONS(1096), 1, + sym_name, + STATE(579), 1, + sym_struct_literal, + STATE(585), 1, + sym_field_value, + STATE(634), 1, + sym_field_values, + STATE(696), 1, + sym_struct_initializer, + STATE(704), 1, + sym_identifier, + [15989] = 8, + ACTIONS(1101), 1, + anon_sym_BSLASH, + ACTIONS(1103), 1, + anon_sym_DQUOTE, + ACTIONS(1105), 1, + aux_sym_string_char_token1, + ACTIONS(1107), 1, + sym_comment, + STATE(518), 1, + sym_named_escape, + STATE(540), 1, + sym_escape_sequence, + STATE(652), 1, + sym_string_chars, + STATE(466), 2, + sym_string_char, + aux_sym_string_chars_repeat1, + [16015] = 8, + ACTIONS(1101), 1, + anon_sym_BSLASH, + ACTIONS(1105), 1, + aux_sym_string_char_token1, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1109), 1, + anon_sym_DQUOTE, + STATE(518), 1, + sym_named_escape, + STATE(540), 1, + sym_escape_sequence, + STATE(646), 1, + sym_string_chars, + STATE(466), 2, + sym_string_char, + aux_sym_string_chars_repeat1, + [16041] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(1096), 1, + sym_name, + ACTIONS(1111), 1, + anon_sym_RBRACE, + ACTIONS(1113), 1, + anon_sym_DOT_DOT_DOT, + STATE(565), 1, + sym_field_value, + STATE(579), 1, + sym_struct_literal, + STATE(704), 1, + sym_identifier, + [16066] = 7, + ACTIONS(1101), 1, + anon_sym_BSLASH, + ACTIONS(1105), 1, + aux_sym_string_char_token1, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1115), 1, + anon_sym_DQUOTE, + STATE(518), 1, + sym_named_escape, + STATE(540), 1, + sym_escape_sequence, + STATE(467), 2, + sym_string_char, + aux_sym_string_chars_repeat1, + [16089] = 7, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1117), 1, + anon_sym_BSLASH, + ACTIONS(1120), 1, + anon_sym_DQUOTE, + ACTIONS(1122), 1, + aux_sym_string_char_token1, + STATE(518), 1, + sym_named_escape, + STATE(540), 1, + sym_escape_sequence, + STATE(467), 2, + sym_string_char, + aux_sym_string_chars_repeat1, + [16112] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1125), 1, + anon_sym_ATsymbol, + ACTIONS(1127), 1, + sym_name, + STATE(555), 1, + sym_decl_attr, + STATE(600), 1, + sym_global_binding, + STATE(657), 1, + sym_global_bindings, + STATE(756), 1, + sym_identifier, + [16134] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1129), 6, + anon_sym_ATsymbol, + anon_sym_fn, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + anon_sym_ATnoreturn, + [16146] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(1096), 1, + sym_name, + STATE(579), 1, + sym_struct_literal, + STATE(585), 1, + sym_field_value, + STATE(631), 1, + sym_field_values, + STATE(704), 1, + sym_identifier, + [16168] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1131), 1, + anon_sym_RPAREN, + STATE(532), 1, + sym_parameter, + STATE(533), 1, + sym_parameters, + STATE(658), 1, + sym_parameter_list, + ACTIONS(1133), 2, + anon_sym__, + sym_name, + [16188] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1125), 1, + anon_sym_ATsymbol, + ACTIONS(1127), 1, + sym_name, + STATE(555), 1, + sym_decl_attr, + STATE(600), 1, + sym_global_binding, + STATE(756), 1, + sym_identifier, + STATE(759), 1, + sym_global_bindings, + [16210] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(1096), 1, + sym_name, + STATE(568), 1, + sym_field_values, + STATE(579), 1, + sym_struct_literal, + STATE(585), 1, + sym_field_value, + STATE(704), 1, + sym_identifier, + [16232] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(1096), 1, + sym_name, + ACTIONS(1135), 1, + anon_sym_RBRACE, + STATE(565), 1, + sym_field_value, + STATE(579), 1, + sym_struct_literal, + STATE(704), 1, + sym_identifier, + [16254] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1137), 1, + anon_sym_RPAREN, + STATE(532), 1, + sym_parameter, + STATE(533), 1, + sym_parameters, + STATE(647), 1, + sym_parameter_list, + ACTIONS(1133), 2, + anon_sym__, + sym_name, + [16274] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(389), 1, + anon_sym_struct, + ACTIONS(391), 1, + anon_sym_union, + ACTIONS(1139), 1, + sym_name, + STATE(562), 3, + sym_struct_type, + sym_union_type, + sym_identifier, + [16292] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(43), 1, + anon_sym_struct, + ACTIONS(1096), 1, + sym_name, + ACTIONS(1141), 1, + anon_sym_RBRACE, + STATE(565), 1, + sym_field_value, + STATE(579), 1, + sym_struct_literal, + STATE(704), 1, + sym_identifier, + [16314] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1143), 1, + anon_sym_COMMA, + ACTIONS(1040), 5, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT, + anon_sym_else, + [16328] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1145), 6, + anon_sym_ATsymbol, + anon_sym_fn, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + anon_sym_ATnoreturn, + [16340] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1147), 6, + anon_sym_ATsymbol, + anon_sym_fn, + anon_sym_ATfini, + anon_sym_ATinit, + anon_sym_ATtest, + anon_sym_ATnoreturn, + [16352] = 6, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1149), 1, + aux_sym_rune_token1, + ACTIONS(1151), 1, + anon_sym_BSLASH, + STATE(673), 1, + sym_rune, + STATE(702), 1, + sym_named_escape, + STATE(781), 1, + sym_escape_sequence, + [16371] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1153), 1, + anon_sym_COMMA, + ACTIONS(1040), 4, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT, + [16384] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(159), 1, + sym_binary_digits, + ACTIONS(354), 2, + anon_sym_0, + anon_sym_1, + STATE(150), 2, + sym_binary_digit, + aux_sym_binary_digits_repeat1, + [16399] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1155), 1, + anon_sym_RPAREN, + ACTIONS(509), 4, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DOT, + anon_sym_QMARK, + [16412] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1157), 1, + anon_sym_RPAREN, + ACTIONS(1159), 1, + anon_sym_DOT_DOT_DOT, + STATE(528), 1, + sym_parameter, + ACTIONS(1133), 2, + anon_sym__, + sym_name, + [16429] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1161), 1, + anon_sym_else, + ACTIONS(1013), 4, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT, + [16442] = 4, + ACTIONS(3), 1, + sym_comment, + STATE(219), 1, + sym_binary_digits, + ACTIONS(427), 2, + anon_sym_0, + anon_sym_1, + STATE(174), 2, + sym_binary_digit, + aux_sym_binary_digits_repeat1, + [16457] = 6, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1149), 1, + aux_sym_rune_token1, + ACTIONS(1151), 1, + anon_sym_BSLASH, + STATE(702), 1, + sym_named_escape, + STATE(781), 1, + sym_escape_sequence, + STATE(787), 1, + sym_rune, + [16476] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1163), 1, + anon_sym_RPAREN, + ACTIONS(509), 4, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DOT, + anon_sym_QMARK, + [16489] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1165), 1, + anon_sym_else, + ACTIONS(1013), 4, + anon_sym_SEMI, + anon_sym_RPAREN, + anon_sym_RBRACK, + anon_sym_DOT_DOT, + [16502] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1168), 1, + anon_sym_RPAREN, + ACTIONS(509), 4, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DOT, + anon_sym_QMARK, + [16515] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1170), 1, + anon_sym_RPAREN, + ACTIONS(509), 4, + anon_sym_LPAREN, + anon_sym_LBRACK, + anon_sym_DOT, + anon_sym_QMARK, + [16528] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 1, + sym_name, + STATE(559), 1, + sym_constant_binding, + STATE(654), 1, + sym_constant_bindings, + STATE(744), 1, + sym_identifier, + [16544] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1172), 1, + sym_name, + STATE(452), 1, + sym_bindings, + STATE(459), 1, + sym_binding, + STATE(619), 1, + sym_binding_names, + [16560] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_name, + STATE(436), 1, + sym_binding, + STATE(445), 1, + sym_bindings, + STATE(573), 1, + sym_binding_names, + [16576] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_name, + STATE(452), 1, + sym_bindings, + STATE(478), 1, + sym_binding, + STATE(573), 1, + sym_binding_names, + [16592] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + anon_sym_RBRACE, + ACTIONS(1178), 1, + sym_name, + STATE(575), 1, + sym_enum_value, + STATE(786), 1, + sym_enum_values, + [16608] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(950), 1, + anon_sym_COLON_COLON, + ACTIONS(1180), 1, + anon_sym_COLON, + ACTIONS(494), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [16622] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_name, + STATE(443), 1, + sym_bindings, + STATE(478), 1, + sym_binding, + STATE(573), 1, + sym_binding_names, + [16638] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1172), 1, + sym_name, + STATE(445), 1, + sym_bindings, + STATE(459), 1, + sym_binding, + STATE(619), 1, + sym_binding_names, + [16654] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 1, + sym_name, + STATE(559), 1, + sym_constant_binding, + STATE(744), 1, + sym_identifier, + STATE(749), 1, + sym_constant_bindings, + [16670] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_name, + STATE(445), 1, + sym_bindings, + STATE(478), 1, + sym_binding, + STATE(573), 1, + sym_binding_names, + [16686] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(1182), 1, + anon_sym_RPAREN, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(760), 1, + sym_string_constant, + [16702] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1172), 1, + sym_name, + STATE(443), 1, + sym_bindings, + STATE(459), 1, + sym_binding, + STATE(619), 1, + sym_binding_names, + [16718] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(950), 1, + anon_sym_COLON_COLON, + ACTIONS(1184), 1, + anon_sym_COLON, + ACTIONS(494), 2, + anon_sym_BANG, + anon_sym_EQ_GT, + [16732] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 1, + sym_name, + ACTIONS(1186), 1, + anon_sym_SEMI, + STATE(697), 1, + sym_type_bindings, + STATE(738), 1, + sym_identifier, + [16748] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_name, + STATE(436), 1, + sym_binding, + STATE(452), 1, + sym_bindings, + STATE(573), 1, + sym_binding_names, + [16764] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(494), 1, + anon_sym_LBRACE, + ACTIONS(950), 1, + anon_sym_COLON_COLON, + ACTIONS(1188), 1, + anon_sym_EQ, + ACTIONS(1190), 1, + anon_sym_COLON, + [16780] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(679), 1, + anon_sym_LPAREN, + ACTIONS(681), 1, + anon_sym_LBRACK, + ACTIONS(683), 1, + anon_sym_QMARK, + ACTIONS(1192), 1, + anon_sym_DOT, + [16796] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_name, + STATE(436), 1, + sym_binding, + STATE(443), 1, + sym_bindings, + STATE(573), 1, + sym_binding_names, + [16812] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(950), 1, + anon_sym_COLON_COLON, + ACTIONS(1194), 1, + anon_sym_COLON, + ACTIONS(494), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [16826] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DQUOTE, + ACTIONS(1196), 1, + anon_sym_RPAREN, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(690), 1, + sym_string_constant, + [16842] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1172), 1, + sym_name, + STATE(443), 1, + sym_bindings, + STATE(482), 1, + sym_binding, + STATE(619), 1, + sym_binding_names, + [16858] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1172), 1, + sym_name, + STATE(452), 1, + sym_bindings, + STATE(482), 1, + sym_binding, + STATE(619), 1, + sym_binding_names, + [16874] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1172), 1, + sym_name, + STATE(445), 1, + sym_bindings, + STATE(482), 1, + sym_binding, + STATE(619), 1, + sym_binding_names, + [16890] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(679), 1, + anon_sym_LPAREN, + ACTIONS(683), 1, + anon_sym_QMARK, + ACTIONS(685), 1, + anon_sym_LBRACK, + ACTIONS(1198), 1, + anon_sym_DOT, + [16906] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DQUOTE, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(699), 1, + sym_string_constant, + [16919] = 2, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1200), 3, + anon_sym_BSLASH, + anon_sym_DQUOTE, + aux_sym_string_char_token1, + [16928] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1204), 1, + anon_sym_COMMA, + ACTIONS(1202), 2, + anon_sym_EQ, + anon_sym_COLON, + [16939] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1178), 1, + sym_name, + STATE(575), 1, + sym_enum_value, + STATE(737), 1, + sym_enum_values, + [16952] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 1, + sym_name, + STATE(738), 1, + sym_identifier, + STATE(743), 1, + sym_type_bindings, + [16965] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1208), 1, + anon_sym_assert, + ACTIONS(1206), 2, + anon_sym_let, + anon_sym_const, + [16976] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1208), 1, + anon_sym_assert, + ACTIONS(1210), 2, + anon_sym_let, + anon_sym_const, + [16987] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1178), 1, + sym_name, + STATE(575), 1, + sym_enum_value, + STATE(683), 1, + sym_enum_values, + [17000] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DQUOTE, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(714), 1, + sym_string_constant, + [17013] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1212), 1, + anon_sym_RPAREN, + ACTIONS(1214), 1, + anon_sym_PIPE, + STATE(526), 1, + aux_sym_tagged_types_repeat1, + [17026] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1217), 3, + anon_sym_struct, + anon_sym_union, + sym_name, + [17035] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1219), 3, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_DOT_DOT_DOT, + [17044] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1221), 1, + anon_sym_EQ, + ACTIONS(1223), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17055] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1204), 1, + anon_sym_COMMA, + ACTIONS(1225), 1, + anon_sym_EQ, + ACTIONS(1227), 1, + anon_sym_COLON, + [17068] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1229), 1, + anon_sym_COMMA, + ACTIONS(1231), 1, + anon_sym_RBRACK, + ACTIONS(1233), 1, + anon_sym_DOT_DOT_DOT, + [17081] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1235), 3, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_DOT_DOT_DOT, + [17090] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1237), 1, + anon_sym_COMMA, + ACTIONS(1239), 1, + anon_sym_RPAREN, + ACTIONS(1241), 1, + anon_sym_DOT_DOT_DOT, + [17103] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(494), 1, + anon_sym_SEMI, + ACTIONS(1098), 1, + anon_sym_COLON_COLON, + ACTIONS(1243), 1, + anon_sym_EQ, + [17116] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DQUOTE, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(645), 1, + sym_string_constant, + [17129] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1247), 1, + anon_sym_EQ, + ACTIONS(1245), 2, + anon_sym_SEMI, + anon_sym_COMMA, + [17140] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1204), 1, + anon_sym_COMMA, + ACTIONS(1249), 1, + anon_sym_EQ, + ACTIONS(1251), 1, + anon_sym_COLON, + [17153] = 2, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1253), 3, + anon_sym_BSLASH, + anon_sym_DQUOTE, + aux_sym_string_char_token1, + [17162] = 2, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1255), 3, + anon_sym_BSLASH, + anon_sym_DQUOTE, + aux_sym_string_char_token1, + [17171] = 2, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1257), 3, + anon_sym_BSLASH, + anon_sym_DQUOTE, + aux_sym_string_char_token1, + [17180] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1259), 1, + anon_sym_COMMA, + ACTIONS(1261), 1, + anon_sym_RPAREN, + ACTIONS(1263), 1, + anon_sym_DOT_DOT_DOT, + [17193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1208), 1, + anon_sym_assert, + ACTIONS(1265), 2, + anon_sym_let, + anon_sym_const, + [17204] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1269), 1, + anon_sym_EQ, + ACTIONS(1267), 2, + anon_sym_SEMI, + anon_sym_COMMA, + [17215] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1271), 1, + anon_sym_RPAREN, + ACTIONS(1273), 1, + anon_sym_PIPE, + STATE(545), 1, + aux_sym_tagged_types_repeat1, + [17228] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1273), 1, + anon_sym_PIPE, + ACTIONS(1275), 1, + anon_sym_RPAREN, + STATE(526), 1, + aux_sym_tagged_types_repeat1, + [17241] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1208), 1, + anon_sym_assert, + ACTIONS(1277), 2, + anon_sym_let, + anon_sym_const, + [17252] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1178), 1, + sym_name, + STATE(575), 1, + sym_enum_value, + STATE(667), 1, + sym_enum_values, + [17265] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1279), 1, + anon_sym_RBRACE, + ACTIONS(1281), 1, + sym_name, + STATE(671), 1, + sym_name_list, + [17278] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DQUOTE, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(748), 1, + sym_string_constant, + [17291] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1178), 1, + sym_name, + STATE(575), 1, + sym_enum_value, + STATE(650), 1, + sym_enum_values, + [17304] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DQUOTE, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(733), 1, + sym_string_constant, + [17317] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DQUOTE, + STATE(276), 1, + aux_sym_string_constant_repeat1, + STATE(710), 1, + sym_string_constant, + [17330] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1283), 3, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_DOT_DOT_DOT, + [17339] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1157), 1, + anon_sym_RPAREN, + ACTIONS(1285), 1, + anon_sym_COMMA, + [17349] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 1, + sym_name, + STATE(706), 1, + sym_identifier, + [17359] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1287), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17367] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1289), 1, + anon_sym_RBRACK, + ACTIONS(1291), 1, + anon_sym_DOT_DOT, + [17377] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1293), 1, + sym_name, + STATE(616), 1, + sym_identifier, + [17387] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1295), 1, + anon_sym_SEMI, + ACTIONS(1297), 1, + anon_sym_COMMA, + [17397] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1299), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17405] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1301), 1, + anon_sym_COMMA, + ACTIONS(1303), 1, + anon_sym_RPAREN, + [17415] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1305), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17423] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1307), 1, + anon_sym_COMMA, + ACTIONS(1309), 1, + anon_sym_RPAREN, + [17433] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1311), 1, + anon_sym_COMMA, + ACTIONS(1313), 1, + anon_sym_RPAREN, + [17443] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1315), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17451] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1317), 1, + anon_sym_COMMA, + ACTIONS(1319), 1, + anon_sym_RPAREN, + [17461] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1155), 1, + anon_sym_RPAREN, + ACTIONS(1321), 1, + anon_sym_COMMA, + [17471] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1323), 1, + anon_sym_RBRACE, + ACTIONS(1325), 1, + anon_sym_COMMA, + [17481] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1327), 1, + anon_sym_COMMA, + ACTIONS(1329), 1, + anon_sym_RPAREN, + [17491] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1331), 1, + anon_sym_SEMI, + ACTIONS(1333), 1, + anon_sym_EQ, + [17501] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1335), 1, + anon_sym_LPAREN, + STATE(570), 1, + sym_prototype, + [17511] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1335), 1, + anon_sym_LPAREN, + STATE(613), 1, + sym_prototype, + [17521] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1249), 1, + anon_sym_EQ, + ACTIONS(1251), 1, + anon_sym_COLON, + [17531] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(246), 1, + anon_sym_RBRACK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + [17541] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1337), 1, + anon_sym_RBRACE, + ACTIONS(1339), 1, + anon_sym_COMMA, + [17551] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1335), 1, + anon_sym_LPAREN, + STATE(424), 1, + sym_prototype, + [17561] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1341), 1, + anon_sym_SEMI, + ACTIONS(1343), 1, + anon_sym_RPAREN, + [17571] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1345), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17579] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1347), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17587] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1349), 1, + anon_sym_COMMA, + ACTIONS(1351), 1, + anon_sym_RPAREN, + [17597] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1353), 1, + anon_sym_COMMA, + ACTIONS(1355), 1, + anon_sym_RPAREN, + [17607] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1357), 2, + anon_sym_SEMI, + anon_sym_COMMA, + [17615] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 1, + sym_name, + STATE(571), 1, + sym_identifier, + [17625] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1359), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17633] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1361), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17641] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1363), 1, + anon_sym_COMMA, + ACTIONS(1365), 1, + anon_sym_RPAREN, + [17651] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1367), 1, + anon_sym_SEMI, + ACTIONS(1369), 1, + anon_sym_RPAREN, + [17661] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1212), 2, + anon_sym_RPAREN, + anon_sym_PIPE, + [17669] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1003), 1, + anon_sym_RPAREN, + ACTIONS(1371), 1, + anon_sym_SEMI, + [17679] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1374), 1, + sym_name, + STATE(326), 1, + sym_identifier, + [17689] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1376), 2, + anon_sym_SEMI, + anon_sym_COMMA, + [17697] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1378), 1, + anon_sym_LPAREN, + STATE(434), 1, + sym_conditional_branch, + [17707] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1380), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17715] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(157), 1, + anon_sym_RBRACK, + ACTIONS(1382), 1, + anon_sym_COMMA, + [17725] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1281), 1, + sym_name, + STATE(659), 1, + sym_name_list, + [17735] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1384), 1, + anon_sym_LPAREN, + STATE(490), 1, + sym_conditional_branch, + [17745] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1378), 1, + anon_sym_LPAREN, + STATE(423), 1, + sym_conditional_branch, + [17755] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1386), 2, + anon_sym_SEMI, + anon_sym_COMMA, + [17763] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1388), 1, + anon_sym_RBRACE, + ACTIONS(1390), 1, + anon_sym_COMMA, + [17773] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1392), 1, + anon_sym_SEMI, + ACTIONS(1394), 1, + anon_sym_COMMA, + [17783] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1384), 1, + anon_sym_LPAREN, + STATE(486), 1, + sym_conditional_branch, + [17793] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 1, + sym_name, + STATE(380), 1, + sym_identifier, + [17803] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1202), 2, + anon_sym_EQ, + anon_sym_COLON, + [17811] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1396), 1, + anon_sym_LPAREN, + STATE(332), 1, + sym_prototype, + [17821] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(244), 1, + anon_sym_RBRACK, + ACTIONS(1007), 1, + anon_sym_PIPE_PIPE, + [17831] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1398), 1, + anon_sym_COMMA, + ACTIONS(1400), 1, + anon_sym_PIPE, + [17841] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1402), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17849] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1404), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17857] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1406), 1, + sym_name, + STATE(380), 1, + sym_identifier, + [17867] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 1, + sym_name, + STATE(676), 1, + sym_identifier, + [17877] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1408), 1, + anon_sym_RBRACE, + ACTIONS(1410), 1, + anon_sym_COMMA, + [17887] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1412), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [17895] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1414), 1, + anon_sym_SEMI, + ACTIONS(1416), 1, + anon_sym_EQ, + [17905] = 3, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1418), 1, + aux_sym_escape_sequence_token1, + ACTIONS(1420), 1, + aux_sym_named_escape_token1, + [17915] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1422), 1, + sym_name, + STATE(209), 1, + sym_identifier, + [17925] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1424), 1, + anon_sym_SEMI, + ACTIONS(1426), 1, + anon_sym_COLON_COLON, + [17935] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1428), 1, + sym_name, + STATE(603), 1, + sym_binding_names, + [17945] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1430), 1, + anon_sym_SEMI, + ACTIONS(1432), 1, + anon_sym_COMMA, + [17955] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1225), 1, + anon_sym_EQ, + ACTIONS(1227), 1, + anon_sym_COLON, + [17965] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1335), 1, + anon_sym_LPAREN, + STATE(441), 1, + sym_prototype, + [17975] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1168), 1, + anon_sym_RPAREN, + ACTIONS(1434), 1, + anon_sym_COMMA, + [17985] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(161), 1, + anon_sym_RPAREN, + ACTIONS(1436), 1, + anon_sym_COMMA, + [17995] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1353), 1, + anon_sym_COMMA, + ACTIONS(1438), 1, + anon_sym_RPAREN, + [18005] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1440), 2, + anon_sym_RBRACE, + anon_sym_COMMA, + [18013] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1442), 1, + anon_sym_RBRACE, + ACTIONS(1444), 1, + anon_sym_COMMA, + [18023] = 3, + ACTIONS(1107), 1, + sym_comment, + ACTIONS(1446), 1, + aux_sym_escape_sequence_token1, + ACTIONS(1448), 1, + aux_sym_named_escape_token1, + [18033] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 1, + sym_name, + STATE(572), 1, + sym_identifier, + [18043] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1291), 1, + anon_sym_DOT_DOT, + ACTIONS(1450), 1, + anon_sym_RBRACK, + [18053] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1452), 1, + anon_sym_COMMA, + ACTIONS(1454), 1, + anon_sym_RPAREN, + [18063] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1456), 1, + anon_sym_COMMA, + ACTIONS(1458), 1, + anon_sym_EQ_GT, + [18073] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1460), 1, + anon_sym_RBRACE, + ACTIONS(1462), 1, + anon_sym_COMMA, + [18083] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1127), 1, + sym_name, + STATE(451), 1, + sym_identifier, + [18093] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1464), 1, + anon_sym_RBRACE, + ACTIONS(1466), 1, + anon_sym_COMMA, + [18103] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 1, + anon_sym_RBRACE, + ACTIONS(1470), 1, + anon_sym_COMMA, + [18113] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1472), 1, + sym_name, + STATE(271), 1, + sym_identifier, + [18123] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1289), 1, + anon_sym_RBRACK, + ACTIONS(1474), 1, + anon_sym_DOT_DOT, + [18133] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1374), 1, + sym_name, + STATE(271), 1, + sym_identifier, + [18143] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1396), 1, + anon_sym_LPAREN, + STATE(345), 1, + sym_prototype, + [18153] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(145), 1, + anon_sym_RPAREN, + ACTIONS(1476), 1, + anon_sym_COMMA, + [18163] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(246), 1, + anon_sym_RBRACK, + [18170] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1478), 1, + anon_sym_LBRACE, + [18177] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1480), 1, + anon_sym_LBRACE, + [18184] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1482), 1, + anon_sym_STAR, + [18191] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1484), 1, + anon_sym_STAR, + [18198] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1486), 1, + anon_sym_RPAREN, + [18205] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1488), 1, + anon_sym_DQUOTE, + [18212] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1490), 1, + anon_sym_RPAREN, + [18219] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1492), 1, + anon_sym_RPAREN, + [18226] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1494), 1, + anon_sym_RPAREN, + [18233] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1496), 1, + anon_sym_RBRACE, + [18240] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1498), 1, + anon_sym_fn, + [18247] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1500), 1, + anon_sym_DQUOTE, + [18254] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(244), 1, + anon_sym_RBRACK, + [18261] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1502), 1, + anon_sym_SEMI, + [18268] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1504), 1, + anon_sym_EQ, + [18275] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1506), 1, + anon_sym_COLON, + [18282] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1508), 1, + anon_sym_SEMI, + [18289] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1510), 1, + anon_sym_RPAREN, + [18296] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1512), 1, + anon_sym_RBRACE, + [18303] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1514), 1, + anon_sym_RPAREN, + [18310] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1516), 1, + anon_sym_RPAREN, + [18317] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1518), 1, + anon_sym_LBRACE, + [18324] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1520), 1, + anon_sym_LPAREN, + [18331] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_LBRACE, + [18338] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1524), 1, + anon_sym_LPAREN, + [18345] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1526), 1, + anon_sym_SEMI, + [18352] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1528), 1, + anon_sym_RBRACE, + [18359] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1530), 1, + anon_sym_RBRACE, + [18366] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1532), 1, + anon_sym_RBRACE, + [18373] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1355), 1, + anon_sym_RPAREN, + [18380] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1534), 1, + anon_sym_RBRACE, + [18387] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + anon_sym_RBRACK, + [18394] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1538), 1, + anon_sym_SQUOTE, + [18401] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1540), 1, + anon_sym_LPAREN, + [18408] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1542), 1, + anon_sym_LPAREN, + [18415] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1544), 1, + anon_sym_SEMI, + [18422] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1546), 1, + sym_name, + [18429] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1548), 1, + anon_sym_LPAREN, + [18436] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1550), 1, + anon_sym_LPAREN, + [18443] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1208), 1, + anon_sym_assert, + [18450] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1552), 1, + anon_sym_LPAREN, + [18457] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1554), 1, + anon_sym_LPAREN, + [18464] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1556), 1, + anon_sym_RBRACE, + [18471] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1558), 1, + anon_sym_RPAREN, + [18478] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1560), 1, + anon_sym_LPAREN, + [18485] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1329), 1, + anon_sym_RPAREN, + [18492] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1155), 1, + anon_sym_RPAREN, + [18499] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1562), 1, + sym_name, + [18506] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1564), 1, + anon_sym_LPAREN, + [18513] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1313), 1, + anon_sym_RPAREN, + [18520] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1566), 1, + anon_sym_RPAREN, + [18527] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1568), 1, + anon_sym_LPAREN, + [18534] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1570), 1, + anon_sym_RPAREN, + [18541] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1572), 1, + anon_sym_SQUOTE, + [18548] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1574), 1, + anon_sym_SQUOTE, + [18555] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1323), 1, + anon_sym_RBRACE, + [18562] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1576), 1, + anon_sym_SEMI, + [18569] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1578), 1, + anon_sym_RPAREN, + [18576] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1580), 1, + anon_sym_RPAREN, + [18583] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1582), 1, + anon_sym_RPAREN, + [18590] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1147), 1, + sym_name, + [18597] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1584), 1, + anon_sym_SQUOTE, + [18604] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(177), 1, + anon_sym_RBRACK, + [18611] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(492), 1, + anon_sym_LBRACE, + [18618] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1586), 1, + anon_sym_EQ, + [18625] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1588), 1, + anon_sym_COLON, + [18632] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1590), 1, + sym_name, + [18639] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1592), 1, + anon_sym_RPAREN, + [18646] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1594), 1, + anon_sym_RPAREN, + [18653] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1596), 1, + anon_sym_RPAREN, + [18660] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1598), 1, + anon_sym_RBRACK, + [18667] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1600), 1, + anon_sym_LPAREN, + [18674] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1602), 1, + anon_sym_RPAREN, + [18681] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1604), 1, + anon_sym_RPAREN, + [18688] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1606), 1, + anon_sym_LBRACE, + [18695] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1608), 1, + anon_sym_RBRACE, + [18702] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1610), 1, + anon_sym_EQ_GT, + [18709] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1612), 1, + anon_sym_EQ_GT, + [18716] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1614), 1, + anon_sym_RBRACE, + [18723] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 1, + anon_sym_RBRACE, + [18730] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1616), 1, + anon_sym_LPAREN, + [18737] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1618), 1, + anon_sym_RPAREN, + [18744] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1620), 1, + anon_sym_RPAREN, + [18751] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1622), 1, + anon_sym_RBRACE, + [18758] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_EQ_GT, + [18765] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(292), 1, + anon_sym_EQ_GT, + [18772] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1624), 1, + ts_builtin_sym_end, + [18779] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1626), 1, + anon_sym_RBRACE, + [18786] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1628), 1, + anon_sym_for, + [18793] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1630), 1, + anon_sym_SEMI, + [18800] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1632), 1, + anon_sym_RPAREN, + [18807] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1634), 1, + anon_sym_RPAREN, + [18814] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1636), 1, + anon_sym_RPAREN, + [18821] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1638), 1, + anon_sym_SEMI, + [18828] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1640), 1, + anon_sym_RPAREN, + [18835] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1642), 1, + anon_sym_COMMA, + [18842] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1644), 1, + anon_sym_RBRACE, + [18849] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1646), 1, + anon_sym_EQ, + [18856] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1648), 1, + anon_sym_fn, + [18863] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1650), 1, + anon_sym_RPAREN, + [18870] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1652), 1, + anon_sym_RBRACE, + [18877] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1654), 1, + anon_sym_RBRACK, + [18884] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1656), 1, + anon_sym_SEMI, + [18891] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1658), 1, + anon_sym_COLON, + [18898] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1660), 1, + anon_sym_RPAREN, + [18905] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1662), 1, + anon_sym_LPAREN, + [18912] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1168), 1, + anon_sym_RPAREN, + [18919] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1664), 1, + anon_sym_RPAREN, + [18926] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1666), 1, + anon_sym_SEMI, + [18933] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1668), 1, + anon_sym_LPAREN, + [18940] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1670), 1, + anon_sym_SEMI, + [18947] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1672), 1, + anon_sym_RPAREN, + [18954] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1674), 1, + anon_sym_EQ, + [18961] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1676), 1, + anon_sym_RPAREN, + [18968] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1678), 1, + anon_sym_LBRACE, + [18975] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1680), 1, + anon_sym_COLON, + [18982] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1682), 1, + anon_sym_LBRACE, + [18989] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1684), 1, + anon_sym_RBRACE, + [18996] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1686), 1, + anon_sym_SEMI, + [19003] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1319), 1, + anon_sym_RPAREN, + [19010] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1688), 1, + anon_sym_SEMI, + [19017] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1690), 1, + anon_sym_EQ, + [19024] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1692), 1, + anon_sym_RBRACE, + [19031] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1694), 1, + anon_sym_RBRACE, + [19038] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1696), 1, + anon_sym_RPAREN, + [19045] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(171), 1, + anon_sym_RBRACK, + [19052] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1438), 1, + anon_sym_RPAREN, + [19059] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1698), 1, + anon_sym_RBRACE, + [19066] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1700), 1, + anon_sym_RPAREN, + [19073] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1702), 1, + anon_sym_RPAREN, + [19080] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1704), 1, + anon_sym_RPAREN, + [19087] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1706), 1, + anon_sym_fn, + [19094] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1708), 1, + anon_sym_SEMI, + [19101] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1710), 1, + anon_sym_SEMI, + [19108] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1712), 1, + anon_sym_COMMA, + [19115] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1714), 1, + anon_sym_RPAREN, + [19122] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(837), 1, + ts_builtin_sym_end, + [19129] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1716), 1, + anon_sym_RBRACK, + [19136] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1718), 1, + anon_sym_RBRACK, + [19143] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1351), 1, + anon_sym_RPAREN, + [19150] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1720), 1, + anon_sym_SQUOTE, + [19157] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1303), 1, + anon_sym_RPAREN, + [19164] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1722), 1, + anon_sym_RBRACE, + [19171] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1724), 1, + ts_builtin_sym_end, + [19178] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1726), 1, + anon_sym_RPAREN, + [19185] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1728), 1, + anon_sym_RBRACE, + [19192] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1730), 1, + anon_sym_SQUOTE, + [19199] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1732), 1, + anon_sym_LPAREN, + [19206] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1734), 1, + anon_sym_LPAREN, + [19213] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1736), 1, + anon_sym_LBRACE, + [19220] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1738), 1, + anon_sym_LBRACE, + [19227] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1740), 1, + anon_sym_LBRACE, + [19234] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1742), 1, + anon_sym_LPAREN, + [19241] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + anon_sym_LBRACE, + [19248] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1746), 1, + anon_sym_LPAREN, + [19255] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1748), 1, + anon_sym_LPAREN, + [19262] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1750), 1, + anon_sym_LPAREN, + [19269] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1752), 1, + anon_sym_LPAREN, + [19276] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1754), 1, + anon_sym_LPAREN, + [19283] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1756), 1, + anon_sym_LPAREN, + [19290] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1758), 1, + anon_sym_RPAREN, + [19297] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1760), 1, + anon_sym_RPAREN, + [19304] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1762), 1, + anon_sym_LPAREN, + [19311] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1764), 1, + anon_sym_LPAREN, + [19318] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1766), 1, + anon_sym_RPAREN, + [19325] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1768), 1, + anon_sym_RPAREN, + [19332] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1770), 1, + anon_sym_LPAREN, + [19339] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1772), 1, + anon_sym_COMMA, + [19346] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1774), 1, + anon_sym_LPAREN, + [19353] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1776), 1, + anon_sym_COMMA, + [19360] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1778), 1, + anon_sym_LPAREN, + [19367] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1780), 1, + anon_sym_LPAREN, + [19374] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1782), 1, + anon_sym_assert, + [19381] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1784), 1, + anon_sym_LPAREN, + [19388] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1786), 1, + anon_sym_for, + [19395] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1788), 1, + anon_sym_RPAREN, + [19402] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1790), 1, + anon_sym_LPAREN, + [19409] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1460), 1, + anon_sym_RBRACE, + [19416] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1792), 1, + anon_sym_for, + [19423] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1794), 1, + anon_sym_LPAREN, + [19430] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1796), 1, + anon_sym_for, +}; + +static uint32_t ts_small_parse_table_map[] = { + [SMALL_STATE(140)] = 0, + [SMALL_STATE(141)] = 87, + [SMALL_STATE(142)] = 223, + [SMALL_STATE(143)] = 359, + [SMALL_STATE(144)] = 438, + [SMALL_STATE(145)] = 511, + [SMALL_STATE(146)] = 584, + [SMALL_STATE(147)] = 717, + [SMALL_STATE(148)] = 850, + [SMALL_STATE(149)] = 983, + [SMALL_STATE(150)] = 1056, + [SMALL_STATE(151)] = 1129, + [SMALL_STATE(152)] = 1259, + [SMALL_STATE(153)] = 1389, + [SMALL_STATE(154)] = 1519, + [SMALL_STATE(155)] = 1597, + [SMALL_STATE(156)] = 1727, + [SMALL_STATE(157)] = 1794, + [SMALL_STATE(158)] = 1861, + [SMALL_STATE(159)] = 1928, + [SMALL_STATE(160)] = 2000, + [SMALL_STATE(161)] = 2068, + [SMALL_STATE(162)] = 2136, + [SMALL_STATE(163)] = 2198, + [SMALL_STATE(164)] = 2302, + [SMALL_STATE(165)] = 2378, + [SMALL_STATE(166)] = 2479, + [SMALL_STATE(167)] = 2546, + [SMALL_STATE(168)] = 2647, + [SMALL_STATE(169)] = 2748, + [SMALL_STATE(170)] = 2849, + [SMALL_STATE(171)] = 2908, + [SMALL_STATE(172)] = 2976, + [SMALL_STATE(173)] = 3074, + [SMALL_STATE(174)] = 3136, + [SMALL_STATE(175)] = 3198, + [SMALL_STATE(176)] = 3293, + [SMALL_STATE(177)] = 3388, + [SMALL_STATE(178)] = 3483, + [SMALL_STATE(179)] = 3550, + [SMALL_STATE(180)] = 3645, + [SMALL_STATE(181)] = 3740, + [SMALL_STATE(182)] = 3835, + [SMALL_STATE(183)] = 3930, + [SMALL_STATE(184)] = 3991, + [SMALL_STATE(185)] = 4086, + [SMALL_STATE(186)] = 4181, + [SMALL_STATE(187)] = 4276, + [SMALL_STATE(188)] = 4371, + [SMALL_STATE(189)] = 4466, + [SMALL_STATE(190)] = 4561, + [SMALL_STATE(191)] = 4656, + [SMALL_STATE(192)] = 4751, + [SMALL_STATE(193)] = 4846, + [SMALL_STATE(194)] = 4941, + [SMALL_STATE(195)] = 5036, + [SMALL_STATE(196)] = 5131, + [SMALL_STATE(197)] = 5191, + [SMALL_STATE(198)] = 5251, + [SMALL_STATE(199)] = 5343, + [SMALL_STATE(200)] = 5435, + [SMALL_STATE(201)] = 5527, + [SMALL_STATE(202)] = 5619, + [SMALL_STATE(203)] = 5711, + [SMALL_STATE(204)] = 5767, + [SMALL_STATE(205)] = 5859, + [SMALL_STATE(206)] = 5951, + [SMALL_STATE(207)] = 6043, + [SMALL_STATE(208)] = 6135, + [SMALL_STATE(209)] = 6195, + [SMALL_STATE(210)] = 6251, + [SMALL_STATE(211)] = 6307, + [SMALL_STATE(212)] = 6399, + [SMALL_STATE(213)] = 6463, + [SMALL_STATE(214)] = 6555, + [SMALL_STATE(215)] = 6613, + [SMALL_STATE(216)] = 6705, + [SMALL_STATE(217)] = 6769, + [SMALL_STATE(218)] = 6824, + [SMALL_STATE(219)] = 6879, + [SMALL_STATE(220)] = 6940, + [SMALL_STATE(221)] = 6994, + [SMALL_STATE(222)] = 7052, + [SMALL_STATE(223)] = 7106, + [SMALL_STATE(224)] = 7160, + [SMALL_STATE(225)] = 7248, + [SMALL_STATE(226)] = 7302, + [SMALL_STATE(227)] = 7356, + [SMALL_STATE(228)] = 7410, + [SMALL_STATE(229)] = 7464, + [SMALL_STATE(230)] = 7518, + [SMALL_STATE(231)] = 7576, + [SMALL_STATE(232)] = 7630, + [SMALL_STATE(233)] = 7684, + [SMALL_STATE(234)] = 7738, + [SMALL_STATE(235)] = 7826, + [SMALL_STATE(236)] = 7880, + [SMALL_STATE(237)] = 7934, + [SMALL_STATE(238)] = 7988, + [SMALL_STATE(239)] = 8042, + [SMALL_STATE(240)] = 8096, + [SMALL_STATE(241)] = 8150, + [SMALL_STATE(242)] = 8204, + [SMALL_STATE(243)] = 8258, + [SMALL_STATE(244)] = 8312, + [SMALL_STATE(245)] = 8366, + [SMALL_STATE(246)] = 8420, + [SMALL_STATE(247)] = 8474, + [SMALL_STATE(248)] = 8528, + [SMALL_STATE(249)] = 8582, + [SMALL_STATE(250)] = 8636, + [SMALL_STATE(251)] = 8690, + [SMALL_STATE(252)] = 8744, + [SMALL_STATE(253)] = 8798, + [SMALL_STATE(254)] = 8852, + [SMALL_STATE(255)] = 8906, + [SMALL_STATE(256)] = 8960, + [SMALL_STATE(257)] = 9014, + [SMALL_STATE(258)] = 9076, + [SMALL_STATE(259)] = 9130, + [SMALL_STATE(260)] = 9184, + [SMALL_STATE(261)] = 9238, + [SMALL_STATE(262)] = 9292, + [SMALL_STATE(263)] = 9346, + [SMALL_STATE(264)] = 9400, + [SMALL_STATE(265)] = 9457, + [SMALL_STATE(266)] = 9507, + [SMALL_STATE(267)] = 9557, + [SMALL_STATE(268)] = 9613, + [SMALL_STATE(269)] = 9669, + [SMALL_STATE(270)] = 9722, + [SMALL_STATE(271)] = 9772, + [SMALL_STATE(272)] = 9818, + [SMALL_STATE(273)] = 9870, + [SMALL_STATE(274)] = 9923, + [SMALL_STATE(275)] = 9972, + [SMALL_STATE(276)] = 10019, + [SMALL_STATE(277)] = 10068, + [SMALL_STATE(278)] = 10117, + [SMALL_STATE(279)] = 10161, + [SMALL_STATE(280)] = 10205, + [SMALL_STATE(281)] = 10249, + [SMALL_STATE(282)] = 10295, + [SMALL_STATE(283)] = 10339, + [SMALL_STATE(284)] = 10383, + [SMALL_STATE(285)] = 10426, + [SMALL_STATE(286)] = 10469, + [SMALL_STATE(287)] = 10512, + [SMALL_STATE(288)] = 10555, + [SMALL_STATE(289)] = 10600, + [SMALL_STATE(290)] = 10643, + [SMALL_STATE(291)] = 10686, + [SMALL_STATE(292)] = 10737, + [SMALL_STATE(293)] = 10780, + [SMALL_STATE(294)] = 10823, + [SMALL_STATE(295)] = 10866, + [SMALL_STATE(296)] = 10909, + [SMALL_STATE(297)] = 10952, + [SMALL_STATE(298)] = 10995, + [SMALL_STATE(299)] = 11038, + [SMALL_STATE(300)] = 11081, + [SMALL_STATE(301)] = 11124, + [SMALL_STATE(302)] = 11167, + [SMALL_STATE(303)] = 11210, + [SMALL_STATE(304)] = 11253, + [SMALL_STATE(305)] = 11296, + [SMALL_STATE(306)] = 11339, + [SMALL_STATE(307)] = 11382, + [SMALL_STATE(308)] = 11433, + [SMALL_STATE(309)] = 11476, + [SMALL_STATE(310)] = 11519, + [SMALL_STATE(311)] = 11562, + [SMALL_STATE(312)] = 11605, + [SMALL_STATE(313)] = 11648, + [SMALL_STATE(314)] = 11691, + [SMALL_STATE(315)] = 11734, + [SMALL_STATE(316)] = 11781, + [SMALL_STATE(317)] = 11824, + [SMALL_STATE(318)] = 11867, + [SMALL_STATE(319)] = 11910, + [SMALL_STATE(320)] = 11953, + [SMALL_STATE(321)] = 11996, + [SMALL_STATE(322)] = 12039, + [SMALL_STATE(323)] = 12082, + [SMALL_STATE(324)] = 12125, + [SMALL_STATE(325)] = 12168, + [SMALL_STATE(326)] = 12208, + [SMALL_STATE(327)] = 12248, + [SMALL_STATE(328)] = 12288, + [SMALL_STATE(329)] = 12328, + [SMALL_STATE(330)] = 12368, + [SMALL_STATE(331)] = 12408, + [SMALL_STATE(332)] = 12448, + [SMALL_STATE(333)] = 12488, + [SMALL_STATE(334)] = 12528, + [SMALL_STATE(335)] = 12568, + [SMALL_STATE(336)] = 12610, + [SMALL_STATE(337)] = 12650, + [SMALL_STATE(338)] = 12690, + [SMALL_STATE(339)] = 12730, + [SMALL_STATE(340)] = 12770, + [SMALL_STATE(341)] = 12812, + [SMALL_STATE(342)] = 12852, + [SMALL_STATE(343)] = 12892, + [SMALL_STATE(344)] = 12932, + [SMALL_STATE(345)] = 12972, + [SMALL_STATE(346)] = 13012, + [SMALL_STATE(347)] = 13052, + [SMALL_STATE(348)] = 13092, + [SMALL_STATE(349)] = 13132, + [SMALL_STATE(350)] = 13173, + [SMALL_STATE(351)] = 13218, + [SMALL_STATE(352)] = 13257, + [SMALL_STATE(353)] = 13296, + [SMALL_STATE(354)] = 13335, + [SMALL_STATE(355)] = 13374, + [SMALL_STATE(356)] = 13413, + [SMALL_STATE(357)] = 13458, + [SMALL_STATE(358)] = 13497, + [SMALL_STATE(359)] = 13539, + [SMALL_STATE(360)] = 13577, + [SMALL_STATE(361)] = 13612, + [SMALL_STATE(362)] = 13647, + [SMALL_STATE(363)] = 13685, + [SMALL_STATE(364)] = 13745, + [SMALL_STATE(365)] = 13778, + [SMALL_STATE(366)] = 13835, + [SMALL_STATE(367)] = 13892, + [SMALL_STATE(368)] = 13923, + [SMALL_STATE(369)] = 13952, + [SMALL_STATE(370)] = 13983, + [SMALL_STATE(371)] = 14012, + [SMALL_STATE(372)] = 14042, + [SMALL_STATE(373)] = 14090, + [SMALL_STATE(374)] = 14120, + [SMALL_STATE(375)] = 14149, + [SMALL_STATE(376)] = 14178, + [SMALL_STATE(377)] = 14208, + [SMALL_STATE(378)] = 14248, + [SMALL_STATE(379)] = 14288, + [SMALL_STATE(380)] = 14318, + [SMALL_STATE(381)] = 14342, + [SMALL_STATE(382)] = 14367, + [SMALL_STATE(383)] = 14394, + [SMALL_STATE(384)] = 14421, + [SMALL_STATE(385)] = 14446, + [SMALL_STATE(386)] = 14470, + [SMALL_STATE(387)] = 14494, + [SMALL_STATE(388)] = 14517, + [SMALL_STATE(389)] = 14540, + [SMALL_STATE(390)] = 14559, + [SMALL_STATE(391)] = 14578, + [SMALL_STATE(392)] = 14601, + [SMALL_STATE(393)] = 14620, + [SMALL_STATE(394)] = 14643, + [SMALL_STATE(395)] = 14666, + [SMALL_STATE(396)] = 14684, + [SMALL_STATE(397)] = 14702, + [SMALL_STATE(398)] = 14724, + [SMALL_STATE(399)] = 14744, + [SMALL_STATE(400)] = 14764, + [SMALL_STATE(401)] = 14784, + [SMALL_STATE(402)] = 14806, + [SMALL_STATE(403)] = 14826, + [SMALL_STATE(404)] = 14847, + [SMALL_STATE(405)] = 14868, + [SMALL_STATE(406)] = 14901, + [SMALL_STATE(407)] = 14922, + [SMALL_STATE(408)] = 14945, + [SMALL_STATE(409)] = 14966, + [SMALL_STATE(410)] = 14996, + [SMALL_STATE(411)] = 15022, + [SMALL_STATE(412)] = 15048, + [SMALL_STATE(413)] = 15078, + [SMALL_STATE(414)] = 15096, + [SMALL_STATE(415)] = 15114, + [SMALL_STATE(416)] = 15144, + [SMALL_STATE(417)] = 15164, + [SMALL_STATE(418)] = 15194, + [SMALL_STATE(419)] = 15211, + [SMALL_STATE(420)] = 15228, + [SMALL_STATE(421)] = 15245, + [SMALL_STATE(422)] = 15262, + [SMALL_STATE(423)] = 15279, + [SMALL_STATE(424)] = 15298, + [SMALL_STATE(425)] = 15315, + [SMALL_STATE(426)] = 15332, + [SMALL_STATE(427)] = 15349, + [SMALL_STATE(428)] = 15368, + [SMALL_STATE(429)] = 15385, + [SMALL_STATE(430)] = 15402, + [SMALL_STATE(431)] = 15419, + [SMALL_STATE(432)] = 15436, + [SMALL_STATE(433)] = 15453, + [SMALL_STATE(434)] = 15470, + [SMALL_STATE(435)] = 15489, + [SMALL_STATE(436)] = 15506, + [SMALL_STATE(437)] = 15525, + [SMALL_STATE(438)] = 15542, + [SMALL_STATE(439)] = 15559, + [SMALL_STATE(440)] = 15576, + [SMALL_STATE(441)] = 15593, + [SMALL_STATE(442)] = 15610, + [SMALL_STATE(443)] = 15627, + [SMALL_STATE(444)] = 15644, + [SMALL_STATE(445)] = 15661, + [SMALL_STATE(446)] = 15678, + [SMALL_STATE(447)] = 15695, + [SMALL_STATE(448)] = 15712, + [SMALL_STATE(449)] = 15729, + [SMALL_STATE(450)] = 15746, + [SMALL_STATE(451)] = 15763, + [SMALL_STATE(452)] = 15780, + [SMALL_STATE(453)] = 15797, + [SMALL_STATE(454)] = 15814, + [SMALL_STATE(455)] = 15831, + [SMALL_STATE(456)] = 15848, + [SMALL_STATE(457)] = 15865, + [SMALL_STATE(458)] = 15882, + [SMALL_STATE(459)] = 15899, + [SMALL_STATE(460)] = 15917, + [SMALL_STATE(461)] = 15945, + [SMALL_STATE(462)] = 15961, + [SMALL_STATE(463)] = 15989, + [SMALL_STATE(464)] = 16015, + [SMALL_STATE(465)] = 16041, + [SMALL_STATE(466)] = 16066, + [SMALL_STATE(467)] = 16089, + [SMALL_STATE(468)] = 16112, + [SMALL_STATE(469)] = 16134, + [SMALL_STATE(470)] = 16146, + [SMALL_STATE(471)] = 16168, + [SMALL_STATE(472)] = 16188, + [SMALL_STATE(473)] = 16210, + [SMALL_STATE(474)] = 16232, + [SMALL_STATE(475)] = 16254, + [SMALL_STATE(476)] = 16274, + [SMALL_STATE(477)] = 16292, + [SMALL_STATE(478)] = 16314, + [SMALL_STATE(479)] = 16328, + [SMALL_STATE(480)] = 16340, + [SMALL_STATE(481)] = 16352, + [SMALL_STATE(482)] = 16371, + [SMALL_STATE(483)] = 16384, + [SMALL_STATE(484)] = 16399, + [SMALL_STATE(485)] = 16412, + [SMALL_STATE(486)] = 16429, + [SMALL_STATE(487)] = 16442, + [SMALL_STATE(488)] = 16457, + [SMALL_STATE(489)] = 16476, + [SMALL_STATE(490)] = 16489, + [SMALL_STATE(491)] = 16502, + [SMALL_STATE(492)] = 16515, + [SMALL_STATE(493)] = 16528, + [SMALL_STATE(494)] = 16544, + [SMALL_STATE(495)] = 16560, + [SMALL_STATE(496)] = 16576, + [SMALL_STATE(497)] = 16592, + [SMALL_STATE(498)] = 16608, + [SMALL_STATE(499)] = 16622, + [SMALL_STATE(500)] = 16638, + [SMALL_STATE(501)] = 16654, + [SMALL_STATE(502)] = 16670, + [SMALL_STATE(503)] = 16686, + [SMALL_STATE(504)] = 16702, + [SMALL_STATE(505)] = 16718, + [SMALL_STATE(506)] = 16732, + [SMALL_STATE(507)] = 16748, + [SMALL_STATE(508)] = 16764, + [SMALL_STATE(509)] = 16780, + [SMALL_STATE(510)] = 16796, + [SMALL_STATE(511)] = 16812, + [SMALL_STATE(512)] = 16826, + [SMALL_STATE(513)] = 16842, + [SMALL_STATE(514)] = 16858, + [SMALL_STATE(515)] = 16874, + [SMALL_STATE(516)] = 16890, + [SMALL_STATE(517)] = 16906, + [SMALL_STATE(518)] = 16919, + [SMALL_STATE(519)] = 16928, + [SMALL_STATE(520)] = 16939, + [SMALL_STATE(521)] = 16952, + [SMALL_STATE(522)] = 16965, + [SMALL_STATE(523)] = 16976, + [SMALL_STATE(524)] = 16987, + [SMALL_STATE(525)] = 17000, + [SMALL_STATE(526)] = 17013, + [SMALL_STATE(527)] = 17026, + [SMALL_STATE(528)] = 17035, + [SMALL_STATE(529)] = 17044, + [SMALL_STATE(530)] = 17055, + [SMALL_STATE(531)] = 17068, + [SMALL_STATE(532)] = 17081, + [SMALL_STATE(533)] = 17090, + [SMALL_STATE(534)] = 17103, + [SMALL_STATE(535)] = 17116, + [SMALL_STATE(536)] = 17129, + [SMALL_STATE(537)] = 17140, + [SMALL_STATE(538)] = 17153, + [SMALL_STATE(539)] = 17162, + [SMALL_STATE(540)] = 17171, + [SMALL_STATE(541)] = 17180, + [SMALL_STATE(542)] = 17193, + [SMALL_STATE(543)] = 17204, + [SMALL_STATE(544)] = 17215, + [SMALL_STATE(545)] = 17228, + [SMALL_STATE(546)] = 17241, + [SMALL_STATE(547)] = 17252, + [SMALL_STATE(548)] = 17265, + [SMALL_STATE(549)] = 17278, + [SMALL_STATE(550)] = 17291, + [SMALL_STATE(551)] = 17304, + [SMALL_STATE(552)] = 17317, + [SMALL_STATE(553)] = 17330, + [SMALL_STATE(554)] = 17339, + [SMALL_STATE(555)] = 17349, + [SMALL_STATE(556)] = 17359, + [SMALL_STATE(557)] = 17367, + [SMALL_STATE(558)] = 17377, + [SMALL_STATE(559)] = 17387, + [SMALL_STATE(560)] = 17397, + [SMALL_STATE(561)] = 17405, + [SMALL_STATE(562)] = 17415, + [SMALL_STATE(563)] = 17423, + [SMALL_STATE(564)] = 17433, + [SMALL_STATE(565)] = 17443, + [SMALL_STATE(566)] = 17451, + [SMALL_STATE(567)] = 17461, + [SMALL_STATE(568)] = 17471, + [SMALL_STATE(569)] = 17481, + [SMALL_STATE(570)] = 17491, + [SMALL_STATE(571)] = 17501, + [SMALL_STATE(572)] = 17511, + [SMALL_STATE(573)] = 17521, + [SMALL_STATE(574)] = 17531, + [SMALL_STATE(575)] = 17541, + [SMALL_STATE(576)] = 17551, + [SMALL_STATE(577)] = 17561, + [SMALL_STATE(578)] = 17571, + [SMALL_STATE(579)] = 17579, + [SMALL_STATE(580)] = 17587, + [SMALL_STATE(581)] = 17597, + [SMALL_STATE(582)] = 17607, + [SMALL_STATE(583)] = 17615, + [SMALL_STATE(584)] = 17625, + [SMALL_STATE(585)] = 17633, + [SMALL_STATE(586)] = 17641, + [SMALL_STATE(587)] = 17651, + [SMALL_STATE(588)] = 17661, + [SMALL_STATE(589)] = 17669, + [SMALL_STATE(590)] = 17679, + [SMALL_STATE(591)] = 17689, + [SMALL_STATE(592)] = 17697, + [SMALL_STATE(593)] = 17707, + [SMALL_STATE(594)] = 17715, + [SMALL_STATE(595)] = 17725, + [SMALL_STATE(596)] = 17735, + [SMALL_STATE(597)] = 17745, + [SMALL_STATE(598)] = 17755, + [SMALL_STATE(599)] = 17763, + [SMALL_STATE(600)] = 17773, + [SMALL_STATE(601)] = 17783, + [SMALL_STATE(602)] = 17793, + [SMALL_STATE(603)] = 17803, + [SMALL_STATE(604)] = 17811, + [SMALL_STATE(605)] = 17821, + [SMALL_STATE(606)] = 17831, + [SMALL_STATE(607)] = 17841, + [SMALL_STATE(608)] = 17849, + [SMALL_STATE(609)] = 17857, + [SMALL_STATE(610)] = 17867, + [SMALL_STATE(611)] = 17877, + [SMALL_STATE(612)] = 17887, + [SMALL_STATE(613)] = 17895, + [SMALL_STATE(614)] = 17905, + [SMALL_STATE(615)] = 17915, + [SMALL_STATE(616)] = 17925, + [SMALL_STATE(617)] = 17935, + [SMALL_STATE(618)] = 17945, + [SMALL_STATE(619)] = 17955, + [SMALL_STATE(620)] = 17965, + [SMALL_STATE(621)] = 17975, + [SMALL_STATE(622)] = 17985, + [SMALL_STATE(623)] = 17995, + [SMALL_STATE(624)] = 18005, + [SMALL_STATE(625)] = 18013, + [SMALL_STATE(626)] = 18023, + [SMALL_STATE(627)] = 18033, + [SMALL_STATE(628)] = 18043, + [SMALL_STATE(629)] = 18053, + [SMALL_STATE(630)] = 18063, + [SMALL_STATE(631)] = 18073, + [SMALL_STATE(632)] = 18083, + [SMALL_STATE(633)] = 18093, + [SMALL_STATE(634)] = 18103, + [SMALL_STATE(635)] = 18113, + [SMALL_STATE(636)] = 18123, + [SMALL_STATE(637)] = 18133, + [SMALL_STATE(638)] = 18143, + [SMALL_STATE(639)] = 18153, + [SMALL_STATE(640)] = 18163, + [SMALL_STATE(641)] = 18170, + [SMALL_STATE(642)] = 18177, + [SMALL_STATE(643)] = 18184, + [SMALL_STATE(644)] = 18191, + [SMALL_STATE(645)] = 18198, + [SMALL_STATE(646)] = 18205, + [SMALL_STATE(647)] = 18212, + [SMALL_STATE(648)] = 18219, + [SMALL_STATE(649)] = 18226, + [SMALL_STATE(650)] = 18233, + [SMALL_STATE(651)] = 18240, + [SMALL_STATE(652)] = 18247, + [SMALL_STATE(653)] = 18254, + [SMALL_STATE(654)] = 18261, + [SMALL_STATE(655)] = 18268, + [SMALL_STATE(656)] = 18275, + [SMALL_STATE(657)] = 18282, + [SMALL_STATE(658)] = 18289, + [SMALL_STATE(659)] = 18296, + [SMALL_STATE(660)] = 18303, + [SMALL_STATE(661)] = 18310, + [SMALL_STATE(662)] = 18317, + [SMALL_STATE(663)] = 18324, + [SMALL_STATE(664)] = 18331, + [SMALL_STATE(665)] = 18338, + [SMALL_STATE(666)] = 18345, + [SMALL_STATE(667)] = 18352, + [SMALL_STATE(668)] = 18359, + [SMALL_STATE(669)] = 18366, + [SMALL_STATE(670)] = 18373, + [SMALL_STATE(671)] = 18380, + [SMALL_STATE(672)] = 18387, + [SMALL_STATE(673)] = 18394, + [SMALL_STATE(674)] = 18401, + [SMALL_STATE(675)] = 18408, + [SMALL_STATE(676)] = 18415, + [SMALL_STATE(677)] = 18422, + [SMALL_STATE(678)] = 18429, + [SMALL_STATE(679)] = 18436, + [SMALL_STATE(680)] = 18443, + [SMALL_STATE(681)] = 18450, + [SMALL_STATE(682)] = 18457, + [SMALL_STATE(683)] = 18464, + [SMALL_STATE(684)] = 18471, + [SMALL_STATE(685)] = 18478, + [SMALL_STATE(686)] = 18485, + [SMALL_STATE(687)] = 18492, + [SMALL_STATE(688)] = 18499, + [SMALL_STATE(689)] = 18506, + [SMALL_STATE(690)] = 18513, + [SMALL_STATE(691)] = 18520, + [SMALL_STATE(692)] = 18527, + [SMALL_STATE(693)] = 18534, + [SMALL_STATE(694)] = 18541, + [SMALL_STATE(695)] = 18548, + [SMALL_STATE(696)] = 18555, + [SMALL_STATE(697)] = 18562, + [SMALL_STATE(698)] = 18569, + [SMALL_STATE(699)] = 18576, + [SMALL_STATE(700)] = 18583, + [SMALL_STATE(701)] = 18590, + [SMALL_STATE(702)] = 18597, + [SMALL_STATE(703)] = 18604, + [SMALL_STATE(704)] = 18611, + [SMALL_STATE(705)] = 18618, + [SMALL_STATE(706)] = 18625, + [SMALL_STATE(707)] = 18632, + [SMALL_STATE(708)] = 18639, + [SMALL_STATE(709)] = 18646, + [SMALL_STATE(710)] = 18653, + [SMALL_STATE(711)] = 18660, + [SMALL_STATE(712)] = 18667, + [SMALL_STATE(713)] = 18674, + [SMALL_STATE(714)] = 18681, + [SMALL_STATE(715)] = 18688, + [SMALL_STATE(716)] = 18695, + [SMALL_STATE(717)] = 18702, + [SMALL_STATE(718)] = 18709, + [SMALL_STATE(719)] = 18716, + [SMALL_STATE(720)] = 18723, + [SMALL_STATE(721)] = 18730, + [SMALL_STATE(722)] = 18737, + [SMALL_STATE(723)] = 18744, + [SMALL_STATE(724)] = 18751, + [SMALL_STATE(725)] = 18758, + [SMALL_STATE(726)] = 18765, + [SMALL_STATE(727)] = 18772, + [SMALL_STATE(728)] = 18779, + [SMALL_STATE(729)] = 18786, + [SMALL_STATE(730)] = 18793, + [SMALL_STATE(731)] = 18800, + [SMALL_STATE(732)] = 18807, + [SMALL_STATE(733)] = 18814, + [SMALL_STATE(734)] = 18821, + [SMALL_STATE(735)] = 18828, + [SMALL_STATE(736)] = 18835, + [SMALL_STATE(737)] = 18842, + [SMALL_STATE(738)] = 18849, + [SMALL_STATE(739)] = 18856, + [SMALL_STATE(740)] = 18863, + [SMALL_STATE(741)] = 18870, + [SMALL_STATE(742)] = 18877, + [SMALL_STATE(743)] = 18884, + [SMALL_STATE(744)] = 18891, + [SMALL_STATE(745)] = 18898, + [SMALL_STATE(746)] = 18905, + [SMALL_STATE(747)] = 18912, + [SMALL_STATE(748)] = 18919, + [SMALL_STATE(749)] = 18926, + [SMALL_STATE(750)] = 18933, + [SMALL_STATE(751)] = 18940, + [SMALL_STATE(752)] = 18947, + [SMALL_STATE(753)] = 18954, + [SMALL_STATE(754)] = 18961, + [SMALL_STATE(755)] = 18968, + [SMALL_STATE(756)] = 18975, + [SMALL_STATE(757)] = 18982, + [SMALL_STATE(758)] = 18989, + [SMALL_STATE(759)] = 18996, + [SMALL_STATE(760)] = 19003, + [SMALL_STATE(761)] = 19010, + [SMALL_STATE(762)] = 19017, + [SMALL_STATE(763)] = 19024, + [SMALL_STATE(764)] = 19031, + [SMALL_STATE(765)] = 19038, + [SMALL_STATE(766)] = 19045, + [SMALL_STATE(767)] = 19052, + [SMALL_STATE(768)] = 19059, + [SMALL_STATE(769)] = 19066, + [SMALL_STATE(770)] = 19073, + [SMALL_STATE(771)] = 19080, + [SMALL_STATE(772)] = 19087, + [SMALL_STATE(773)] = 19094, + [SMALL_STATE(774)] = 19101, + [SMALL_STATE(775)] = 19108, + [SMALL_STATE(776)] = 19115, + [SMALL_STATE(777)] = 19122, + [SMALL_STATE(778)] = 19129, + [SMALL_STATE(779)] = 19136, + [SMALL_STATE(780)] = 19143, + [SMALL_STATE(781)] = 19150, + [SMALL_STATE(782)] = 19157, + [SMALL_STATE(783)] = 19164, + [SMALL_STATE(784)] = 19171, + [SMALL_STATE(785)] = 19178, + [SMALL_STATE(786)] = 19185, + [SMALL_STATE(787)] = 19192, + [SMALL_STATE(788)] = 19199, + [SMALL_STATE(789)] = 19206, + [SMALL_STATE(790)] = 19213, + [SMALL_STATE(791)] = 19220, + [SMALL_STATE(792)] = 19227, + [SMALL_STATE(793)] = 19234, + [SMALL_STATE(794)] = 19241, + [SMALL_STATE(795)] = 19248, + [SMALL_STATE(796)] = 19255, + [SMALL_STATE(797)] = 19262, + [SMALL_STATE(798)] = 19269, + [SMALL_STATE(799)] = 19276, + [SMALL_STATE(800)] = 19283, + [SMALL_STATE(801)] = 19290, + [SMALL_STATE(802)] = 19297, + [SMALL_STATE(803)] = 19304, + [SMALL_STATE(804)] = 19311, + [SMALL_STATE(805)] = 19318, + [SMALL_STATE(806)] = 19325, + [SMALL_STATE(807)] = 19332, + [SMALL_STATE(808)] = 19339, + [SMALL_STATE(809)] = 19346, + [SMALL_STATE(810)] = 19353, + [SMALL_STATE(811)] = 19360, + [SMALL_STATE(812)] = 19367, + [SMALL_STATE(813)] = 19374, + [SMALL_STATE(814)] = 19381, + [SMALL_STATE(815)] = 19388, + [SMALL_STATE(816)] = 19395, + [SMALL_STATE(817)] = 19402, + [SMALL_STATE(818)] = 19409, + [SMALL_STATE(819)] = 19416, + [SMALL_STATE(820)] = 19423, + [SMALL_STATE(821)] = 19430, +}; + +static TSParseActionEntry ts_parse_actions[] = { + [0] = {.entry = {.count = 0, .reusable = false}}, + [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), + [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), + [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unit, 0), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(558), + [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(372), + [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(472), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(809), + [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(501), + [17] = {.entry = {.count = 1, .reusable = true}}, SHIFT(521), + [19] = {.entry = {.count = 1, .reusable = true}}, SHIFT(583), + [21] = {.entry = {.count = 1, .reusable = true}}, SHIFT(479), + [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(469), + [25] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_control_statement, 1), + [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), + [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(507), + [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(707), + [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26), + [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(132), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(295), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(663), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(137), + [43] = {.entry = {.count = 1, .reusable = false}}, SHIFT(664), + [45] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [47] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), + [49] = {.entry = {.count = 1, .reusable = true}}, SHIFT(408), + [51] = {.entry = {.count = 1, .reusable = true}}, SHIFT(487), + [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(157), + [55] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [57] = {.entry = {.count = 1, .reusable = true}}, SHIFT(488), + [59] = {.entry = {.count = 1, .reusable = true}}, SHIFT(463), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(674), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(675), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(689), + [67] = {.entry = {.count = 1, .reusable = false}}, SHIFT(678), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(679), + [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(542), + [73] = {.entry = {.count = 1, .reusable = false}}, SHIFT(681), + [75] = {.entry = {.count = 1, .reusable = false}}, SHIFT(682), + [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(685), + [79] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_control_statement, 1), + [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(597), + [85] = {.entry = {.count = 1, .reusable = false}}, SHIFT(811), + [87] = {.entry = {.count = 1, .reusable = false}}, SHIFT(692), + [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(721), + [91] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(407), + [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(214), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(494), + [101] = {.entry = {.count = 1, .reusable = true}}, SHIFT(135), + [103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(523), + [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(592), + [107] = {.entry = {.count = 1, .reusable = false}}, SHIFT(814), + [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), + [111] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3), + [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(496), + [115] = {.entry = {.count = 1, .reusable = true}}, SHIFT(130), + [117] = {.entry = {.count = 1, .reusable = false}}, SHIFT(546), + [119] = {.entry = {.count = 1, .reusable = false}}, SHIFT(596), + [121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(803), + [123] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), + [125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(4), + [127] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_cases, 2), + [129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(125), + [131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(514), + [133] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(522), + [137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(601), + [139] = {.entry = {.count = 1, .reusable = false}}, SHIFT(712), + [141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), + [143] = {.entry = {.count = 1, .reusable = false}}, SHIFT(6), + [145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_append_values, 2), + [147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(76), + [149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(299), + [151] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_items, 4), + [153] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_options, 2), + [155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(292), + [157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_members, 2), + [159] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 2), + [161] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 2), + [163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(263), + [165] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [167] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [169] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), + [171] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [173] = {.entry = {.count = 1, .reusable = true}}, SHIFT(283), + [175] = {.entry = {.count = 1, .reusable = true}}, SHIFT(223), + [177] = {.entry = {.count = 1, .reusable = true}}, SHIFT(246), + [179] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex_digits, 1), + [181] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_hex_digits, 1), + [183] = {.entry = {.count = 1, .reusable = true}}, SHIFT(107), + [185] = {.entry = {.count = 1, .reusable = false}}, SHIFT(107), + [187] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_hex_digits_repeat1, 2), + [189] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_hex_digits_repeat1, 2), + [191] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_hex_digits_repeat1, 2), SHIFT_REPEAT(107), + [194] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_hex_digits_repeat1, 2), SHIFT_REPEAT(107), + [197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(124), + [199] = {.entry = {.count = 1, .reusable = true}}, SHIFT(199), + [201] = {.entry = {.count = 1, .reusable = false}}, SHIFT(640), + [203] = {.entry = {.count = 1, .reusable = false}}, SHIFT(680), + [205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(275), + [207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(123), + [209] = {.entry = {.count = 1, .reusable = true}}, SHIFT(202), + [211] = {.entry = {.count = 1, .reusable = false}}, SHIFT(653), + [213] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_hex_digit, 1), + [215] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_hex_digit, 1), + [217] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_decimal_digits_repeat1, 2), + [219] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_decimal_digits_repeat1, 2), + [221] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_decimal_digits_repeat1, 2), SHIFT_REPEAT(118), + [224] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decimal_digits, 1), + [226] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decimal_digits, 1), + [228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(118), + [230] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decimal_digit, 1), + [232] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_decimal_digit, 1), + [234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(126), + [236] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126), + [238] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_hex_digits_repeat1, 2), SHIFT_REPEAT(126), + [241] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_hex_digits_repeat1, 2), SHIFT_REPEAT(126), + [244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(200), + [246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(215), + [248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(138), + [252] = {.entry = {.count = 1, .reusable = false}}, SHIFT(249), + [254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(793), + [256] = {.entry = {.count = 1, .reusable = false}}, SHIFT(794), + [258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), + [260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(361), + [262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(404), + [264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(483), + [266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(118), + [268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(481), + [270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(464), + [272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(795), + [274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(820), + [276] = {.entry = {.count = 1, .reusable = false}}, SHIFT(796), + [278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(797), + [280] = {.entry = {.count = 1, .reusable = false}}, SHIFT(798), + [282] = {.entry = {.count = 1, .reusable = false}}, SHIFT(813), + [284] = {.entry = {.count = 1, .reusable = false}}, SHIFT(746), + [286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(799), + [288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(800), + [290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(146), + [292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(88), + [294] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_octal_digits_repeat1, 2), + [296] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_octal_digits_repeat1, 2), + [298] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_octal_digits_repeat1, 2), SHIFT_REPEAT(139), + [301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(133), + [303] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [305] = {.entry = {.count = 1, .reusable = false}}, SHIFT(461), + [307] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal_digits, 1), + [309] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_octal_digits, 1), + [311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(139), + [313] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_octal_digit, 1), + [315] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_octal_digit, 1), + [317] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer_constant, 1), + [319] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_integer_constant, 1), + [321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(259), + [323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(253), + [325] = {.entry = {.count = 1, .reusable = false}}, SHIFT(394), + [327] = {.entry = {.count = 1, .reusable = false}}, SHIFT(259), + [329] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_integer_constant, 1), SHIFT(393), + [332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(134), + [334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(131), + [336] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer_constant, 2), + [338] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_integer_constant, 2), + [340] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_binary_digits_repeat1, 2), + [342] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_binary_digits_repeat1, 2), + [344] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_binary_digits_repeat1, 2), SHIFT_REPEAT(158), + [347] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_decimal_digits_repeat1, 2), SHIFT_REPEAT(157), + [350] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_digits, 1), + [352] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_digits, 1), + [354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [356] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exponent, 2), + [358] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_exponent, 2), + [360] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binary_digit, 1), + [362] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binary_digit, 1), + [364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [366] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_octal_digits_repeat1, 2), SHIFT_REPEAT(162), + [369] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_cases, 2), + [371] = {.entry = {.count = 1, .reusable = false}}, SHIFT(224), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(169), + [375] = {.entry = {.count = 1, .reusable = false}}, SHIFT(620), + [377] = {.entry = {.count = 1, .reusable = false}}, SHIFT(430), + [379] = {.entry = {.count = 1, .reusable = false}}, SHIFT(413), + [381] = {.entry = {.count = 1, .reusable = false}}, SHIFT(421), + [383] = {.entry = {.count = 1, .reusable = false}}, SHIFT(383), + [385] = {.entry = {.count = 1, .reusable = true}}, SHIFT(189), + [387] = {.entry = {.count = 1, .reusable = false}}, SHIFT(644), + [389] = {.entry = {.count = 1, .reusable = false}}, SHIFT(642), + [391] = {.entry = {.count = 1, .reusable = false}}, SHIFT(641), + [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(105), + [395] = {.entry = {.count = 1, .reusable = true}}, SHIFT(632), + [397] = {.entry = {.count = 1, .reusable = false}}, SHIFT(505), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(286), + [401] = {.entry = {.count = 1, .reusable = true}}, SHIFT(289), + [403] = {.entry = {.count = 1, .reusable = false}}, SHIFT(391), + [405] = {.entry = {.count = 1, .reusable = false}}, SHIFT(286), + [407] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_integer_constant, 1), SHIFT(387), + [410] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_types, 4), + [412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(211), + [414] = {.entry = {.count = 1, .reusable = false}}, SHIFT(388), + [416] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_floating_constant, 3), + [418] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_floating_constant, 3), + [420] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment_op, 1), + [422] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment_op, 1), + [424] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_binary_digits_repeat1, 2), SHIFT_REPEAT(210), + [427] = {.entry = {.count = 1, .reusable = true}}, SHIFT(210), + [429] = {.entry = {.count = 1, .reusable = false}}, SHIFT(234), + [431] = {.entry = {.count = 1, .reusable = true}}, SHIFT(167), + [433] = {.entry = {.count = 1, .reusable = false}}, SHIFT(638), + [435] = {.entry = {.count = 1, .reusable = false}}, SHIFT(329), + [437] = {.entry = {.count = 1, .reusable = false}}, SHIFT(328), + [439] = {.entry = {.count = 1, .reusable = false}}, SHIFT(346), + [441] = {.entry = {.count = 1, .reusable = false}}, SHIFT(382), + [443] = {.entry = {.count = 1, .reusable = true}}, SHIFT(207), + [445] = {.entry = {.count = 1, .reusable = false}}, SHIFT(643), + [447] = {.entry = {.count = 1, .reusable = false}}, SHIFT(790), + [449] = {.entry = {.count = 1, .reusable = false}}, SHIFT(791), + [451] = {.entry = {.count = 1, .reusable = true}}, SHIFT(106), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(590), + [455] = {.entry = {.count = 1, .reusable = false}}, SHIFT(324), + [457] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_floating_constant, 4), + [459] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_floating_constant, 4), + [461] = {.entry = {.count = 1, .reusable = true}}, SHIFT(93), + [463] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_plain_expression, 1), + [465] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_plain_expression, 1), + [467] = {.entry = {.count = 1, .reusable = true}}, SHIFT(677), + [469] = {.entry = {.count = 1, .reusable = true}}, SHIFT(462), + [471] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_constant_repeat1, 2), + [473] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_constant_repeat1, 2), + [475] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_constant_repeat1, 2), SHIFT_REPEAT(464), + [478] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string_constant, 1), + [480] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_constant, 1), + [482] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identifier, 3), + [484] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identifier, 3), + [486] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_object_selector, 1), + [488] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_object_selector, 1), + [490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(688), + [492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(460), + [494] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_identifier, 1), + [496] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_identifier, 1), + [498] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_identifier, 1), SHIFT(615), + [501] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_string_constant_repeat1, 3), + [503] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_constant_repeat1, 3), + [505] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_allocation_expression, 6), + [507] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_allocation_expression, 6), + [509] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_postfix_expression, 1), + [511] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_postfix_expression, 1), + [513] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 3), + [515] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 3), + [517] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slicing_expression, 4), + [519] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_slicing_expression, 4), + [521] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_call_expression, 4), + [523] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_call_expression, 4), + [525] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_offset_expression, 4), + [527] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_offset_expression, 4), + [529] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_length_expression, 4), + [531] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_length_expression, 4), + [533] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assertion_expression, 7), + [535] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assertion_expression, 7), + [537] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_access_expression, 3, .production_id = 7), + [539] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_field_access_expression, 3, .production_id = 7), + [541] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assertion_expression, 4), + [543] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assertion_expression, 4), + [545] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_allocation_expression, 7), + [547] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_allocation_expression, 7), + [549] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_indexing_expression, 4), + [551] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_indexing_expression, 4), + [553] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slicing_expression, 6), + [555] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_slicing_expression, 6), + [557] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_floating_constant, 5), + [559] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_floating_constant, 5), + [561] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rune_constant, 3), + [563] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_rune_constant, 3), + [565] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assertion_expression, 6), + [567] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assertion_expression, 6), + [569] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_allocation_expression, 4), + [571] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_allocation_expression, 4), + [573] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assertion_expression, 5), + [575] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assertion_expression, 5), + [577] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer_constant, 3), + [579] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_integer_constant, 3), + [581] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_literal, 3), + [583] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array_literal, 3), + [585] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slicing_expression, 5), + [587] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_slicing_expression, 5), + [589] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nested_expression, 3), + [591] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_nested_expression, 3), + [593] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_error_propagation, 2), + [595] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_error_propagation, 2), + [597] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constant, 1), + [599] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_constant, 1), + [601] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assertion_expression, 3), + [603] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assertion_expression, 3), + [605] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_floating_constant, 2), + [607] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_floating_constant, 2), + [609] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_floating_suffix, 1), + [611] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_floating_suffix, 1), + [613] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_nested_expression, 1), + [615] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_nested_expression, 1), + [617] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_measurement_expression, 1), + [619] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_measurement_expression, 1), + [621] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 1), + [623] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 1), + [625] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [627] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), + [629] = {.entry = {.count = 1, .reusable = false}}, SHIFT(378), + [631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(248), + [633] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_literal, 3), + [635] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_literal, 3), + [637] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer_suffix, 1), + [639] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_integer_suffix, 1), + [641] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_literal, 5), + [643] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_literal, 5), + [645] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_size_expression, 4), + [647] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_size_expression, 4), + [649] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_literal, 4), + [651] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_literal, 4), + [653] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_literal, 2), + [655] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_array_literal, 2), + [657] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, .production_id = 4), + [659] = {.entry = {.count = 1, .reusable = false}}, SHIFT(170), + [661] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 4), + [663] = {.entry = {.count = 1, .reusable = true}}, SHIFT(170), + [665] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unary_expression, 2, .production_id = 5), + [667] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unary_expression, 2, .production_id = 5), + [669] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_identifier, 1), SHIFT(635), + [672] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_string_constant_repeat1, 2), SHIFT_REPEAT(463), + [675] = {.entry = {.count = 1, .reusable = false}}, SHIFT(45), + [677] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [681] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), + [683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(311), + [685] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [687] = {.entry = {.count = 1, .reusable = false}}, SHIFT(377), + [689] = {.entry = {.count = 1, .reusable = true}}, SHIFT(637), + [691] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type, 2), + [693] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type, 2), + [695] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unwrapped_alias, 2), + [697] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_unwrapped_alias, 2), + [699] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_alias_type, 1), + [701] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_alias_type, 1), + [703] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer_type, 1), + [705] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_integer_type, 1), + [707] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_scalar_type, 1), + [709] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_scalar_type, 1), + [711] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__inner_type, 2), + [713] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__inner_type, 2), + [715] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_prototype, 4), + [717] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_prototype, 4), + [719] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 3), + [721] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 3), + [723] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pointer_type, 2), + [725] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pointer_type, 2), + [727] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_storage_class, 1), + [729] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_storage_class, 1), + [731] = {.entry = {.count = 1, .reusable = false}}, SHIFT(73), + [733] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_prototype, 3), + [735] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_prototype, 3), + [737] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_type, 3), + [739] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tuple_type, 3), + [741] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tagged_union_type, 3), + [743] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_tagged_union_type, 3), + [745] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pointer_type, 3), + [747] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pointer_type, 3), + [749] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type, 1), + [751] = {.entry = {.count = 1, .reusable = false}}, SHIFT(325), + [753] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_type, 1), + [755] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_type, 5), + [757] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_type, 5), + [759] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice_array_type, 4), + [761] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_slice_array_type, 4), + [763] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_union_type, 4), + [765] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_union_type, 4), + [767] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_slice_array_type, 3), + [769] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_slice_array_type, 3), + [771] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_type, 2), + [773] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_type, 2), + [775] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_floating_type, 1), + [777] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_floating_type, 1), + [779] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_type, 4), + [781] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_struct_type, 4), + [783] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_type, 4), + [785] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_enum_type, 4), + [787] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), + [789] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_multiplicative_expression, 1), + [791] = {.entry = {.count = 1, .reusable = true}}, SHIFT(184), + [793] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_multiplicative_expression, 1), + [795] = {.entry = {.count = 1, .reusable = true}}, SHIFT(179), + [797] = {.entry = {.count = 1, .reusable = true}}, SHIFT(182), + [799] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cast_expression, 1), + [801] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_cast_expression, 1), + [803] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cast_expression, 3, .production_id = 8), + [805] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_cast_expression, 3, .production_id = 8), + [807] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cast_expression, 3, .production_id = 9), + [809] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_cast_expression, 3, .production_id = 9), + [811] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_cast_expression, 3, .production_id = 10), + [813] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_cast_expression, 3, .production_id = 10), + [815] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_multiplicative_expression, 3), + [817] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_multiplicative_expression, 3), + [819] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_additive_expression, 1), + [821] = {.entry = {.count = 1, .reusable = true}}, SHIFT(127), + [823] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_additive_expression, 1), + [825] = {.entry = {.count = 1, .reusable = false}}, SHIFT(127), + [827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(122), + [829] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_additive_expression, 3), + [831] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_additive_expression, 3), + [833] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shift_expression, 3), + [835] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_shift_expression, 3), + [837] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unit, 1), + [839] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_shift_expression, 1), + [841] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_shift_expression, 1), + [843] = {.entry = {.count = 1, .reusable = true}}, SHIFT(121), + [845] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_declarations_repeat1, 2), + [847] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_declarations_repeat1, 2), SHIFT_REPEAT(372), + [850] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_declarations_repeat1, 2), SHIFT_REPEAT(472), + [853] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_declarations_repeat1, 2), SHIFT_REPEAT(809), + [856] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_declarations_repeat1, 2), SHIFT_REPEAT(501), + [859] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_declarations_repeat1, 2), SHIFT_REPEAT(521), + [862] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_declarations_repeat1, 2), SHIFT_REPEAT(583), + [865] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_declarations_repeat1, 2), SHIFT_REPEAT(479), + [868] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_declarations_repeat1, 2), SHIFT_REPEAT(469), + [871] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declarations, 1), + [873] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exclusive_or_expression, 1), + [875] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_exclusive_or_expression, 1), + [877] = {.entry = {.count = 1, .reusable = false}}, SHIFT(117), + [879] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_and_expression, 3), + [881] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_and_expression, 3), + [883] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_exclusive_or_expression, 3), + [885] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_exclusive_or_expression, 3), + [887] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_and_expression, 1), + [889] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_and_expression, 1), + [891] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_inclusive_or_expression, 3), + [893] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_inclusive_or_expression, 3), + [895] = {.entry = {.count = 1, .reusable = false}}, SHIFT(116), + [897] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_inclusive_or_expression, 1), + [899] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_inclusive_or_expression, 1), + [901] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comparison_expression, 1), + [903] = {.entry = {.count = 1, .reusable = false}}, SHIFT(113), + [905] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comparison_expression, 1), + [907] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comparison_expression, 3), + [909] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comparison_expression, 3), + [911] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_equality_expression, 3), + [913] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_equality_expression, 3), + [915] = {.entry = {.count = 1, .reusable = false}}, SHIFT(112), + [917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(112), + [919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(293), + [921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [923] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_equality_expression, 1), + [925] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_equality_expression, 1), + [927] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_imports, 1), + [929] = {.entry = {.count = 1, .reusable = true}}, SHIFT(547), + [931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(413), + [933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(520), + [935] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_imports_repeat1, 2), + [937] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_imports_repeat1, 2), SHIFT_REPEAT(558), + [940] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_logical_and_expression, 3), + [942] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_logical_and_expression, 3), + [944] = {.entry = {.count = 1, .reusable = true}}, SHIFT(111), + [946] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_logical_and_expression, 1), + [948] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_logical_and_expression, 1), + [950] = {.entry = {.count = 1, .reusable = true}}, SHIFT(602), + [952] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_use_statement, 5), + [954] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_use_statement, 7), + [956] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_use_statement, 3), + [958] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_declarations_repeat1, 3), + [960] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_logical_xor_expression, 3), + [962] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_logical_xor_expression, 3), + [964] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [966] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_logical_xor_expression, 1), + [968] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_logical_xor_expression, 1), + [970] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_logical_or_expression, 1), + [972] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_logical_or_expression, 1), + [974] = {.entry = {.count = 1, .reusable = true}}, SHIFT(109), + [976] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_union_fields, 2), + [978] = {.entry = {.count = 1, .reusable = true}}, SHIFT(750), + [980] = {.entry = {.count = 1, .reusable = false}}, SHIFT(511), + [982] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_logical_or_expression, 3), + [984] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_logical_or_expression, 3), + [986] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_fndec_attrs_repeat1, 2), SHIFT_REPEAT(809), + [989] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_fndec_attrs_repeat1, 2), + [991] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_fndec_attrs_repeat1, 2), SHIFT_REPEAT(479), + [994] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_fndec_attrs_repeat1, 2), SHIFT_REPEAT(469), + [997] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fndec_attrs, 1), + [999] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_label, 2), + [1001] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_label, 2), + [1003] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), + [1005] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expression, 1), + [1007] = {.entry = {.count = 1, .reusable = true}}, SHIFT(108), + [1009] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_expression, 7), + [1011] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_match_expression, 7), + [1013] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_expression, 2), + [1015] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_expression, 2), + [1017] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_if_expression, 2), SHIFT(43), + [1020] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_expression, 7), + [1022] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_switch_expression, 7), + [1024] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_compound_expression, 3), + [1026] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_compound_expression, 3), + [1028] = {.entry = {.count = 1, .reusable = true}}, SHIFT(325), + [1030] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binding, 5), + [1032] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binding, 5), + [1034] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_loop, 6), + [1036] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_loop, 6), + [1038] = {.entry = {.count = 1, .reusable = true}}, SHIFT(51), + [1040] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_bindings, 1), + [1042] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_bindings, 1), SHIFT(510), + [1045] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_bindings, 1), + [1047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binding, 3), + [1049] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binding, 3), + [1051] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_bindings, 3), + [1053] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_bindings, 3), + [1055] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 4), + [1057] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 4), + [1059] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binding_list, 3), + [1061] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binding_list, 3), + [1063] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_expression, 4), + [1065] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_expression, 4), + [1067] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_loop, 5), + [1069] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_loop, 5), + [1071] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_deferred_expression, 2), + [1073] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_deferred_expression, 2), + [1075] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_control_statement, 2), + [1077] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_control_statement, 2), + [1079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_conditional_branch, 4), + [1081] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_conditional_branch, 4), + [1083] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binding_list, 2), + [1085] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_binding_list, 2), + [1087] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3), + [1089] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 3), + [1091] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_bindings, 1), SHIFT(504), + [1094] = {.entry = {.count = 1, .reusable = true}}, SHIFT(720), + [1096] = {.entry = {.count = 1, .reusable = false}}, SHIFT(508), + [1098] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_identifier, 1), SHIFT(609), + [1101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(626), + [1103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(278), + [1105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(540), + [1107] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), + [1109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(217), + [1111] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_initializer, 2), + [1113] = {.entry = {.count = 1, .reusable = true}}, SHIFT(741), + [1115] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_chars, 1), + [1117] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_chars_repeat1, 2), SHIFT_REPEAT(626), + [1120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_chars_repeat1, 2), + [1122] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_chars_repeat1, 2), SHIFT_REPEAT(540), + [1125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(788), + [1127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(388), + [1129] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fntype_attr, 1), + [1131] = {.entry = {.count = 1, .reusable = true}}, SHIFT(213), + [1133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(656), + [1135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [1137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(205), + [1139] = {.entry = {.count = 1, .reusable = false}}, SHIFT(498), + [1141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(312), + [1143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(499), + [1145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_fndec_attr, 1), + [1147] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_decl_attr, 4), + [1149] = {.entry = {.count = 1, .reusable = false}}, SHIFT(781), + [1151] = {.entry = {.count = 1, .reusable = false}}, SHIFT(614), + [1153] = {.entry = {.count = 1, .reusable = true}}, SHIFT(513), + [1155] = {.entry = {.count = 1, .reusable = true}}, SHIFT(242), + [1157] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter_list, 2), + [1159] = {.entry = {.count = 1, .reusable = true}}, SHIFT(561), + [1161] = {.entry = {.count = 1, .reusable = true}}, SHIFT(53), + [1163] = {.entry = {.count = 1, .reusable = true}}, SHIFT(298), + [1165] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_if_expression, 2), SHIFT(101), + [1168] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), + [1170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(229), + [1172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(530), + [1174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(537), + [1176] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_values, 2), + [1178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(529), + [1180] = {.entry = {.count = 1, .reusable = false}}, SHIFT(186), + [1182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), + [1184] = {.entry = {.count = 1, .reusable = false}}, SHIFT(181), + [1186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_bindings, 4), + [1188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(62), + [1190] = {.entry = {.count = 1, .reusable = false}}, SHIFT(187), + [1192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(378), + [1194] = {.entry = {.count = 1, .reusable = false}}, SHIFT(191), + [1196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(250), + [1198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(377), + [1200] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_escape_sequence, 1), + [1202] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_binding_names, 3), + [1204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(617), + [1206] = {.entry = {.count = 1, .reusable = true}}, SHIFT(515), + [1208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(789), + [1210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(500), + [1212] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_tagged_types_repeat1, 2), + [1214] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_tagged_types_repeat1, 2), SHIFT_REPEAT(177), + [1217] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_offset_specifier, 4), + [1219] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 3), + [1221] = {.entry = {.count = 1, .reusable = true}}, SHIFT(89), + [1223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_value, 1), + [1225] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [1227] = {.entry = {.count = 1, .reusable = true}}, SHIFT(180), + [1229] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [1231] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_members, 1), + [1233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(594), + [1235] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameters, 1), + [1237] = {.entry = {.count = 1, .reusable = true}}, SHIFT(485), + [1239] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter_list, 1), + [1241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(554), + [1243] = {.entry = {.count = 1, .reusable = true}}, SHIFT(610), + [1245] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_binding, 4), + [1247] = {.entry = {.count = 1, .reusable = true}}, SHIFT(82), + [1249] = {.entry = {.count = 1, .reusable = true}}, SHIFT(100), + [1251] = {.entry = {.count = 1, .reusable = true}}, SHIFT(193), + [1253] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_named_escape, 2), + [1255] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_escape_sequence, 2), + [1257] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string_char, 1), + [1259] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [1261] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 1), + [1263] = {.entry = {.count = 1, .reusable = true}}, SHIFT(622), + [1265] = {.entry = {.count = 1, .reusable = true}}, SHIFT(495), + [1267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_binding, 3), + [1269] = {.entry = {.count = 1, .reusable = true}}, SHIFT(98), + [1271] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tagged_types, 3), + [1273] = {.entry = {.count = 1, .reusable = true}}, SHIFT(177), + [1275] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tagged_types, 4), + [1277] = {.entry = {.count = 1, .reusable = true}}, SHIFT(502), + [1279] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_name_list, 2), + [1281] = {.entry = {.count = 1, .reusable = true}}, SHIFT(611), + [1283] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter, 3), + [1285] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), + [1287] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_union_field, 3), + [1289] = {.entry = {.count = 1, .reusable = true}}, SHIFT(237), + [1291] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [1293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(534), + [1295] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constant_bindings, 1), + [1297] = {.entry = {.count = 1, .reusable = true}}, SHIFT(493), + [1299] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_value, 3), + [1301] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), + [1303] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter_list, 3), + [1305] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_union_field, 2), + [1307] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [1309] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_append_values, 1), + [1311] = {.entry = {.count = 1, .reusable = true}}, SHIFT(552), + [1313] = {.entry = {.count = 1, .reusable = true}}, SHIFT(235), + [1315] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_values, 3), + [1317] = {.entry = {.count = 1, .reusable = true}}, SHIFT(549), + [1319] = {.entry = {.count = 1, .reusable = true}}, SHIFT(294), + [1321] = {.entry = {.count = 1, .reusable = true}}, SHIFT(91), + [1323] = {.entry = {.count = 1, .reusable = true}}, SHIFT(262), + [1325] = {.entry = {.count = 1, .reusable = true}}, SHIFT(474), + [1327] = {.entry = {.count = 1, .reusable = true}}, SHIFT(165), + [1329] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_types, 3), + [1331] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 3, .production_id = 1), + [1333] = {.entry = {.count = 1, .reusable = true}}, SHIFT(97), + [1335] = {.entry = {.count = 1, .reusable = true}}, SHIFT(471), + [1337] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_values, 1), + [1339] = {.entry = {.count = 1, .reusable = true}}, SHIFT(497), + [1341] = {.entry = {.count = 1, .reusable = true}}, SHIFT(87), + [1343] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_predicate, 3, .production_id = 11), + [1345] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_value, 3), + [1347] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_value, 1), + [1349] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [1351] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_tuple_items, 3), + [1353] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), + [1355] = {.entry = {.count = 1, .reusable = true}}, SHIFT(247), + [1357] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_binding, 6), + [1359] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_union_field, 4), + [1361] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_values, 1), + [1363] = {.entry = {.count = 1, .reusable = true}}, SHIFT(525), + [1365] = {.entry = {.count = 1, .reusable = true}}, SHIFT(243), + [1367] = {.entry = {.count = 1, .reusable = true}}, SHIFT(72), + [1369] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_predicate, 1), + [1371] = {.entry = {.count = 2, .reusable = true}}, REDUCE(sym_expression, 1), SHIFT(71), + [1374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(324), + [1376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constant_binding, 5), + [1378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(74), + [1380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_union_field, 1), + [1382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(779), + [1384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(57), + [1386] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_binding, 5), + [1388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_union_fields, 1), + [1390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(405), + [1392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_bindings, 1), + [1394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(468), + [1396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(475), + [1398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(172), + [1400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(195), + [1402] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_case, 5), + [1404] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_case, 3), + [1406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(461), + [1408] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_name_list, 1), + [1410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(548), + [1412] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_case, 3), + [1414] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 4, .production_id = 2), + [1416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(85), + [1418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695), + [1420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(694), + [1422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(214), + [1424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392), + [1426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(715), + [1428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(519), + [1430] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_bindings, 3), + [1432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(506), + [1434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(63), + [1436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(745), + [1438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(318), + [1440] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_field_value, 5), + [1442] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_cases, 1), + [1444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [1446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(539), + [1448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(538), + [1450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(309), + [1452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(551), + [1454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), + [1456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [1458] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_options, 1), + [1460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(302), + [1462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(477), + [1464] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_cases, 1), + [1466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), + [1468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_initializer, 1), + [1470] = {.entry = {.count = 1, .reusable = true}}, SHIFT(465), + [1472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), + [1474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(40), + [1476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(723), + [1478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(412), + [1480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(409), + [1482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(204), + [1484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(198), + [1486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(701), + [1488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(218), + [1490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(201), + [1492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(337), + [1494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(338), + [1496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(453), + [1498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(576), + [1500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(280), + [1502] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constant_bindings, 3), + [1504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(96), + [1506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(188), + [1508] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_bindings, 3), + [1510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(206), + [1512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(734), + [1514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(433), + [1516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(435), + [1518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(550), + [1520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(192), + [1522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(470), + [1524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(39), + [1526] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 6, .production_id = 6), + [1528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(348), + [1530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(347), + [1532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(343), + [1534] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_name_list, 3), + [1536] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), + [1538] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [1540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(60), + [1542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(141), + [1544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(389), + [1546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), + [1548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [1550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(54), + [1552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(503), + [1554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [1556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(341), + [1558] = {.entry = {.count = 1, .reusable = true}}, SHIFT(261), + [1560] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [1562] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [1564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(56), + [1566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(231), + [1568] = {.entry = {.count = 1, .reusable = true}}, SHIFT(95), + [1570] = {.entry = {.count = 1, .reusable = true}}, SHIFT(225), + [1572] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_named_escape, 2), + [1574] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_escape_sequence, 2), + [1576] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_bindings, 5), + [1578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(287), + [1580] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480), + [1582] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [1584] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_escape_sequence, 1), + [1586] = {.entry = {.count = 1, .reusable = true}}, SHIFT(80), + [1588] = {.entry = {.count = 1, .reusable = true}}, SHIFT(176), + [1590] = {.entry = {.count = 1, .reusable = true}}, SHIFT(414), + [1592] = {.entry = {.count = 1, .reusable = true}}, SHIFT(79), + [1594] = {.entry = {.count = 1, .reusable = true}}, SHIFT(220), + [1596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(241), + [1598] = {.entry = {.count = 1, .reusable = true}}, SHIFT(238), + [1600] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [1602] = {.entry = {.count = 1, .reusable = true}}, SHIFT(236), + [1604] = {.entry = {.count = 1, .reusable = true}}, SHIFT(232), + [1606] = {.entry = {.count = 1, .reusable = true}}, SHIFT(595), + [1608] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_match_cases, 3), + [1610] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [1612] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_options, 3), + [1614] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_switch_cases, 3), + [1616] = {.entry = {.count = 1, .reusable = true}}, SHIFT(99), + [1618] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_predicate, 5), + [1620] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_append_values, 3), + [1622] = {.entry = {.count = 1, .reusable = true}}, SHIFT(418), + [1624] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_unit, 2), + [1626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(425), + [1628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(665), + [1630] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_declaration, 5, .production_id = 3), + [1632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(75), + [1634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), + [1636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [1638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(390), + [1640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(320), + [1642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [1644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(457), + [1646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(194), + [1648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(604), + [1650] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_predicate, 3, .production_id = 12), + [1652] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_initializer, 3), + [1654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(279), + [1656] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_type_declaration, 2), + [1658] = {.entry = {.count = 1, .reusable = true}}, SHIFT(175), + [1660] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_argument_list, 3), + [1662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(512), + [1664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(317), + [1666] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_constant_declaration, 2), + [1668] = {.entry = {.count = 1, .reusable = true}}, SHIFT(84), + [1670] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), + [1672] = {.entry = {.count = 1, .reusable = true}}, SHIFT(316), + [1674] = {.entry = {.count = 1, .reusable = true}}, SHIFT(83), + [1676] = {.entry = {.count = 1, .reusable = true}}, SHIFT(81), + [1678] = {.entry = {.count = 1, .reusable = true}}, SHIFT(168), + [1680] = {.entry = {.count = 1, .reusable = true}}, SHIFT(185), + [1682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [1684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(439), + [1686] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_global_declaration, 2), + [1688] = {.entry = {.count = 1, .reusable = true}}, SHIFT(395), + [1690] = {.entry = {.count = 1, .reusable = true}}, SHIFT(77), + [1692] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression_list, 3), + [1694] = {.entry = {.count = 1, .reusable = true}}, SHIFT(454), + [1696] = {.entry = {.count = 1, .reusable = true}}, SHIFT(297), + [1698] = {.entry = {.count = 1, .reusable = true}}, SHIFT(426), + [1700] = {.entry = {.count = 1, .reusable = true}}, SHIFT(308), + [1702] = {.entry = {.count = 1, .reusable = true}}, SHIFT(49), + [1704] = {.entry = {.count = 1, .reusable = true}}, SHIFT(48), + [1706] = {.entry = {.count = 1, .reusable = true}}, SHIFT(627), + [1708] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_declaration, 1), + [1710] = {.entry = {.count = 1, .reusable = true}}, SHIFT(396), + [1712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [1714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(47), + [1716] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), + [1718] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_array_members, 3), + [1720] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_rune, 1), + [1722] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_struct_union_fields, 3), + [1724] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [1726] = {.entry = {.count = 1, .reusable = true}}, SHIFT(527), + [1728] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_enum_values, 3), + [1730] = {.entry = {.count = 1, .reusable = true}}, SHIFT(319), + [1732] = {.entry = {.count = 1, .reusable = true}}, SHIFT(535), + [1734] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [1736] = {.entry = {.count = 1, .reusable = true}}, SHIFT(417), + [1738] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415), + [1740] = {.entry = {.count = 1, .reusable = true}}, SHIFT(524), + [1742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(190), + [1744] = {.entry = {.count = 1, .reusable = true}}, SHIFT(473), + [1746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(68), + [1748] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [1750] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [1752] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), + [1754] = {.entry = {.count = 1, .reusable = true}}, SHIFT(78), + [1756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [1758] = {.entry = {.count = 1, .reusable = true}}, SHIFT(755), + [1760] = {.entry = {.count = 1, .reusable = true}}, SHIFT(757), + [1762] = {.entry = {.count = 1, .reusable = true}}, SHIFT(27), + [1764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [1766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(70), + [1768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(69), + [1770] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30), + [1772] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), + [1774] = {.entry = {.count = 1, .reusable = true}}, SHIFT(517), + [1776] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [1778] = {.entry = {.count = 1, .reusable = true}}, SHIFT(34), + [1780] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), + [1782] = {.entry = {.count = 1, .reusable = true}}, SHIFT(804), + [1784] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37), + [1786] = {.entry = {.count = 1, .reusable = true}}, SHIFT(807), + [1788] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parameter_list, 4), + [1790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(38), + [1792] = {.entry = {.count = 1, .reusable = true}}, SHIFT(812), + [1794] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [1796] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817), +}; + +#ifdef __cplusplus +extern "C" { +#endif +#ifdef _WIN32 +#define extern __declspec(dllexport) +#endif + +extern const TSLanguage *tree_sitter_hare(void) { + static TSLanguage language = { + .version = LANGUAGE_VERSION, + .symbol_count = SYMBOL_COUNT, + .alias_count = ALIAS_COUNT, + .token_count = TOKEN_COUNT, + .external_token_count = EXTERNAL_TOKEN_COUNT, + .state_count = STATE_COUNT, + .large_state_count = LARGE_STATE_COUNT, + .production_id_count = PRODUCTION_ID_COUNT, + .field_count = FIELD_COUNT, + .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + .parse_table = (const uint16_t *)ts_parse_table, + .small_parse_table = (const uint16_t *)ts_small_parse_table, + .small_parse_table_map = (const uint32_t *)ts_small_parse_table_map, + .parse_actions = ts_parse_actions, + .symbol_names = ts_symbol_names, + .field_names = ts_field_names, + .field_map_slices = (const TSFieldMapSlice *)ts_field_map_slices, + .field_map_entries = (const TSFieldMapEntry *)ts_field_map_entries, + .symbol_metadata = ts_symbol_metadata, + .public_symbol_map = ts_symbol_map, + .alias_map = ts_non_terminal_alias_map, + .alias_sequences = (const TSSymbol *)ts_alias_sequences, + .lex_modes = ts_lex_modes, + .lex_fn = ts_lex, + }; + return &language; +} +#ifdef __cplusplus +} +#endif diff --git a/vendor/tree-sitter-hare/src/tree_sitter/parser.h b/vendor/tree-sitter-hare/src/tree_sitter/parser.h new file mode 100644 index 000000000..a3a87bd1d --- /dev/null +++ b/vendor/tree-sitter-hare/src/tree_sitter/parser.h @@ -0,0 +1,223 @@ +#ifndef TREE_SITTER_PARSER_H_ +#define TREE_SITTER_PARSER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define ts_builtin_sym_error ((TSSymbol)-1) +#define ts_builtin_sym_end 0 +#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 + +typedef uint16_t TSStateId; + +#ifndef TREE_SITTER_API_H_ +typedef uint16_t TSSymbol; +typedef uint16_t TSFieldId; +typedef struct TSLanguage TSLanguage; +#endif + +typedef struct { + TSFieldId field_id; + uint8_t child_index; + bool inherited; +} TSFieldMapEntry; + +typedef struct { + uint16_t index; + uint16_t length; +} TSFieldMapSlice; + +typedef struct { + bool visible; + bool named; + bool supertype; +} TSSymbolMetadata; + +typedef struct TSLexer TSLexer; + +struct TSLexer { + int32_t lookahead; + TSSymbol result_symbol; + void (*advance)(TSLexer *, bool); + void (*mark_end)(TSLexer *); + uint32_t (*get_column)(TSLexer *); + bool (*is_at_included_range_start)(const TSLexer *); + bool (*eof)(const TSLexer *); +}; + +typedef enum { + TSParseActionTypeShift, + TSParseActionTypeReduce, + TSParseActionTypeAccept, + TSParseActionTypeRecover, +} TSParseActionType; + +typedef union { + struct { + uint8_t type; + TSStateId state; + bool extra; + bool repetition; + } shift; + struct { + uint8_t type; + uint8_t child_count; + TSSymbol symbol; + int16_t dynamic_precedence; + uint16_t production_id; + } reduce; + uint8_t type; +} TSParseAction; + +typedef struct { + uint16_t lex_state; + uint16_t external_lex_state; +} TSLexMode; + +typedef union { + TSParseAction action; + struct { + uint8_t count; + bool reusable; + } entry; +} TSParseActionEntry; + +struct TSLanguage { + uint32_t version; + uint32_t symbol_count; + uint32_t alias_count; + uint32_t token_count; + uint32_t external_token_count; + uint32_t state_count; + uint32_t large_state_count; + uint32_t production_id_count; + uint32_t field_count; + uint16_t max_alias_sequence_length; + const uint16_t *parse_table; + const uint16_t *small_parse_table; + const uint32_t *small_parse_table_map; + const TSParseActionEntry *parse_actions; + const char **symbol_names; + const char **field_names; + const TSFieldMapSlice *field_map_slices; + const TSFieldMapEntry *field_map_entries; + const TSSymbolMetadata *symbol_metadata; + const TSSymbol *public_symbol_map; + const uint16_t *alias_map; + const TSSymbol *alias_sequences; + const TSLexMode *lex_modes; + bool (*lex_fn)(TSLexer *, TSStateId); + bool (*keyword_lex_fn)(TSLexer *, TSStateId); + TSSymbol keyword_capture_token; + struct { + const bool *states; + const TSSymbol *symbol_map; + void *(*create)(void); + void (*destroy)(void *); + bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist); + unsigned (*serialize)(void *, char *); + void (*deserialize)(void *, const char *, unsigned); + } external_scanner; +}; + +/* + * Lexer Macros + */ + +#define START_LEXER() \ + bool result = false; \ + bool skip = false; \ + bool eof = false; \ + int32_t lookahead; \ + goto start; \ + next_state: \ + lexer->advance(lexer, skip); \ + start: \ + skip = false; \ + lookahead = lexer->lookahead; + +#define ADVANCE(state_value) \ + { \ + state = state_value; \ + goto next_state; \ + } + +#define SKIP(state_value) \ + { \ + skip = true; \ + state = state_value; \ + goto next_state; \ + } + +#define ACCEPT_TOKEN(symbol_value) \ + result = true; \ + lexer->result_symbol = symbol_value; \ + lexer->mark_end(lexer); + +#define END_STATE() return result; + +/* + * Parse Table Macros + */ + +#define SMALL_STATE(id) id - LARGE_STATE_COUNT + +#define STATE(id) id + +#define ACTIONS(id) id + +#define SHIFT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = state_value \ + } \ + }} + +#define SHIFT_REPEAT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = state_value, \ + .repetition = true \ + } \ + }} + +#define SHIFT_EXTRA() \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .extra = true \ + } \ + }} + +#define REDUCE(symbol_val, child_count_val, ...) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_val, \ + .child_count = child_count_val, \ + __VA_ARGS__ \ + }, \ + }} + +#define RECOVER() \ + {{ \ + .type = TSParseActionTypeRecover \ + }} + +#define ACCEPT_INPUT() \ + {{ \ + .type = TSParseActionTypeAccept \ + }} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_PARSER_H_