From 3995fc2d6cca836a5a1ee1bbf792c91c55e2b41a Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Tue, 8 Dec 2020 01:49:25 -0800 Subject: [PATCH] Merge lexer from the toolchain repository. (#213) The only change here is to update the fuzzer build extension path. The main original commit message: > Add an initial lexer. (#17) > > The specific logic here hasn't been updated to track the latest > discussed changes, much less implement many aspects of things like > Unicode support. > > However, this should lay out a reasonable framework and set of APIs. > It gives an idea of the overall lexer architecture being proposed. The > actual lexing algorithm is a relatively boring and naive hand written > loop. It may make sense to replace this with something generated or > other more advanced approach in the future, getting the implementation > right was not the primary goal here. Instead, the focus was entirely > on the architecture, encapsulation, APIs, and the testing > infrastructure. > > The architecture of the lexer differs from "classical" high > performance lexers in compilers. A high level summary: > > - It is eager rather than lazy, lexing an entire file. > - Tokens intrinsically know their source location. > - Grouping lexical symbols are tracked within the lexer. > - Indentation is tracked within the lexer. > > Tracking of grouping and indentation is intended to simplify the > strategies used for recovery of mismatched grouping tokens, and > eventually use indentation. > > Folding source location into the token itself simplifies the data > structures significantly, and doesn't lose any fidelity due to the > absence of a preprocessor with token pasting. > > The fact that this is an eager lexer instead of a lazy lexer is > designed to simplify the implementation and testing of the lexer (and > subsequent components). There is no reason to expect Carbon to lex so > many tokens that there are significant locality advantages of lazy > lexing. Moreover, if we want comparable performance benefits, I think > pipelining is a much more promising architecture than laziness. For > now, the simplicity is a huge win. > > Being eager also makes it easy for us to use extremely dense memory > encodings for the information about lexed tokens. Everything is > created in a dense array, and small indices are used to identify each > token within the array. > > There is a fuzzer included here that we have run extensively over the > code, but currently toolchain bugs and Bazel limitations prevent it > from easily building. I'm hoping myself or someone else can push on > this soon and enable the fuzzer to at least build if not run fuzz > tests automatically. We have a significant fuzzing corpus that I'll > add in a subsequent commit as well. This also includes the fuzzer whose commit message was: > Add fuzz testing infrastructure and the lexer's fuzzer. (#21) > > This adds a fairly simple `cc_fuzz_test` macro that is specialized for > working with LLVM's LibFuzzer. In addition to building the fuzzer > binary with the toolchain's `fuzzer` feature, it also sets up the test > execution to pass the corpus as file arguments which is a simple > mechanism to enable regression testing against the fuzz corpus. > > I've included an initial fuzzer corpus as well. To run the fuzzer in > an open ended fashion, and build up a larger corpus: > ```shell > mkdir /tmp/new_corpus > cp lexer/fuzzer_corpus/* /tmp/new_corpus > ./bazel-bin/lexer/tokenized_buffer_fuzzer /tmp/new_corpus > ``` > > You can parallelize the fuzzer by adding `-jobs=N` for N threads. For > more details about running fuzzers, see the documentation: > http://llvm.org/docs/LibFuzzer.html > > To minimize and merge any interesting new inputs: > ```shell > ./bazel-bin/lexer/tokenized_buffer_fuzzer -merge=1 \ > lexer/fuzzer_corpus /tmp/new_corpus > ``` Co-authored-by: Jon Meow <46229924+jonmeow@users.noreply.github.com> --- lexer/BUILD | 75 ++ .../00b9598434d1cb0aca2446e5d8059f955898661b | Bin 0 -> 14 bytes .../01096186d4e1347ff16a01491d6ef629f5f5fd42 | Bin 0 -> 2178 bytes .../011f63c979b2de6c44a0f974437ff176fb309cf7 | Bin 0 -> 10 bytes .../013a89a4caf353b43c203a2cbd270857c46863c8 | Bin 0 -> 18 bytes .../02ddec8b4855127d5616e521bc826659cb04a796 | Bin 0 -> 10 bytes .../0327df1d12e0abf8a355b7ed09e0228dc396d787 | Bin 0 -> 27 bytes .../037dc35353d675c9f4d2f03c9db8186422050b2d | Bin 0 -> 21 bytes .../04030ac2f55537459994c38435a6b7d00ae264bf | Bin 0 -> 6 bytes .../0543ca422553bae7a2e8b46a81c8fee7eb12c9a7 | Bin 0 -> 62 bytes .../0555830a8ac12955924bf235d97792583fb8d6da | Bin 0 -> 8 bytes .../05666d20f461b2d4a93030744abd619ce0f25fe7 | Bin 0 -> 18 bytes .../058baf2eca3ac04d3382c94dc213af644b547796 | Bin 0 -> 201 bytes .../05910a7c99851cbb657cfbf8850e1e67e98408b1 | Bin 0 -> 92 bytes .../062fe100147aaaf3a5f3f0a67c64991480597cfc | Bin 0 -> 5 bytes .../0685140d284f7c98815eb844fe6445ac2e4d25da | Bin 0 -> 14 bytes .../06b6c1a09f2ec62f93b7a3f1b03a2188700c8117 | Bin 0 -> 15 bytes .../075e66efafa8882c10f46de45be654ad1f930c1f | Bin 0 -> 126 bytes .../07f95640a7ba78bebf24bea549bd129d81d03f14 | Bin 0 -> 136 bytes .../085e5e94c0193bc313159a1aac208bc7232fa24b | Bin 0 -> 11 bytes .../08988f30662dbfc7a95bee73cef111dafbcd64af | Bin 0 -> 23 bytes .../08a189c1daec7835d24c69454657ea460add9e57 | Bin 0 -> 34 bytes .../0928b559c298c803b98e59564c8b6b5443ec1697 | Bin 0 -> 12 bytes .../09de090fce19575b878349e5b08e44774cf901b3 | Bin 0 -> 258 bytes .../0a44775851faa48a0293c03c5823526a05432a41 | Bin 0 -> 43 bytes .../0a73a50a6c6470643bc6ac4731df70e168a1d72a | Bin 0 -> 41 bytes .../0b02094a3c9673c0ca1a0f0ebb8a2a1cd334bd5d | Bin 0 -> 517 bytes .../0b50b447ee13e7ea31515670dee9cfe0159182a3 | Bin 0 -> 260 bytes .../0b656451855e16143574319c2c02c7278916e53d | Bin 0 -> 5 bytes .../0b7b607b163793a78dd80383f3dfc1283ae77822 | Bin 0 -> 6 bytes .../0b832ffe11d2337ca3efd79aa32140076d90dc67 | Bin 0 -> 3 bytes .../0b9b08eca9652ba3a3e389f051e0d19e5e46fd3c | Bin 0 -> 109 bytes .../0beed1e9ae76d37f24c30c22c0b254f8efb30744 | Bin 0 -> 32 bytes .../0c38e5795a262ad27f8130c77a4bc34ffe7eaa82 | Bin 0 -> 23 bytes .../0c5a294e646b32fc10624947911d167a7b550cf4 | Bin 0 -> 16 bytes .../0ccd028acb41f2d1902f9ce943084cf855977282 | Bin 0 -> 6 bytes .../0ce0d735a0d8e0c637030b8bed3bbcc3a3864866 | Bin 0 -> 70 bytes .../0d16aa665e382f2118a4788ac09401f0de985a00 | Bin 0 -> 4 bytes .../0d968cc12e55af8d4306e667c5c817b16b8e1b79 | Bin 0 -> 5 bytes .../0dfaf14bb1c6bbaf15c4840df4bbcba70727fb2f | Bin 0 -> 44 bytes .../0e3efc3ff89fc9956def38fa002510e8f408e4e4 | Bin 0 -> 7 bytes .../0ea6b54fd89072271de9d6db7291db91e412ba0c | Bin 0 -> 10 bytes .../0eb01abf75b501eab2e9f8cf7c0a46d150e8035e | Bin 0 -> 1826 bytes .../0ec0f5fdb11fb62a0552c7e13a49c164b757b049 | Bin 0 -> 44 bytes .../0f1ba78b09883fc942f3108c0d0238e5bbba7261 | Bin 0 -> 61 bytes .../0f88a6fcd8459f99ca2009cc17572e4ee6c57949 | Bin 0 -> 17 bytes .../0fa6870ba61bffbcf4331293a0c36abf2a53745d | Bin 0 -> 73 bytes .../0fb249d887ffa905f90fe43c97cb0dea4277f682 | Bin 0 -> 103 bytes .../0ff985bb50cd92e0904ae0c3bf562a665a9761c8 | Bin 0 -> 37 bytes .../107c59baea92d5aa0b7daf7acc49d20b6a25d180 | Bin 0 -> 72 bytes .../108fb5fc2033bcad402775791f7d3a83a434d402 | Bin 0 -> 15 bytes .../10d4b9dc18446170ba10afb28ca65744f9010ed1 | Bin 0 -> 25 bytes .../11c0e4ea13d10a785b7298b416b5d1ec70cb9097 | Bin 0 -> 275 bytes .../11d6f314e0ee9b6b319c3e4961ad4b2c041e01f1 | Bin 0 -> 12 bytes .../12033d109a3ab4a4068fb4f5283aa8ef2b4b2939 | Bin 0 -> 18 bytes .../1388ff1c64cf1523471677300bcc78f2cb057178 | Bin 0 -> 6 bytes .../139cf5f51919c2f88794b3d6afecd894d3795bc4 | Bin 0 -> 3 bytes .../13a567de304d3293826a5915b124c898d905c533 | Bin 0 -> 310 bytes .../13a7d12471b67d795eeb620fd9bcd23e611716b4 | Bin 0 -> 28 bytes .../143df8b19029156bef78ed64f99f6a29847fd707 | Bin 0 -> 36 bytes .../1489f923c4dca729178b3e3233458550d8dddf29 | Bin 0 -> 2 bytes .../14b4cd2980fd137c24ea87f505d3ee4cadfde097 | Bin 0 -> 86 bytes .../14c55494f5bfead510993f7aa6b19f2a99d78e64 | Bin 0 -> 74 bytes .../15d136091465e9311ea3fff6a81f3a16cd472b9a | Bin 0 -> 13 bytes .../15f060997fb0309d15af20cf592235d47e6653cc | Bin 0 -> 105 bytes .../167feb1fda57dac588688aa0d0b7a50683620144 | Bin 0 -> 8 bytes .../1941ef6ffb0e99428fec8f63ce04c9eac4953bf4 | Bin 0 -> 3326 bytes .../19c2134264582d9b56d13f26eb96e92d374574c6 | Bin 0 -> 140 bytes .../1a51e55c866f939f2d132aef8ff5e600242ec29a | Bin 0 -> 5 bytes .../1a7d939aee936be5d25799c3a57f8e8f3c851c89 | Bin 0 -> 40 bytes .../1a9160bf021e36d9c2bf8f783e5b24211dbc3a28 | Bin 0 -> 7 bytes .../1abb3bd834e95e4044a7eeca6e54a49d3c6ef802 | Bin 0 -> 55 bytes .../1af2d87f0c834bdfe46af5d5f18f014c3294c466 | Bin 0 -> 76 bytes .../1afe41bb4bfe01753e61e7aac1449e6fa2e96fe6 | Bin 0 -> 34 bytes .../1bb9f4d20b726e743eb6af284a699ce4afa36583 | Bin 0 -> 10 bytes .../1c62dba4b7e1567683b1824278e7686e26d52834 | Bin 0 -> 19 bytes .../1da4e90919ecbf001b876a4972845144cf042f3a | Bin 0 -> 1498 bytes .../1ec7532018f463cad2ba3d6928fb3c6b46df398a | Bin 0 -> 126 bytes .../1f1e84248afa238a7417b29be35fee5af6ba57cc | Bin 0 -> 23 bytes .../1ff7f0b20cb7d2be88fe82f1779f71a9b860b7b8 | Bin 0 -> 29 bytes .../20e233dd43706cd6dff2c7b774cdc47ead78de71 | Bin 0 -> 6 bytes .../213764f0401b8e8a9040c21bc153edff9286d315 | Bin 0 -> 1837 bytes .../213be3df2b6b577edcbb6f913298974fbb8d7324 | Bin 0 -> 44 bytes .../21ae4af22c4c258550b92d3cea9ce479a88c12a2 | Bin 0 -> 377 bytes .../21c85dd996a874a885825773fe3ae6f66272ae77 | Bin 0 -> 8 bytes .../21d6931263d831c0aed540fd1bab0b60799af038 | Bin 0 -> 1232 bytes .../21dc828f45d060ee0455004297b50d2b64d17e02 | Bin 0 -> 628 bytes .../221c22da6c2c0fd71d5ebc21876fd57cb77b1b00 | Bin 0 -> 44 bytes .../22812a981f0458f49a0cae159de66a24631464a3 | Bin 0 -> 4 bytes .../22854bee28c089600335e2c16d6c6adad03fba54 | Bin 0 -> 1001 bytes .../234563c77ded0c75e0583be09a1f4a8a016b8024 | Bin 0 -> 20 bytes .../236e3801dd0cf62a835705da142af1587e498516 | Bin 0 -> 29 bytes .../24426f52ba7ad6d178e9e20cb28cf9182d51871f | Bin 0 -> 17 bytes .../24586a887ef47d547a4bea0a89972fcf3c19c454 | Bin 0 -> 65 bytes .../2600c18db42bde973e72b07f0dadf5d32fbfc48a | Bin 0 -> 40 bytes .../26514fd3aa2e7d09114d7b5c971e9cbc96e49aba | Bin 0 -> 9 bytes .../26ffdd8987ca20c37b2e8b30866e534342d1c175 | Bin 0 -> 6 bytes .../274399a85ea96a507d87d6199c58ea701113ec73 | Bin 0 -> 141 bytes .../28135abd5f66044cb0fd6f82a3b0dd81b2059593 | Bin 0 -> 423 bytes .../281bc1b2b4a20d112c7ea17951397b5a789b5ee8 | Bin 0 -> 1684 bytes .../28434409ed42ff7b5f6cf4c0731765f70aae12ba | Bin 0 -> 164 bytes .../29b8dee814dce4d94d388d035c10d4f6149b934b | Bin 0 -> 132 bytes .../29c07937042029d42ded435734bb17a9da1a13ef | Bin 0 -> 3 bytes .../29dd4eab6410e5cad789f8ad21b564f5ff580b62 | Bin 0 -> 141 bytes .../2a6775c7917e01ee00754918264977fdd60f15ea | Bin 0 -> 29 bytes .../2ad3087a982396bd302d9d445d6c5423c248d3c2 | Bin 0 -> 18 bytes .../2b58f8d18c8ddfb98618711a7da2afd0efc9bcf8 | Bin 0 -> 44 bytes .../2bea1061181244323cdf95ad6a489b72ee38d225 | Bin 0 -> 27 bytes .../2cce2108f1d888fdecf0c406fd5fb2ab0448d88d | Bin 0 -> 11 bytes .../2d1f6ee26e62965c25a2540c47cda839e86cbc9d | Bin 0 -> 276 bytes .../2e047eb1a04b386c558490f7634175199fb86d2b | Bin 0 -> 43 bytes .../2eca067d0407b2ce79b7fe3aa0abf38b48178e16 | Bin 0 -> 132 bytes .../2eca430ce72ba8cfe14a36dae22c3af594455d78 | Bin 0 -> 11 bytes .../300268d606563a63b1fa078deedf83afcaaae4f0 | Bin 0 -> 2 bytes .../30122a51022d504d0bd883ec9083db0ebc122f3a | Bin 0 -> 438 bytes .../3055e6fc37e2846c56a0a7ef9c910807325c2df1 | Bin 0 -> 481 bytes .../30a79f74923a4a0450c38b8d78c32dd0ec49fb1e | Bin 0 -> 134 bytes .../30d2affb78dce801693964e7aa7a776e46764142 | Bin 0 -> 71 bytes .../33970181a654f47a1b7350a040f66460573c2b37 | Bin 0 -> 34 bytes .../33fbd678677fdcc9ff26ce50d77282550ed7b152 | Bin 0 -> 3 bytes .../3410eb3f248569d94b015591f12cf76034f8c64d | Bin 0 -> 4 bytes .../34c37b9bcc5ca133876f590f4225bd361357eb13 | Bin 0 -> 25 bytes .../36388f570f44f86bc535dc8e510721d1c28a0637 | Bin 0 -> 7 bytes .../36444b4480602bbc82c421d3a5dca926ee56f17d | Bin 0 -> 5 bytes .../378f7e36a287439cdbcb171241c946981517e6b7 | Bin 0 -> 95 bytes .../37d5919815fa0c3579c90f5882bc78d2175f2658 | Bin 0 -> 19 bytes .../37d7800daba869cfb014eb10e5f46a67fbbbf14d | Bin 0 -> 67 bytes .../38197ad1d6330f1836fecfc754c19dcfe8d8da6d | Bin 0 -> 70 bytes .../383ecf2dd4fee1f6fad7a2fc6a1014ea612cc705 | Bin 0 -> 11 bytes .../38aae1be66ab0f6d35121b4372baa54f3a734cd1 | Bin 0 -> 226 bytes .../38d2de4fb4421617c287855ede415e253edf27fc | Bin 0 -> 34 bytes .../39cbaf1cff432636f99ae2086461c48f081f3608 | Bin 0 -> 4 bytes .../39fbf7272789a966efbe93fc511b64c764d89513 | Bin 0 -> 278 bytes .../3a33064962ff92045a47b9409449cf1552d685d7 | Bin 0 -> 18 bytes .../3a3fc43f4c64d0305c0d697a33acb209e48971af | Bin 0 -> 16 bytes .../3a85b6e409d6180559bbaf0282fe374734ac8ab7 | Bin 0 -> 31 bytes .../3aef9b8111cb335c85a241d9f59929e11707730f | Bin 0 -> 10 bytes .../3d6d742aaaea3abffa078fd4c03af3cd03c5bb94 | Bin 0 -> 3 bytes .../3e21eed3aab591d3aab15d975b2660648ce7bc9e | Bin 0 -> 221 bytes .../3e23582c9fe275a17897308f4529ce965ef26639 | Bin 0 -> 32 bytes .../3f0c682d7231780f496758f26a19dea90eb0a63f | Bin 0 -> 6 bytes .../3f128a449c26d99e65f137b08835072d0f4fa93a | Bin 0 -> 4 bytes .../3f5305709a3b6e105cf4b8c1368a8d5c0540a2da | Bin 0 -> 3 bytes .../3ffa1177da8e5aa9fe3d071384f8958da89d40a6 | Bin 0 -> 128 bytes .../401b5ffa27fd9bcc9c4c99acc3294b51b7ab5435 | Bin 0 -> 97 bytes .../403d7b69e46cde2a0c35e051dc0343b283943a6a | Bin 0 -> 197 bytes .../419ccf5d9e7c1a163b62230196e1154953a91f9f | Bin 0 -> 591 bytes .../42880c44925ec18e3a69b2274b05e0aeff25e454 | Bin 0 -> 50 bytes .../434337b14da4a5fb3cdc96cdf47f17517583815c | Bin 0 -> 20 bytes .../4351e9a0bb6b53c76164f05125a112cb283cfd81 | Bin 0 -> 386 bytes .../4480089669b1f8da9065f5eb9491687d9e31e9da | Bin 0 -> 16 bytes .../4487fe428cf14de470fa39e874acece46fcfcbe8 | Bin 0 -> 17 bytes .../44df8bdb51a76972b66deb94dfdf5783de99a64e | Bin 0 -> 3 bytes .../467d884be458d07e7fd5bdda5fff78c9133a1212 | Bin 0 -> 325 bytes .../4852364d47db4ef47740f9184a39e0631aa69cd0 | Bin 0 -> 33 bytes .../487b9de35feaf3e349a411438344e46c870120d5 | Bin 0 -> 4 bytes .../48ba5eedfbf3c64e54d39fb78dcef8081d4cafc2 | Bin 0 -> 8 bytes .../49af95277336d8c0ed0d7a7522e73f8c87d89020 | Bin 0 -> 10 bytes .../49d400fc7de4b5392935638c26ce2e62778d416e | Bin 0 -> 65 bytes .../4a0034191d5d0e629583d8b06b6a4a81ce024bee | Bin 0 -> 213 bytes .../4b32fa9e7beb0500c4f76cdf27a4d1be933ddc68 | Bin 0 -> 94 bytes .../4b53f47724ca22ac2b26e7b2191779c9fe74fc4c | Bin 0 -> 60 bytes .../4c5e150ebdd825a7ad25ac960eed57c54838c614 | Bin 0 -> 14 bytes .../4cb14c262491d3c0e6d47cef077c5ff05353e43d | Bin 0 -> 7 bytes .../4d042b03473298b5ef025639d90062272204d6b9 | Bin 0 -> 68 bytes .../4dd2cd4a75976db57d91729517748dc8f1e9eb39 | Bin 0 -> 7 bytes .../4df44f90bc0f13fb557f109e46647b4d91a5014e | Bin 0 -> 36 bytes .../4e5560d451aa505e253511657c115baf69d8e6f8 | Bin 0 -> 36 bytes .../4e6876ea3989c69057b0a81a029f83e5246f70dc | Bin 0 -> 34 bytes .../4fbc30b7354b6bd455608e7fb5bb7f6feb37941e | Bin 0 -> 406 bytes .../532fd1978e5444b41c97d1639fe7b8efc8da14e9 | Bin 0 -> 18 bytes .../5378a1d0f6db372c2e26926f3ab692aaff281d5d | Bin 0 -> 373 bytes .../53f0d72af41e99e951722231524ec437759422f2 | Bin 0 -> 36 bytes .../5458cc3caca58cf412198f6d5085f370b7d1cb97 | Bin 0 -> 11 bytes .../5577956e2ca1e38f1ece81a6c2190490c3273f20 | Bin 0 -> 120 bytes .../568e139f25140400eefdf6d4e2a38bc21e61d4c0 | Bin 0 -> 67 bytes .../56bc35408f7d618b0b2ad0cc28738fa9d38a0bd2 | Bin 0 -> 6 bytes .../57e42e4edb7e862c38e24209fea0d89c06034e4d | Bin 0 -> 40 bytes .../59837c18261ef4bf33c51437a98d25cebf414840 | Bin 0 -> 2010 bytes .../598b22649052ab5cf9c8f2d9e43c97c0ca1ecb6f | Bin 0 -> 91 bytes .../59f33d4f075c2cf6448f94f623fac85834bdb2cf | Bin 0 -> 9 bytes .../59fe75149f202f3e7920a1fd87959628855929a8 | Bin 0 -> 21 bytes .../5a02c95e0a7d591f275f196eb5274f1b2209e244 | Bin 0 -> 10 bytes .../5aa449aa73c5c05cf57a957914e47a4d2adbd4c9 | Bin 0 -> 27 bytes .../5adf5dd22c409ad57c9f6b29eeb92aaafdf5372c | Bin 0 -> 286 bytes .../5b6e66c2980a4e9eae54c9996bd413b58e564150 | Bin 0 -> 101 bytes .../5bfebbdbbfb4f41a5d5d388504bd062d7a99c3e0 | Bin 0 -> 17 bytes .../5c3a3ba5513cfcdc49f76b2009d806141588f85f | Bin 0 -> 41 bytes .../5d31e2a814a923c713cd3533f1cf397c902d304e | Bin 0 -> 10 bytes .../5d6c6fa498ecdef22875bdb7b8d212f146cc387b | Bin 0 -> 5 bytes .../5e05747916bcae6d1d14627260fa82de4caea0d7 | Bin 0 -> 35 bytes .../5e399a625d3bb3c6447dafe42e4553fc16950f6e | Bin 0 -> 11 bytes .../5eb107e4dc5d78891aac3f0c1e83883b7a663fdf | Bin 0 -> 341 bytes .../6015eb2c2f9da9ac11698c60c65c0bb094a66657 | Bin 0 -> 23 bytes .../603588985367299d4b4e56c81186715fc8ab5298 | Bin 0 -> 15 bytes .../60603d960234eaa4cf2748d2f8b43e1303171ec7 | Bin 0 -> 7 bytes .../6235a1b078cf86f65be51d3e4d952688c0cf4027 | Bin 0 -> 37 bytes .../62618378c0f30271418e65d9642b681cf5445c1e | Bin 0 -> 7 bytes .../62d8ba9122d4a19be633439c04f949e0683f417d | Bin 0 -> 133 bytes .../63fbf21dc690999b09177bf4ac4216676ed26b6e | Bin 0 -> 62 bytes .../64ea37e683f8f7ad3eb0a9c4ad19d82cfbdc9774 | Bin 0 -> 389 bytes .../658886802343686540cb41c5499a46f1705b9d5c | Bin 0 -> 4 bytes .../6614bca5723ef48592ebb2efee5bc73e17760aee | Bin 0 -> 5 bytes .../664bd1be9730de5ce106f7b2d87774e6549c6ada | Bin 0 -> 26 bytes .../66a6d4bff6fa7a62ec7a16d9bf5adf706efea00f | Bin 0 -> 17 bytes .../66b622ca15899fc16af4040369d852faf77fd604 | Bin 0 -> 125 bytes .../66cee929f075d88bfa46887e565b5d3d148f9154 | Bin 0 -> 34 bytes .../6a8a9d4ec0485d6a585db4b56ecfc8779e7888fd | Bin 0 -> 5 bytes .../6af377722221a297079f87c07a93c2189ac24fb1 | Bin 0 -> 18 bytes .../6b557d729ebff7f4da9b746da200980115618627 | Bin 0 -> 45 bytes .../6c4fb24e430367960280c066b72fb107b1c424ab | Bin 0 -> 10 bytes .../6c6e255ee96eef814112752fe189fae0dfe78743 | Bin 0 -> 36 bytes .../6d44e5997f87b024c53eab22f5912e1988cb66f3 | Bin 0 -> 6 bytes .../6d512f956c75ca835d38cbcb6e26e1a2473abd08 | Bin 0 -> 80 bytes .../6d72ae632ce79e9c197f5ca799f667d61d2a3df8 | Bin 0 -> 83 bytes .../6e62c2d775c1c825125cab26e5a4b004a06a4ba7 | Bin 0 -> 68 bytes .../6fcdcf3781990fdceb9b08ba304283f1fd8f9b4e | Bin 0 -> 149 bytes .../7016224c7c5f50c8e8aeb6e43851f5e958aa36da | Bin 0 -> 37 bytes .../709dcef4bfe4c6162c6a983a3d12eb20ac5cbed7 | Bin 0 -> 130 bytes .../70aed57684596e5887c493a5a79dc1d6bcb5eb43 | Bin 0 -> 41 bytes .../716d1769833e864f111085008d8322d53a4daf30 | Bin 0 -> 67 bytes .../7194db810c5947f300d6035d2a4a743090210e21 | Bin 0 -> 3 bytes .../71a5590952fd84047c6d6e9be45bf1f045355625 | Bin 0 -> 16 bytes .../73a854c8805585f984236fa44232cb965b9083ae | Bin 0 -> 225 bytes .../74bd0a894550c238cee609bb561591118137bc37 | Bin 0 -> 103 bytes .../75977e3e56167889e781b65443e91eb49902cfbf | Bin 0 -> 89 bytes .../767654d5cbd98934fc45a7ba38f606c4efe7e359 | Bin 0 -> 35 bytes .../7737f7fabd55d3fff123dbc65fee826311c2580d | Bin 0 -> 603 bytes .../77453d8dc39b44fdf3c80a0ca80c7ead9149de84 | Bin 0 -> 465 bytes .../788e547a1eb3cab3960e638885457a0fe112904c | Bin 0 -> 11 bytes .../7897d38321a88305b14831654cdb32ba40665cfd | Bin 0 -> 20 bytes .../799ee6b016fe616eec6ee67f1977744aee58aee0 | Bin 0 -> 8 bytes .../7a0cf48bba4dafb8f490124a89977a93c73988b4 | Bin 0 -> 425 bytes .../7a26e6bcc857b6e9b797b3c918f2bcb1a569ddde | Bin 0 -> 3 bytes .../7a34b6c09a1ec38856874d086cf899709fa20650 | Bin 0 -> 430 bytes .../7ae9e827c496473c836ad4de36f8b029cbb005c8 | Bin 0 -> 21 bytes .../7bc478ddfb9efcd7b4650c00e27da372d2cbee86 | Bin 0 -> 7 bytes .../7c9291251d2b1628c0bf6b31e2074445408df3e9 | Bin 0 -> 9 bytes .../7d7bcfb836b397d537c2b3649c86e9a9c48303e0 | Bin 0 -> 98 bytes .../7dcb764405ae26b71cb127b30336b45fd802640a | Bin 0 -> 12 bytes .../7dde4f40a01dfa3b917b86b8bd035929132f32db | Bin 0 -> 566 bytes .../7e01c8cdc6b1904415e575240588c4759047692d | Bin 0 -> 10 bytes .../7e10b31e7041e9432b39bb1ae327355d96dfd62c | Bin 0 -> 165 bytes .../7e479935227c90be28bb8a6261fe2141a12821e5 | Bin 0 -> 18 bytes .../7e6775e595a452e61552a68facb7aa884fc579e5 | Bin 0 -> 194 bytes .../7fbd42707b95e15ea0584236b080b01a86041f0a | Bin 0 -> 279 bytes .../80347f920096695efda11b33e2c2d06024c0c82a | Bin 0 -> 19 bytes .../808863bfb504bd1a7ba89b4f8eb8c118a9125798 | Bin 0 -> 24 bytes .../80a0247ebe3fd2aceff058d956c1c921ed7681a4 | Bin 0 -> 205 bytes .../80d94c313466452d7b50fd144838a527809f2c7f | Bin 0 -> 17 bytes .../80f348579a9a803a72d4a4cccd54824488b55aac | Bin 0 -> 5 bytes .../8211bb03478a5a26c1fb40236780cbee8da45a06 | Bin 0 -> 5 bytes .../833ca5a7d4cdf2c1867491c242ece799a01d77a9 | Bin 0 -> 3 bytes .../83a58c921e3f326f742c80f8b885c6c6dcc68803 | Bin 0 -> 21 bytes .../83a9bf595bc7dea203b912007f70743b88f7af95 | Bin 0 -> 35 bytes .../83cd63c7765c3f1d6f7f4f1f9b032f8efd46b3ef | Bin 0 -> 31 bytes .../8476e6af7e75aa144bad68b33b499cdac5da2bf4 | Bin 0 -> 5 bytes .../8477039b36c6e7e796ce4036aa78d32e00ce0103 | Bin 0 -> 419 bytes .../85232cbda473f24e2195b75d84e387f25956a358 | Bin 0 -> 34 bytes .../860f19159238baa82dd6680e5f00cd818d869fca | Bin 0 -> 520 bytes .../86c5f1d7668cd16af68c6901ef37d10a929b937e | Bin 0 -> 138 bytes .../875d260c6259b312bf7adc25aa6d37de04cacef9 | Bin 0 -> 4 bytes .../87870c833802ae370b72ded06d6b5466283e5189 | Bin 0 -> 33 bytes .../882f2aaac218ec0d84736ac2c55910a4594a1eae | Bin 0 -> 44 bytes .../8840b9e11ea5d3aea427c815ebfe1896dc3b765e | Bin 0 -> 13 bytes .../8873098a4246f81ee6e5576070d0a7244b3ac9f3 | Bin 0 -> 612 bytes .../8904890ebc3c9798fabda724359e14379698ebd4 | Bin 0 -> 288 bytes .../891f275cd08dde2776d7140e46cb047faf9f0f8d | Bin 0 -> 43 bytes .../89371ce91fe1a6d01ba115e5bf54bf577340b8eb | Bin 0 -> 565 bytes .../895e8fd679feb6a39068aba3d31fb206089a064b | Bin 0 -> 5 bytes .../8a00c440fa5a60b20d2c8085a38baeaaf3c5670c | Bin 0 -> 66 bytes .../8a88097f625c33cc9cbe29343feb52ab248b5c1b | Bin 0 -> 4 bytes .../8b0a819cd3fc4d68cf3e0e0855f7ebcd89a20317 | Bin 0 -> 8 bytes .../8b98620ebbf7bab27f5ca3fc0ec663cc58c76db9 | Bin 0 -> 132 bytes .../8c623105d5f0f8ac252343c858286d65b992687c | Bin 0 -> 33 bytes .../8c74dc0dc68a7e61878314355623c887ace5eefe | Bin 0 -> 1284 bytes .../8d19aefc358ee1284e3a594474f26015586dd9e9 | Bin 0 -> 58 bytes .../8dc12bb4d6f47bdce0349d159084f7a90ab432a4 | Bin 0 -> 280 bytes .../8df1c55d2c899a91d4de757ad55abeaee00718e5 | Bin 0 -> 364 bytes .../8ea0ce1a9c4c228095a13e76e7c43657f8bd6e23 | Bin 0 -> 11 bytes .../8eeef9f346f4ffdc8e3e6456301cf775d164c42d | Bin 0 -> 9 bytes .../8f1f1bdd61e03a0432e1425982bc95d4eed1dc8f | Bin 0 -> 32 bytes .../8fc80309676fc4e9b457cba583e09623e3a50e8b | Bin 0 -> 294 bytes .../9032685281013329ab00123038a24e88ee87e99f | Bin 0 -> 16 bytes .../903b7c38e142f05daeefa445f48a7da5630e1efe | Bin 0 -> 12 bytes .../90fb17406d6d1e431223bda418dc24452cd47cbd | Bin 0 -> 29 bytes .../910a4cd86e2bdc41e8e4ae4e06e918ec0bc91b61 | Bin 0 -> 97 bytes .../92180b5585dde95b54512c0aa418844642cfbf1c | Bin 0 -> 90 bytes .../92a9994a35a5751f87ec0261a50c46f6cac276c1 | Bin 0 -> 97 bytes .../932d2c4206b09575f98aba174b4ae7eeecf9dd87 | Bin 0 -> 18 bytes .../936b204683d9aace88edec6916348263f8845bd2 | Bin 0 -> 429 bytes .../94992041a722e9461cb4da61dc3ca6b1c807fc52 | Bin 0 -> 35 bytes .../94f232a0e1b64975bc82dc84a484907795dd3c9a | Bin 0 -> 68 bytes .../94f5a62a7150c24701f9b0ccc4f003afaf33b04b | Bin 0 -> 4 bytes .../951cfc17803941388dcb27de4933bcf3cfa4e308 | Bin 0 -> 11 bytes .../96080c9605fcf493be8852845bc14430217f7f10 | Bin 0 -> 6 bytes .../9623152b8ee14d7d2be5fd3ca2eef2085125a009 | Bin 0 -> 18 bytes .../965d67a89f658ebc162f41d13880ceb53878398a | Bin 0 -> 5 bytes .../969a5335de7a36dab4b48601f83e8289d1e24e14 | Bin 0 -> 103 bytes .../971e03f3b57ac29e3328d70fb6a901e50cc1e3c3 | Bin 0 -> 70 bytes .../976127759e62f70d02f40d83a2ed5b7951571ceb | Bin 0 -> 44 bytes .../97846c394ced714617a96b8b35b582e232a9e7b3 | Bin 0 -> 20 bytes .../9888bb78613415dc88bd114be3f2633e747ae22f | Bin 0 -> 19 bytes .../991945983caa4499432036384514d356d791b3be | Bin 0 -> 28 bytes .../99a14a1d0ef9a631b975d4e3d898f1fc28634572 | Bin 0 -> 80 bytes .../99c0f2d3879cc32cf8f28dbe298b8f51780b0691 | Bin 0 -> 4 bytes .../99c58901dd5b578c26d9f06a680cd1586d884d0b | Bin 0 -> 28 bytes .../99d75bc6a864abd29d7531565e692e87cd78ea7f | Bin 0 -> 130 bytes .../9af095b9240a4b086859755798d38cd676803dd2 | Bin 0 -> 10 bytes .../9bef829363a2ea30f044c9521dc187bac9e518e8 | Bin 0 -> 19 bytes .../9c098fec348d1fb7ebd8f71dc3253896efec0698 | Bin 0 -> 43 bytes .../9c5122ab103de543630bc727b76bd7b21839c073 | Bin 0 -> 45 bytes .../9d89da8664157ea1b5faa5bde8caf9f31d85b4a4 | Bin 0 -> 430 bytes .../9da97ed219829e31b2b2a551b3ba371c7d7ab7f7 | Bin 0 -> 6 bytes .../9e1bf8c243c01b2c171f28550c25b974eb3fc910 | Bin 0 -> 88 bytes .../9f915817eadb6a53e1ba53785c9e39d3addfb7a7 | Bin 0 -> 18 bytes .../a019adfa6af044c1f3102fd4eb35f3883eed7767 | Bin 0 -> 5 bytes .../a03d6067a14043eca56172c64d9d734bbc6d3453 | Bin 0 -> 560 bytes .../a0c3025c93be787b318b0a0915efce0568f29fb4 | Bin 0 -> 151 bytes .../a0e3646d2ccccb4a16225b1c4995d6053b4bdd4e | Bin 0 -> 7 bytes .../a0edc24b3d17348f5cb80d2b6b002ee58db6b035 | Bin 0 -> 6 bytes .../a101443f19af96e9408021094d007f3da407fb7f | Bin 0 -> 10 bytes .../a116527e7791e8cfe660a8c53382415e74b1634e | Bin 0 -> 1480 bytes .../a1ca34f30d867511c5071bd62a0ec9532226a626 | Bin 0 -> 424 bytes .../a204e6fc1dd252eb72786637ece539fc8ccb08be | Bin 0 -> 37 bytes .../a208cbe77067c1b6f065b09fc05a11f79843e4cf | Bin 0 -> 78 bytes .../a24bab38ef7386f98fc7f93be8d07c3f6ceb3ece | Bin 0 -> 7 bytes .../a24c8bbc68f5bbc75f9e4125919196e52f3b3419 | Bin 0 -> 6 bytes .../a259e1a662bcc421d6834afeab3a47dc344eedba | Bin 0 -> 4 bytes .../a2967df1f22ff6eb94dc4837d98507c543aae3cb | Bin 0 -> 6 bytes .../a29d6d6337656a0bd738e477cdd90231050f37cd | Bin 0 -> 6 bytes .../a2c6ea965e4b89873c59972ad24de3521f5ec565 | Bin 0 -> 13 bytes .../a3be9919f350dff90746d5bbd335e9c13e075c6b | Bin 0 -> 18 bytes .../a45e530738453fbacd12389fc0b7c6bb0b5908b5 | Bin 0 -> 8 bytes .../a4fdd8e51e18577132e9b1d5d9e8504e4d3c96dc | Bin 0 -> 19 bytes .../a5091dc3125fa52413368b176e86a49738c917a3 | Bin 0 -> 37 bytes .../a5bd5b33d21e9a221872d7ea360f18433d3f3be1 | Bin 0 -> 16 bytes .../a6a2deed0d75339e09924b0f19655f6656a15f4f | Bin 0 -> 66 bytes .../a81a394ce3ae2d25c0ee201c6578069a1b174e55 | Bin 0 -> 17 bytes .../a9bcae8634ddb628111c2eedd0fcb768f85ff9f5 | Bin 0 -> 11 bytes .../aa19f2bf66f2268aca0d9eca37dbc685625342a8 | Bin 0 -> 442 bytes .../aa597b4fbdaf9c8d1c9a17426569c76134ff0fb9 | Bin 0 -> 267 bytes .../ab437c655c7ad4f2d048b93a9bb3306d0d560e0f | Bin 0 -> 138 bytes .../ab7ec188984da88b4ab1fb8082a95165d2341dd1 | Bin 0 -> 488 bytes .../ac0b4253921b9410c5dc7fb082cedf8836ccbcf6 | Bin 0 -> 11 bytes .../ac15ecf3a7ca5b032a266d1e9e008ee0aa60df50 | Bin 0 -> 30 bytes .../ac20951ae95689b3ead13a8095570c9a2ed30e5e | Bin 0 -> 34 bytes .../ac7e926bb0bd586f189a08bd9887dd903b7ca7ab | Bin 0 -> 281 bytes .../aca10067e6738a677ea8f18c501d1078bc89586b | Bin 0 -> 4 bytes .../acd71bf955344d94564db8a7d3ab6ed13f5f30e5 | Bin 0 -> 131 bytes .../ad121b61847802cec3b334da80f661e215dd16d3 | Bin 0 -> 32 bytes .../adc83b19e793491b1c6ea0fd8b46cd9f32e592fc | 1 + .../adcb06d68c467bc49a484a781f3645f2e0fce25d | Bin 0 -> 7 bytes .../ae4efce72909d7c1fc095fa47f3cf98f4a7ffb34 | Bin 0 -> 6 bytes .../ae9c533353214d987cef18fd97d4fbaa24c39c09 | Bin 0 -> 6 bytes .../afeb1f561aa265b0793c0cf08ffbe986ba95cccd | Bin 0 -> 4 bytes .../b02b1b59c1aaf66b44b15dfc215b921a276f23e9 | Bin 0 -> 195 bytes .../b071ec550ba1741734797a724d10985838abe3f0 | Bin 0 -> 146 bytes .../b1256a6b51fe7e4af001152847a41e23822312fd | Bin 0 -> 7 bytes .../b1898734ba5a8617c5535e2ec02feb33764c5da7 | Bin 0 -> 48 bytes .../b1ac04528499a30c79bb5a6a887c7f093ffd3d7b | Bin 0 -> 38 bytes .../b27345719ecf784b471e96fdc2407baaac45ecd0 | Bin 0 -> 4 bytes .../b378c4f7a72199ec1da13bd6756d4487ac1a9fa3 | Bin 0 -> 7 bytes .../b399c00c30a1356525d5d39e7cfeb99b2f878bee | Bin 0 -> 19 bytes .../b41ca4c43c7c6700e337d07a188f3f1a8c13fe46 | Bin 0 -> 1255 bytes .../b41da924198c3920fdaa0b0ff572615dae93f7dd | Bin 0 -> 74 bytes .../b4899afd21a1c4c6eb7459bf91ed43689919798e | Bin 0 -> 9 bytes .../b49b6c4ec35af87447943af9acb1a14a637ba4ae | Bin 0 -> 12 bytes .../b49dddf68a09edcb754e5d95cadc35e2683df728 | Bin 0 -> 827 bytes .../b4c66e7c06855671e747f3100c9d5072b79cf83a | Bin 0 -> 36 bytes .../b52f85fe855438edbb3177ba64ea88040c5068c3 | Bin 0 -> 3 bytes .../b5945b57aad75381e3a3545542330957d8af699b | Bin 0 -> 40 bytes .../b5eefc1ac36df7e12eaf561ea2198bd05650348f | Bin 0 -> 38 bytes .../b68b13e7dbf523d3850bfb4ee1879ee267ce1309 | Bin 0 -> 5 bytes .../b6f15ce61e23d12e16ac972ece7ecb71a1f4c87a | Bin 0 -> 10 bytes .../b7294356ab92ecb2a8f35f0b61cb2f3fc68af2f7 | Bin 0 -> 83 bytes .../b7719b430c03af92aef14110ee2fbf3abba0de5d | Bin 0 -> 4 bytes .../b7cd4bb8ad5ec4e73e07a3cda397faa3f19e4286 | Bin 0 -> 131 bytes .../b8e9125a0ae565f71d1d93249e347d56068d42bf | Bin 0 -> 133 bytes .../b9a93efe3d76aecec38a121521ae64810a0769c2 | Bin 0 -> 34 bytes .../bb1e5e53f6a1253fe1e896b50e9edc0095e2932b | Bin 0 -> 4 bytes .../bd7c4c25399bf8f278eb615f58b75b8f72349bf6 | Bin 0 -> 35 bytes .../be7f31b717f86fda96b3148fb706908303e17f8f | Bin 0 -> 642 bytes .../bee6d10492fd61954b05c5108f958c5406b30fc9 | Bin 0 -> 4 bytes .../befde2b724d2370f61d7dc2da95d1be21a9c862b | Bin 0 -> 73 bytes .../c02bf5d08db57f3aae88172e17cad08ebd076c22 | Bin 0 -> 114 bytes .../c18fefd5d4d05d1ee9f162801aa6e17f428ba8da | Bin 0 -> 9 bytes .../c1b2bcb63da8041ce87b328132217ba70d920fca | Bin 0 -> 18 bytes .../c1df12a64dd8abefb0e6590527cb10ed692cf324 | Bin 0 -> 1154 bytes .../c21a4d67d547c0845676886c6892c8c6827d75e2 | Bin 0 -> 8 bytes .../c2bec5c726a06b456cdd88f28a32f48831044a11 | Bin 0 -> 130 bytes .../c32505224c93f972f500f44afb188d3889dfa159 | Bin 0 -> 36 bytes .../c3670cccd1b3582fb1ec1b742f6e2898cfe26555 | Bin 0 -> 335 bytes .../c3ed53cf882409c54cc6c988aae34deacecf057a | Bin 0 -> 44 bytes .../c63072e6cf44fde5c8ec3e7ea1a5328497ea5479 | Bin 0 -> 98 bytes .../c6435d401d81e17e25e273719e4f1fa7fe1b53b7 | Bin 0 -> 949 bytes .../c70643d26ec7090724a54c6e87ea68c89d4c4e91 | Bin 0 -> 75 bytes .../c7fb3f5be75a6dacfc3e28abbf73fe5e58495d30 | Bin 0 -> 4 bytes .../ca576072e488152f50e6f1158a1396f73ddd2c07 | Bin 0 -> 4 bytes .../cb2edb9e0c977a705a6f29fae0934079a1b60c92 | Bin 0 -> 185 bytes .../cb864d68d0b90ecc000956495f457f2da8cc0181 | Bin 0 -> 6 bytes .../cbe9914a17fe70a1883c2dab7491fd0211a5ee38 | Bin 0 -> 38 bytes .../cc34b4cfee9dc462dcc95d7560a21cbf4adcf7b0 | Bin 0 -> 824 bytes .../cc652bd0ebdb4b1726182372be30c691099f7e8c | Bin 0 -> 61 bytes .../ccaac59aa2a93544b76f073311b350dcf65fbf5e | Bin 0 -> 4 bytes .../ccc73c223aabaa38c58624ea80eb778c645346f2 | Bin 0 -> 255 bytes .../cd04f9a383899d9640ff1e9707e47e77afdd9562 | Bin 0 -> 71 bytes .../cd2ef6d312ee80a3d4c377361fddbb793889f4c8 | Bin 0 -> 53 bytes .../ce010e3e4729a79b9793c64a4532b53c54c9430c | Bin 0 -> 27 bytes .../ce3e985cb8f77fcd48e3ea06f922260a2dd36fda | Bin 0 -> 131 bytes .../cf7e04eb0562f842999ecc3f4ec6877fa4f1e342 | Bin 0 -> 24 bytes .../d1020364827748c3a6e1bf09c6e75a5edf44079e | Bin 0 -> 119 bytes .../d19cd0207ab449752da6b55a82975be7f056a70b | Bin 0 -> 6 bytes .../d1ee881e19534be9fc12fd862bb3f2269a09bdd7 | Bin 0 -> 37 bytes .../d26ba8c01b80dbb3ea1a50d429b832a33b6af614 | Bin 0 -> 18 bytes .../d2b69ab4a6972e182cdef5c319be940062388300 | Bin 0 -> 4 bytes .../d38a79abc527773b20840f0ac21b618049746c32 | Bin 0 -> 19 bytes .../d3ae4114281302b6810c02cee903e2f05aea79ce | Bin 0 -> 9 bytes .../d3c908f06f91576b96d60c7b165811e69993ae78 | Bin 0 -> 9 bytes .../d42d277470474b4dbf7a5181f298b299d3028a1a | Bin 0 -> 13 bytes .../d488eca7d059c07b0f9e8ad7d7206ace887cda85 | Bin 0 -> 3 bytes .../d51ab1559f11d168cd4cdf123602113f60732e79 | Bin 0 -> 5 bytes .../d8130b7018da880f1090b166df7bb13810f101bd | Bin 0 -> 5 bytes .../d8e267ac5306c3dae043f15df37dae5b76a44a52 | Bin 0 -> 138 bytes .../d9437de0ae53e80a335a15a00ec9e622f2fb89d3 | Bin 0 -> 6 bytes .../da5dc3160083ac54ec11a162d23293ffef7029c8 | Bin 0 -> 123 bytes .../daa6495ffb6c5cbf5cd3dbf3b7b8bfc42803d1d2 | Bin 0 -> 29 bytes .../daed34b7f0f3a2f9b0716b14514473d6efa38c3f | Bin 0 -> 37 bytes .../dba6c808eafe79949543a1f50ee39f82de48ccee | Bin 0 -> 40 bytes .../dbb41d9522e68d0faf7f5a03f41aed64e7b9d7ee | Bin 0 -> 5 bytes .../dc119760a36e1c532dc48cf83cb4ff18cbef6c15 | Bin 0 -> 131 bytes .../dcc6432dae6ed005aaa9f060c4909bb89c1d98d8 | Bin 0 -> 59 bytes .../dcf81fe92865368756d9729c63739c37b38f037b | Bin 0 -> 33 bytes .../dd0da9f51f2783d95680664efb3f5a322ee885b5 | Bin 0 -> 34 bytes .../dd3f58c65c86aea5827d99b4fe213b183fc79107 | Bin 0 -> 27 bytes .../de676ef0bc27e3411664f351ea13ee0f2901a8f1 | Bin 0 -> 258 bytes .../df9bc143232105f71dbc4cd6f29f1faf40adc348 | Bin 0 -> 10 bytes .../e01aeb76d2ded444ad0373a68f2c784db09ca0bd | Bin 0 -> 18 bytes .../e0938f8484d9bc11fc2e6c6a95b95bcda639c25a | Bin 0 -> 9 bytes .../e0db3d59e7b298f022cace1fd52d3875e5fc9694 | Bin 0 -> 27 bytes .../e255f1112e76bf142d77ee3c42cda90853fefeaf | Bin 0 -> 140 bytes .../e26caaba5987ef0e4c8e8960a65d163eb739b2a2 | Bin 0 -> 25 bytes .../e27d3a4fd0455fcd2766c39bf0c71431549a65cb | Bin 0 -> 35 bytes .../e2ca6c74ac95f6b766e427545f297fa1df3e7ae8 | Bin 0 -> 129 bytes .../e358ad9b805d394bdc48b7258e0c3b8becb2513b | Bin 0 -> 9 bytes .../e36e20af158c5a94704e98e0ee695eca5c85d557 | Bin 0 -> 5 bytes .../e4faefa4502eaf582fb184a2300122f40de097af | Bin 0 -> 3 bytes .../e5f2b058f54b45dc07f3b9d6e4637e8b7af2c5a7 | Bin 0 -> 126 bytes .../e72cc6d41d020b5c579ab185b34447ec9520f86c | Bin 0 -> 18 bytes .../e82759d6621dc86de4cf5033868a3673e74053dd | Bin 0 -> 4 bytes .../e8546e69f53ac69e138b8a739d321f629be57164 | Bin 0 -> 6 bytes .../e8d8ab82dea469e3e3c7a536df5a77e3ad899129 | Bin 0 -> 294 bytes .../e8e793189ab4cce6a062fa09c0740693b6ce1e19 | Bin 0 -> 10 bytes .../e8ec7cc1ca98820ae6e98c1354ec2d6bece46ef2 | Bin 0 -> 131 bytes .../e91c47ea25efbbfb60ba17d786caa9659bbab6d2 | Bin 0 -> 130 bytes .../ea17e12d2e985a026980a016b72acacb30244a76 | Bin 0 -> 19 bytes .../ea69aad1620b5025cc85f415080cd799b66ebc68 | Bin 0 -> 6 bytes .../ea6da9d77a360c4826d1a29c2bf40e9209bc1c0b | Bin 0 -> 7 bytes .../eb2f5a2dd2fee2ef20a54406427e10043b345485 | Bin 0 -> 717 bytes .../eb6be60b4aa6b17f16953f6095b6ea7efa92f6d4 | Bin 0 -> 16 bytes .../ec34b45a65e9bad07d332490983b305e6f1d358b | Bin 0 -> 395 bytes .../ec6905048c1682c644f01e41531ab3d87e0a2247 | Bin 0 -> 7 bytes .../ed2df06c65bbfdf156d4afc88bdc66d9d3290613 | Bin 0 -> 9 bytes .../ed93b3caa649c0dc8d2e7bc2fa885ecd7ad0ba36 | Bin 0 -> 3 bytes .../edd491a75e971973bd4cd9dc84a0023cebd62f92 | Bin 0 -> 39 bytes .../edf2f1a4740661b72760a302a261518fa842bde0 | Bin 0 -> 13 bytes .../eee58a61a1959843405fb465464ec698f6181a6f | Bin 0 -> 5 bytes .../ef6721b59164581f5525e2e2f16bbdb626de6ba7 | Bin 0 -> 7 bytes .../f05b2bd236751d7863172a380f5ab4315344968e | Bin 0 -> 13 bytes .../f0c16a24aba99a02eb9924dd4a4725ab8e92ffad | Bin 0 -> 24 bytes .../f10576d1e2fb48314b8dfbfbeb5d708defe6097b | Bin 0 -> 216 bytes .../f17479189c9591f3c73906ed84b33b87ac6e8e1f | Bin 0 -> 23 bytes .../f1778e9e69871a38d2ce4d8b7c4a3e0b35ece46a | Bin 0 -> 8 bytes .../f2e3dc7f73104b527baf917360356e7994267cdd | Bin 0 -> 2178 bytes .../f3b6007923c6e42984caf9c5fb239cf38815e841 | Bin 0 -> 30 bytes .../f3da8335de7de651461ad28357d506e940d18bdf | Bin 0 -> 71 bytes .../f40831624c06f31927bd2af861887ad578246010 | Bin 0 -> 4 bytes .../f4ddda0ae8524f4f632d5d03291b59acc1952a74 | Bin 0 -> 110 bytes .../f53e9d74f34d349f856d8aba3f40712bcfe8d916 | Bin 0 -> 3 bytes .../f5581adcf52c7acfd5fa26cbb317231aff1d9ed7 | Bin 0 -> 106 bytes .../f57bb62ad6d29b8f4d1fb3baa4474f3af4e0cbab | Bin 0 -> 137 bytes .../f6117176339050e85b72129ff118f2713b118931 | Bin 0 -> 13 bytes .../f66e211bfde320bf50efe03fde1cbbbf5df440c6 | Bin 0 -> 18 bytes .../f6a16230ec874c52b6c1cd73ccc0b9dee2dd5574 | Bin 0 -> 34 bytes .../f7014162c0e7c8229146243ca875cec5757f6b39 | Bin 0 -> 34 bytes .../f7e31e99e09ddb661dc4a5f639f48baa48e233fb | Bin 0 -> 524 bytes .../f9373536de828c70789357df4be4069df64d5dc2 | Bin 0 -> 3 bytes .../f9a0b5a03a08526b1622f57bf3cefae54eb49abd | Bin 0 -> 566 bytes .../f9a6502095aa770e7213f96511a3d63f33757674 | Bin 0 -> 131 bytes .../f9b7f4ad29450f6bdf1baf2663c7b86a7ec39cfc | Bin 0 -> 16 bytes .../faa689e2f7b3c3877c1581ae943cffa5c037ffbf | Bin 0 -> 39 bytes .../facca3ae362b2fab961eb9e724b3790b1977d0a8 | Bin 0 -> 391 bytes .../fbe65ad556a0f0fe9b8215385e70da5555a3fba1 | Bin 0 -> 286 bytes .../fc880c8c473a9d0b14bb5827260c1170e8ca9535 | Bin 0 -> 156 bytes .../fc96ab8937b4d16598d2831e4d1f89df4b720d72 | Bin 0 -> 13 bytes .../fcc91d6415ebf086ccc8b84ef729d5099cc19a84 | Bin 0 -> 11 bytes .../fd958cb8a73d5d70d0be71a387c7973c3b1df2e9 | Bin 0 -> 16 bytes .../fdce145b982b47c9598cfe55883672e86727d5b8 | Bin 0 -> 20 bytes .../fe9a584f5c7c5d9eb5e4b15f85960ca7f1079a2e | Bin 0 -> 6 bytes .../fecd4b2d80be6971216cd554f44793b3b8adaba6 | Bin 0 -> 11 bytes .../fef279c42c269b2a38ccfbf781f73897284ec2b2 | Bin 0 -> 322 bytes .../ff5f77350f4850c12dc9576ea268de27bb55ade1 | Bin 0 -> 3 bytes .../ffcfd70e30e22415a17a3152c0ba1cc0f9f756a3 | Bin 0 -> 43 bytes lexer/token_kind.cpp | 103 +++ lexer/token_kind.h | 88 +++ lexer/token_kind_test.cpp | 93 +++ lexer/token_registry.def | 162 +++++ lexer/tokenized_buffer.cpp | 570 +++++++++++++++ lexer/tokenized_buffer.h | 343 +++++++++ lexer/tokenized_buffer_fuzzer.cpp | 60 ++ lexer/tokenized_buffer_test.cpp | 681 ++++++++++++++++++ lexer/tokenized_buffer_test_helpers.h | 172 +++++ 512 files changed, 2348 insertions(+) create mode 100644 lexer/BUILD create mode 100644 lexer/fuzzer_corpus/00b9598434d1cb0aca2446e5d8059f955898661b create mode 100644 lexer/fuzzer_corpus/01096186d4e1347ff16a01491d6ef629f5f5fd42 create mode 100644 lexer/fuzzer_corpus/011f63c979b2de6c44a0f974437ff176fb309cf7 create mode 100644 lexer/fuzzer_corpus/013a89a4caf353b43c203a2cbd270857c46863c8 create mode 100644 lexer/fuzzer_corpus/02ddec8b4855127d5616e521bc826659cb04a796 create mode 100644 lexer/fuzzer_corpus/0327df1d12e0abf8a355b7ed09e0228dc396d787 create mode 100644 lexer/fuzzer_corpus/037dc35353d675c9f4d2f03c9db8186422050b2d create mode 100644 lexer/fuzzer_corpus/04030ac2f55537459994c38435a6b7d00ae264bf create mode 100644 lexer/fuzzer_corpus/0543ca422553bae7a2e8b46a81c8fee7eb12c9a7 create mode 100644 lexer/fuzzer_corpus/0555830a8ac12955924bf235d97792583fb8d6da create mode 100644 lexer/fuzzer_corpus/05666d20f461b2d4a93030744abd619ce0f25fe7 create mode 100644 lexer/fuzzer_corpus/058baf2eca3ac04d3382c94dc213af644b547796 create mode 100644 lexer/fuzzer_corpus/05910a7c99851cbb657cfbf8850e1e67e98408b1 create mode 100644 lexer/fuzzer_corpus/062fe100147aaaf3a5f3f0a67c64991480597cfc create mode 100644 lexer/fuzzer_corpus/0685140d284f7c98815eb844fe6445ac2e4d25da create mode 100644 lexer/fuzzer_corpus/06b6c1a09f2ec62f93b7a3f1b03a2188700c8117 create mode 100644 lexer/fuzzer_corpus/075e66efafa8882c10f46de45be654ad1f930c1f create mode 100644 lexer/fuzzer_corpus/07f95640a7ba78bebf24bea549bd129d81d03f14 create mode 100644 lexer/fuzzer_corpus/085e5e94c0193bc313159a1aac208bc7232fa24b create mode 100644 lexer/fuzzer_corpus/08988f30662dbfc7a95bee73cef111dafbcd64af create mode 100644 lexer/fuzzer_corpus/08a189c1daec7835d24c69454657ea460add9e57 create mode 100644 lexer/fuzzer_corpus/0928b559c298c803b98e59564c8b6b5443ec1697 create mode 100644 lexer/fuzzer_corpus/09de090fce19575b878349e5b08e44774cf901b3 create mode 100644 lexer/fuzzer_corpus/0a44775851faa48a0293c03c5823526a05432a41 create mode 100644 lexer/fuzzer_corpus/0a73a50a6c6470643bc6ac4731df70e168a1d72a create mode 100644 lexer/fuzzer_corpus/0b02094a3c9673c0ca1a0f0ebb8a2a1cd334bd5d create mode 100644 lexer/fuzzer_corpus/0b50b447ee13e7ea31515670dee9cfe0159182a3 create mode 100644 lexer/fuzzer_corpus/0b656451855e16143574319c2c02c7278916e53d create mode 100644 lexer/fuzzer_corpus/0b7b607b163793a78dd80383f3dfc1283ae77822 create mode 100644 lexer/fuzzer_corpus/0b832ffe11d2337ca3efd79aa32140076d90dc67 create mode 100644 lexer/fuzzer_corpus/0b9b08eca9652ba3a3e389f051e0d19e5e46fd3c create mode 100644 lexer/fuzzer_corpus/0beed1e9ae76d37f24c30c22c0b254f8efb30744 create mode 100644 lexer/fuzzer_corpus/0c38e5795a262ad27f8130c77a4bc34ffe7eaa82 create mode 100644 lexer/fuzzer_corpus/0c5a294e646b32fc10624947911d167a7b550cf4 create mode 100644 lexer/fuzzer_corpus/0ccd028acb41f2d1902f9ce943084cf855977282 create mode 100644 lexer/fuzzer_corpus/0ce0d735a0d8e0c637030b8bed3bbcc3a3864866 create mode 100644 lexer/fuzzer_corpus/0d16aa665e382f2118a4788ac09401f0de985a00 create mode 100644 lexer/fuzzer_corpus/0d968cc12e55af8d4306e667c5c817b16b8e1b79 create mode 100644 lexer/fuzzer_corpus/0dfaf14bb1c6bbaf15c4840df4bbcba70727fb2f create mode 100644 lexer/fuzzer_corpus/0e3efc3ff89fc9956def38fa002510e8f408e4e4 create mode 100644 lexer/fuzzer_corpus/0ea6b54fd89072271de9d6db7291db91e412ba0c create mode 100644 lexer/fuzzer_corpus/0eb01abf75b501eab2e9f8cf7c0a46d150e8035e create mode 100644 lexer/fuzzer_corpus/0ec0f5fdb11fb62a0552c7e13a49c164b757b049 create mode 100644 lexer/fuzzer_corpus/0f1ba78b09883fc942f3108c0d0238e5bbba7261 create mode 100644 lexer/fuzzer_corpus/0f88a6fcd8459f99ca2009cc17572e4ee6c57949 create mode 100644 lexer/fuzzer_corpus/0fa6870ba61bffbcf4331293a0c36abf2a53745d create mode 100644 lexer/fuzzer_corpus/0fb249d887ffa905f90fe43c97cb0dea4277f682 create mode 100644 lexer/fuzzer_corpus/0ff985bb50cd92e0904ae0c3bf562a665a9761c8 create mode 100644 lexer/fuzzer_corpus/107c59baea92d5aa0b7daf7acc49d20b6a25d180 create mode 100644 lexer/fuzzer_corpus/108fb5fc2033bcad402775791f7d3a83a434d402 create mode 100644 lexer/fuzzer_corpus/10d4b9dc18446170ba10afb28ca65744f9010ed1 create mode 100644 lexer/fuzzer_corpus/11c0e4ea13d10a785b7298b416b5d1ec70cb9097 create mode 100644 lexer/fuzzer_corpus/11d6f314e0ee9b6b319c3e4961ad4b2c041e01f1 create mode 100644 lexer/fuzzer_corpus/12033d109a3ab4a4068fb4f5283aa8ef2b4b2939 create mode 100644 lexer/fuzzer_corpus/1388ff1c64cf1523471677300bcc78f2cb057178 create mode 100644 lexer/fuzzer_corpus/139cf5f51919c2f88794b3d6afecd894d3795bc4 create mode 100644 lexer/fuzzer_corpus/13a567de304d3293826a5915b124c898d905c533 create mode 100644 lexer/fuzzer_corpus/13a7d12471b67d795eeb620fd9bcd23e611716b4 create mode 100644 lexer/fuzzer_corpus/143df8b19029156bef78ed64f99f6a29847fd707 create mode 100644 lexer/fuzzer_corpus/1489f923c4dca729178b3e3233458550d8dddf29 create mode 100644 lexer/fuzzer_corpus/14b4cd2980fd137c24ea87f505d3ee4cadfde097 create mode 100644 lexer/fuzzer_corpus/14c55494f5bfead510993f7aa6b19f2a99d78e64 create mode 100644 lexer/fuzzer_corpus/15d136091465e9311ea3fff6a81f3a16cd472b9a create mode 100644 lexer/fuzzer_corpus/15f060997fb0309d15af20cf592235d47e6653cc create mode 100644 lexer/fuzzer_corpus/167feb1fda57dac588688aa0d0b7a50683620144 create mode 100644 lexer/fuzzer_corpus/1941ef6ffb0e99428fec8f63ce04c9eac4953bf4 create mode 100644 lexer/fuzzer_corpus/19c2134264582d9b56d13f26eb96e92d374574c6 create mode 100644 lexer/fuzzer_corpus/1a51e55c866f939f2d132aef8ff5e600242ec29a create mode 100644 lexer/fuzzer_corpus/1a7d939aee936be5d25799c3a57f8e8f3c851c89 create mode 100644 lexer/fuzzer_corpus/1a9160bf021e36d9c2bf8f783e5b24211dbc3a28 create mode 100644 lexer/fuzzer_corpus/1abb3bd834e95e4044a7eeca6e54a49d3c6ef802 create mode 100644 lexer/fuzzer_corpus/1af2d87f0c834bdfe46af5d5f18f014c3294c466 create mode 100644 lexer/fuzzer_corpus/1afe41bb4bfe01753e61e7aac1449e6fa2e96fe6 create mode 100644 lexer/fuzzer_corpus/1bb9f4d20b726e743eb6af284a699ce4afa36583 create mode 100644 lexer/fuzzer_corpus/1c62dba4b7e1567683b1824278e7686e26d52834 create mode 100644 lexer/fuzzer_corpus/1da4e90919ecbf001b876a4972845144cf042f3a create mode 100644 lexer/fuzzer_corpus/1ec7532018f463cad2ba3d6928fb3c6b46df398a create mode 100644 lexer/fuzzer_corpus/1f1e84248afa238a7417b29be35fee5af6ba57cc create mode 100644 lexer/fuzzer_corpus/1ff7f0b20cb7d2be88fe82f1779f71a9b860b7b8 create mode 100644 lexer/fuzzer_corpus/20e233dd43706cd6dff2c7b774cdc47ead78de71 create mode 100644 lexer/fuzzer_corpus/213764f0401b8e8a9040c21bc153edff9286d315 create mode 100644 lexer/fuzzer_corpus/213be3df2b6b577edcbb6f913298974fbb8d7324 create mode 100644 lexer/fuzzer_corpus/21ae4af22c4c258550b92d3cea9ce479a88c12a2 create mode 100644 lexer/fuzzer_corpus/21c85dd996a874a885825773fe3ae6f66272ae77 create mode 100644 lexer/fuzzer_corpus/21d6931263d831c0aed540fd1bab0b60799af038 create mode 100644 lexer/fuzzer_corpus/21dc828f45d060ee0455004297b50d2b64d17e02 create mode 100644 lexer/fuzzer_corpus/221c22da6c2c0fd71d5ebc21876fd57cb77b1b00 create mode 100644 lexer/fuzzer_corpus/22812a981f0458f49a0cae159de66a24631464a3 create mode 100644 lexer/fuzzer_corpus/22854bee28c089600335e2c16d6c6adad03fba54 create mode 100644 lexer/fuzzer_corpus/234563c77ded0c75e0583be09a1f4a8a016b8024 create mode 100644 lexer/fuzzer_corpus/236e3801dd0cf62a835705da142af1587e498516 create mode 100644 lexer/fuzzer_corpus/24426f52ba7ad6d178e9e20cb28cf9182d51871f create mode 100644 lexer/fuzzer_corpus/24586a887ef47d547a4bea0a89972fcf3c19c454 create mode 100644 lexer/fuzzer_corpus/2600c18db42bde973e72b07f0dadf5d32fbfc48a create mode 100644 lexer/fuzzer_corpus/26514fd3aa2e7d09114d7b5c971e9cbc96e49aba create mode 100644 lexer/fuzzer_corpus/26ffdd8987ca20c37b2e8b30866e534342d1c175 create mode 100644 lexer/fuzzer_corpus/274399a85ea96a507d87d6199c58ea701113ec73 create mode 100644 lexer/fuzzer_corpus/28135abd5f66044cb0fd6f82a3b0dd81b2059593 create mode 100644 lexer/fuzzer_corpus/281bc1b2b4a20d112c7ea17951397b5a789b5ee8 create mode 100644 lexer/fuzzer_corpus/28434409ed42ff7b5f6cf4c0731765f70aae12ba create mode 100644 lexer/fuzzer_corpus/29b8dee814dce4d94d388d035c10d4f6149b934b create mode 100644 lexer/fuzzer_corpus/29c07937042029d42ded435734bb17a9da1a13ef create mode 100644 lexer/fuzzer_corpus/29dd4eab6410e5cad789f8ad21b564f5ff580b62 create mode 100644 lexer/fuzzer_corpus/2a6775c7917e01ee00754918264977fdd60f15ea create mode 100644 lexer/fuzzer_corpus/2ad3087a982396bd302d9d445d6c5423c248d3c2 create mode 100644 lexer/fuzzer_corpus/2b58f8d18c8ddfb98618711a7da2afd0efc9bcf8 create mode 100644 lexer/fuzzer_corpus/2bea1061181244323cdf95ad6a489b72ee38d225 create mode 100644 lexer/fuzzer_corpus/2cce2108f1d888fdecf0c406fd5fb2ab0448d88d create mode 100644 lexer/fuzzer_corpus/2d1f6ee26e62965c25a2540c47cda839e86cbc9d create mode 100644 lexer/fuzzer_corpus/2e047eb1a04b386c558490f7634175199fb86d2b create mode 100644 lexer/fuzzer_corpus/2eca067d0407b2ce79b7fe3aa0abf38b48178e16 create mode 100644 lexer/fuzzer_corpus/2eca430ce72ba8cfe14a36dae22c3af594455d78 create mode 100644 lexer/fuzzer_corpus/300268d606563a63b1fa078deedf83afcaaae4f0 create mode 100644 lexer/fuzzer_corpus/30122a51022d504d0bd883ec9083db0ebc122f3a create mode 100644 lexer/fuzzer_corpus/3055e6fc37e2846c56a0a7ef9c910807325c2df1 create mode 100644 lexer/fuzzer_corpus/30a79f74923a4a0450c38b8d78c32dd0ec49fb1e create mode 100644 lexer/fuzzer_corpus/30d2affb78dce801693964e7aa7a776e46764142 create mode 100644 lexer/fuzzer_corpus/33970181a654f47a1b7350a040f66460573c2b37 create mode 100644 lexer/fuzzer_corpus/33fbd678677fdcc9ff26ce50d77282550ed7b152 create mode 100644 lexer/fuzzer_corpus/3410eb3f248569d94b015591f12cf76034f8c64d create mode 100644 lexer/fuzzer_corpus/34c37b9bcc5ca133876f590f4225bd361357eb13 create mode 100644 lexer/fuzzer_corpus/36388f570f44f86bc535dc8e510721d1c28a0637 create mode 100644 lexer/fuzzer_corpus/36444b4480602bbc82c421d3a5dca926ee56f17d create mode 100644 lexer/fuzzer_corpus/378f7e36a287439cdbcb171241c946981517e6b7 create mode 100644 lexer/fuzzer_corpus/37d5919815fa0c3579c90f5882bc78d2175f2658 create mode 100644 lexer/fuzzer_corpus/37d7800daba869cfb014eb10e5f46a67fbbbf14d create mode 100644 lexer/fuzzer_corpus/38197ad1d6330f1836fecfc754c19dcfe8d8da6d create mode 100644 lexer/fuzzer_corpus/383ecf2dd4fee1f6fad7a2fc6a1014ea612cc705 create mode 100644 lexer/fuzzer_corpus/38aae1be66ab0f6d35121b4372baa54f3a734cd1 create mode 100644 lexer/fuzzer_corpus/38d2de4fb4421617c287855ede415e253edf27fc create mode 100644 lexer/fuzzer_corpus/39cbaf1cff432636f99ae2086461c48f081f3608 create mode 100644 lexer/fuzzer_corpus/39fbf7272789a966efbe93fc511b64c764d89513 create mode 100644 lexer/fuzzer_corpus/3a33064962ff92045a47b9409449cf1552d685d7 create mode 100644 lexer/fuzzer_corpus/3a3fc43f4c64d0305c0d697a33acb209e48971af create mode 100644 lexer/fuzzer_corpus/3a85b6e409d6180559bbaf0282fe374734ac8ab7 create mode 100644 lexer/fuzzer_corpus/3aef9b8111cb335c85a241d9f59929e11707730f create mode 100644 lexer/fuzzer_corpus/3d6d742aaaea3abffa078fd4c03af3cd03c5bb94 create mode 100644 lexer/fuzzer_corpus/3e21eed3aab591d3aab15d975b2660648ce7bc9e create mode 100644 lexer/fuzzer_corpus/3e23582c9fe275a17897308f4529ce965ef26639 create mode 100644 lexer/fuzzer_corpus/3f0c682d7231780f496758f26a19dea90eb0a63f create mode 100644 lexer/fuzzer_corpus/3f128a449c26d99e65f137b08835072d0f4fa93a create mode 100644 lexer/fuzzer_corpus/3f5305709a3b6e105cf4b8c1368a8d5c0540a2da create mode 100644 lexer/fuzzer_corpus/3ffa1177da8e5aa9fe3d071384f8958da89d40a6 create mode 100644 lexer/fuzzer_corpus/401b5ffa27fd9bcc9c4c99acc3294b51b7ab5435 create mode 100644 lexer/fuzzer_corpus/403d7b69e46cde2a0c35e051dc0343b283943a6a create mode 100644 lexer/fuzzer_corpus/419ccf5d9e7c1a163b62230196e1154953a91f9f create mode 100644 lexer/fuzzer_corpus/42880c44925ec18e3a69b2274b05e0aeff25e454 create mode 100644 lexer/fuzzer_corpus/434337b14da4a5fb3cdc96cdf47f17517583815c create mode 100644 lexer/fuzzer_corpus/4351e9a0bb6b53c76164f05125a112cb283cfd81 create mode 100644 lexer/fuzzer_corpus/4480089669b1f8da9065f5eb9491687d9e31e9da create mode 100644 lexer/fuzzer_corpus/4487fe428cf14de470fa39e874acece46fcfcbe8 create mode 100644 lexer/fuzzer_corpus/44df8bdb51a76972b66deb94dfdf5783de99a64e create mode 100644 lexer/fuzzer_corpus/467d884be458d07e7fd5bdda5fff78c9133a1212 create mode 100644 lexer/fuzzer_corpus/4852364d47db4ef47740f9184a39e0631aa69cd0 create mode 100644 lexer/fuzzer_corpus/487b9de35feaf3e349a411438344e46c870120d5 create mode 100644 lexer/fuzzer_corpus/48ba5eedfbf3c64e54d39fb78dcef8081d4cafc2 create mode 100644 lexer/fuzzer_corpus/49af95277336d8c0ed0d7a7522e73f8c87d89020 create mode 100644 lexer/fuzzer_corpus/49d400fc7de4b5392935638c26ce2e62778d416e create mode 100644 lexer/fuzzer_corpus/4a0034191d5d0e629583d8b06b6a4a81ce024bee create mode 100644 lexer/fuzzer_corpus/4b32fa9e7beb0500c4f76cdf27a4d1be933ddc68 create mode 100644 lexer/fuzzer_corpus/4b53f47724ca22ac2b26e7b2191779c9fe74fc4c create mode 100644 lexer/fuzzer_corpus/4c5e150ebdd825a7ad25ac960eed57c54838c614 create mode 100644 lexer/fuzzer_corpus/4cb14c262491d3c0e6d47cef077c5ff05353e43d create mode 100644 lexer/fuzzer_corpus/4d042b03473298b5ef025639d90062272204d6b9 create mode 100644 lexer/fuzzer_corpus/4dd2cd4a75976db57d91729517748dc8f1e9eb39 create mode 100644 lexer/fuzzer_corpus/4df44f90bc0f13fb557f109e46647b4d91a5014e create mode 100644 lexer/fuzzer_corpus/4e5560d451aa505e253511657c115baf69d8e6f8 create mode 100644 lexer/fuzzer_corpus/4e6876ea3989c69057b0a81a029f83e5246f70dc create mode 100644 lexer/fuzzer_corpus/4fbc30b7354b6bd455608e7fb5bb7f6feb37941e create mode 100644 lexer/fuzzer_corpus/532fd1978e5444b41c97d1639fe7b8efc8da14e9 create mode 100644 lexer/fuzzer_corpus/5378a1d0f6db372c2e26926f3ab692aaff281d5d create mode 100644 lexer/fuzzer_corpus/53f0d72af41e99e951722231524ec437759422f2 create mode 100644 lexer/fuzzer_corpus/5458cc3caca58cf412198f6d5085f370b7d1cb97 create mode 100644 lexer/fuzzer_corpus/5577956e2ca1e38f1ece81a6c2190490c3273f20 create mode 100644 lexer/fuzzer_corpus/568e139f25140400eefdf6d4e2a38bc21e61d4c0 create mode 100644 lexer/fuzzer_corpus/56bc35408f7d618b0b2ad0cc28738fa9d38a0bd2 create mode 100644 lexer/fuzzer_corpus/57e42e4edb7e862c38e24209fea0d89c06034e4d create mode 100644 lexer/fuzzer_corpus/59837c18261ef4bf33c51437a98d25cebf414840 create mode 100644 lexer/fuzzer_corpus/598b22649052ab5cf9c8f2d9e43c97c0ca1ecb6f create mode 100644 lexer/fuzzer_corpus/59f33d4f075c2cf6448f94f623fac85834bdb2cf create mode 100644 lexer/fuzzer_corpus/59fe75149f202f3e7920a1fd87959628855929a8 create mode 100644 lexer/fuzzer_corpus/5a02c95e0a7d591f275f196eb5274f1b2209e244 create mode 100644 lexer/fuzzer_corpus/5aa449aa73c5c05cf57a957914e47a4d2adbd4c9 create mode 100644 lexer/fuzzer_corpus/5adf5dd22c409ad57c9f6b29eeb92aaafdf5372c create mode 100644 lexer/fuzzer_corpus/5b6e66c2980a4e9eae54c9996bd413b58e564150 create mode 100644 lexer/fuzzer_corpus/5bfebbdbbfb4f41a5d5d388504bd062d7a99c3e0 create mode 100644 lexer/fuzzer_corpus/5c3a3ba5513cfcdc49f76b2009d806141588f85f create mode 100644 lexer/fuzzer_corpus/5d31e2a814a923c713cd3533f1cf397c902d304e create mode 100644 lexer/fuzzer_corpus/5d6c6fa498ecdef22875bdb7b8d212f146cc387b create mode 100644 lexer/fuzzer_corpus/5e05747916bcae6d1d14627260fa82de4caea0d7 create mode 100644 lexer/fuzzer_corpus/5e399a625d3bb3c6447dafe42e4553fc16950f6e create mode 100644 lexer/fuzzer_corpus/5eb107e4dc5d78891aac3f0c1e83883b7a663fdf create mode 100644 lexer/fuzzer_corpus/6015eb2c2f9da9ac11698c60c65c0bb094a66657 create mode 100644 lexer/fuzzer_corpus/603588985367299d4b4e56c81186715fc8ab5298 create mode 100644 lexer/fuzzer_corpus/60603d960234eaa4cf2748d2f8b43e1303171ec7 create mode 100644 lexer/fuzzer_corpus/6235a1b078cf86f65be51d3e4d952688c0cf4027 create mode 100644 lexer/fuzzer_corpus/62618378c0f30271418e65d9642b681cf5445c1e create mode 100644 lexer/fuzzer_corpus/62d8ba9122d4a19be633439c04f949e0683f417d create mode 100644 lexer/fuzzer_corpus/63fbf21dc690999b09177bf4ac4216676ed26b6e create mode 100644 lexer/fuzzer_corpus/64ea37e683f8f7ad3eb0a9c4ad19d82cfbdc9774 create mode 100644 lexer/fuzzer_corpus/658886802343686540cb41c5499a46f1705b9d5c create mode 100644 lexer/fuzzer_corpus/6614bca5723ef48592ebb2efee5bc73e17760aee create mode 100644 lexer/fuzzer_corpus/664bd1be9730de5ce106f7b2d87774e6549c6ada create mode 100644 lexer/fuzzer_corpus/66a6d4bff6fa7a62ec7a16d9bf5adf706efea00f create mode 100644 lexer/fuzzer_corpus/66b622ca15899fc16af4040369d852faf77fd604 create mode 100644 lexer/fuzzer_corpus/66cee929f075d88bfa46887e565b5d3d148f9154 create mode 100644 lexer/fuzzer_corpus/6a8a9d4ec0485d6a585db4b56ecfc8779e7888fd create mode 100644 lexer/fuzzer_corpus/6af377722221a297079f87c07a93c2189ac24fb1 create mode 100644 lexer/fuzzer_corpus/6b557d729ebff7f4da9b746da200980115618627 create mode 100644 lexer/fuzzer_corpus/6c4fb24e430367960280c066b72fb107b1c424ab create mode 100644 lexer/fuzzer_corpus/6c6e255ee96eef814112752fe189fae0dfe78743 create mode 100644 lexer/fuzzer_corpus/6d44e5997f87b024c53eab22f5912e1988cb66f3 create mode 100644 lexer/fuzzer_corpus/6d512f956c75ca835d38cbcb6e26e1a2473abd08 create mode 100644 lexer/fuzzer_corpus/6d72ae632ce79e9c197f5ca799f667d61d2a3df8 create mode 100644 lexer/fuzzer_corpus/6e62c2d775c1c825125cab26e5a4b004a06a4ba7 create mode 100644 lexer/fuzzer_corpus/6fcdcf3781990fdceb9b08ba304283f1fd8f9b4e create mode 100644 lexer/fuzzer_corpus/7016224c7c5f50c8e8aeb6e43851f5e958aa36da create mode 100644 lexer/fuzzer_corpus/709dcef4bfe4c6162c6a983a3d12eb20ac5cbed7 create mode 100644 lexer/fuzzer_corpus/70aed57684596e5887c493a5a79dc1d6bcb5eb43 create mode 100644 lexer/fuzzer_corpus/716d1769833e864f111085008d8322d53a4daf30 create mode 100644 lexer/fuzzer_corpus/7194db810c5947f300d6035d2a4a743090210e21 create mode 100644 lexer/fuzzer_corpus/71a5590952fd84047c6d6e9be45bf1f045355625 create mode 100644 lexer/fuzzer_corpus/73a854c8805585f984236fa44232cb965b9083ae create mode 100644 lexer/fuzzer_corpus/74bd0a894550c238cee609bb561591118137bc37 create mode 100644 lexer/fuzzer_corpus/75977e3e56167889e781b65443e91eb49902cfbf create mode 100644 lexer/fuzzer_corpus/767654d5cbd98934fc45a7ba38f606c4efe7e359 create mode 100644 lexer/fuzzer_corpus/7737f7fabd55d3fff123dbc65fee826311c2580d create mode 100644 lexer/fuzzer_corpus/77453d8dc39b44fdf3c80a0ca80c7ead9149de84 create mode 100644 lexer/fuzzer_corpus/788e547a1eb3cab3960e638885457a0fe112904c create mode 100644 lexer/fuzzer_corpus/7897d38321a88305b14831654cdb32ba40665cfd create mode 100644 lexer/fuzzer_corpus/799ee6b016fe616eec6ee67f1977744aee58aee0 create mode 100644 lexer/fuzzer_corpus/7a0cf48bba4dafb8f490124a89977a93c73988b4 create mode 100644 lexer/fuzzer_corpus/7a26e6bcc857b6e9b797b3c918f2bcb1a569ddde create mode 100644 lexer/fuzzer_corpus/7a34b6c09a1ec38856874d086cf899709fa20650 create mode 100644 lexer/fuzzer_corpus/7ae9e827c496473c836ad4de36f8b029cbb005c8 create mode 100644 lexer/fuzzer_corpus/7bc478ddfb9efcd7b4650c00e27da372d2cbee86 create mode 100644 lexer/fuzzer_corpus/7c9291251d2b1628c0bf6b31e2074445408df3e9 create mode 100644 lexer/fuzzer_corpus/7d7bcfb836b397d537c2b3649c86e9a9c48303e0 create mode 100644 lexer/fuzzer_corpus/7dcb764405ae26b71cb127b30336b45fd802640a create mode 100644 lexer/fuzzer_corpus/7dde4f40a01dfa3b917b86b8bd035929132f32db create mode 100644 lexer/fuzzer_corpus/7e01c8cdc6b1904415e575240588c4759047692d create mode 100644 lexer/fuzzer_corpus/7e10b31e7041e9432b39bb1ae327355d96dfd62c create mode 100644 lexer/fuzzer_corpus/7e479935227c90be28bb8a6261fe2141a12821e5 create mode 100644 lexer/fuzzer_corpus/7e6775e595a452e61552a68facb7aa884fc579e5 create mode 100644 lexer/fuzzer_corpus/7fbd42707b95e15ea0584236b080b01a86041f0a create mode 100644 lexer/fuzzer_corpus/80347f920096695efda11b33e2c2d06024c0c82a create mode 100644 lexer/fuzzer_corpus/808863bfb504bd1a7ba89b4f8eb8c118a9125798 create mode 100644 lexer/fuzzer_corpus/80a0247ebe3fd2aceff058d956c1c921ed7681a4 create mode 100644 lexer/fuzzer_corpus/80d94c313466452d7b50fd144838a527809f2c7f create mode 100644 lexer/fuzzer_corpus/80f348579a9a803a72d4a4cccd54824488b55aac create mode 100644 lexer/fuzzer_corpus/8211bb03478a5a26c1fb40236780cbee8da45a06 create mode 100644 lexer/fuzzer_corpus/833ca5a7d4cdf2c1867491c242ece799a01d77a9 create mode 100644 lexer/fuzzer_corpus/83a58c921e3f326f742c80f8b885c6c6dcc68803 create mode 100644 lexer/fuzzer_corpus/83a9bf595bc7dea203b912007f70743b88f7af95 create mode 100644 lexer/fuzzer_corpus/83cd63c7765c3f1d6f7f4f1f9b032f8efd46b3ef create mode 100644 lexer/fuzzer_corpus/8476e6af7e75aa144bad68b33b499cdac5da2bf4 create mode 100644 lexer/fuzzer_corpus/8477039b36c6e7e796ce4036aa78d32e00ce0103 create mode 100644 lexer/fuzzer_corpus/85232cbda473f24e2195b75d84e387f25956a358 create mode 100644 lexer/fuzzer_corpus/860f19159238baa82dd6680e5f00cd818d869fca create mode 100644 lexer/fuzzer_corpus/86c5f1d7668cd16af68c6901ef37d10a929b937e create mode 100644 lexer/fuzzer_corpus/875d260c6259b312bf7adc25aa6d37de04cacef9 create mode 100644 lexer/fuzzer_corpus/87870c833802ae370b72ded06d6b5466283e5189 create mode 100644 lexer/fuzzer_corpus/882f2aaac218ec0d84736ac2c55910a4594a1eae create mode 100644 lexer/fuzzer_corpus/8840b9e11ea5d3aea427c815ebfe1896dc3b765e create mode 100644 lexer/fuzzer_corpus/8873098a4246f81ee6e5576070d0a7244b3ac9f3 create mode 100644 lexer/fuzzer_corpus/8904890ebc3c9798fabda724359e14379698ebd4 create mode 100644 lexer/fuzzer_corpus/891f275cd08dde2776d7140e46cb047faf9f0f8d create mode 100644 lexer/fuzzer_corpus/89371ce91fe1a6d01ba115e5bf54bf577340b8eb create mode 100644 lexer/fuzzer_corpus/895e8fd679feb6a39068aba3d31fb206089a064b create mode 100644 lexer/fuzzer_corpus/8a00c440fa5a60b20d2c8085a38baeaaf3c5670c create mode 100644 lexer/fuzzer_corpus/8a88097f625c33cc9cbe29343feb52ab248b5c1b create mode 100644 lexer/fuzzer_corpus/8b0a819cd3fc4d68cf3e0e0855f7ebcd89a20317 create mode 100644 lexer/fuzzer_corpus/8b98620ebbf7bab27f5ca3fc0ec663cc58c76db9 create mode 100644 lexer/fuzzer_corpus/8c623105d5f0f8ac252343c858286d65b992687c create mode 100644 lexer/fuzzer_corpus/8c74dc0dc68a7e61878314355623c887ace5eefe create mode 100644 lexer/fuzzer_corpus/8d19aefc358ee1284e3a594474f26015586dd9e9 create mode 100644 lexer/fuzzer_corpus/8dc12bb4d6f47bdce0349d159084f7a90ab432a4 create mode 100644 lexer/fuzzer_corpus/8df1c55d2c899a91d4de757ad55abeaee00718e5 create mode 100644 lexer/fuzzer_corpus/8ea0ce1a9c4c228095a13e76e7c43657f8bd6e23 create mode 100644 lexer/fuzzer_corpus/8eeef9f346f4ffdc8e3e6456301cf775d164c42d create mode 100644 lexer/fuzzer_corpus/8f1f1bdd61e03a0432e1425982bc95d4eed1dc8f create mode 100644 lexer/fuzzer_corpus/8fc80309676fc4e9b457cba583e09623e3a50e8b create mode 100644 lexer/fuzzer_corpus/9032685281013329ab00123038a24e88ee87e99f create mode 100644 lexer/fuzzer_corpus/903b7c38e142f05daeefa445f48a7da5630e1efe create mode 100644 lexer/fuzzer_corpus/90fb17406d6d1e431223bda418dc24452cd47cbd create mode 100644 lexer/fuzzer_corpus/910a4cd86e2bdc41e8e4ae4e06e918ec0bc91b61 create mode 100644 lexer/fuzzer_corpus/92180b5585dde95b54512c0aa418844642cfbf1c create mode 100644 lexer/fuzzer_corpus/92a9994a35a5751f87ec0261a50c46f6cac276c1 create mode 100644 lexer/fuzzer_corpus/932d2c4206b09575f98aba174b4ae7eeecf9dd87 create mode 100644 lexer/fuzzer_corpus/936b204683d9aace88edec6916348263f8845bd2 create mode 100644 lexer/fuzzer_corpus/94992041a722e9461cb4da61dc3ca6b1c807fc52 create mode 100644 lexer/fuzzer_corpus/94f232a0e1b64975bc82dc84a484907795dd3c9a create mode 100644 lexer/fuzzer_corpus/94f5a62a7150c24701f9b0ccc4f003afaf33b04b create mode 100644 lexer/fuzzer_corpus/951cfc17803941388dcb27de4933bcf3cfa4e308 create mode 100644 lexer/fuzzer_corpus/96080c9605fcf493be8852845bc14430217f7f10 create mode 100644 lexer/fuzzer_corpus/9623152b8ee14d7d2be5fd3ca2eef2085125a009 create mode 100644 lexer/fuzzer_corpus/965d67a89f658ebc162f41d13880ceb53878398a create mode 100644 lexer/fuzzer_corpus/969a5335de7a36dab4b48601f83e8289d1e24e14 create mode 100644 lexer/fuzzer_corpus/971e03f3b57ac29e3328d70fb6a901e50cc1e3c3 create mode 100644 lexer/fuzzer_corpus/976127759e62f70d02f40d83a2ed5b7951571ceb create mode 100644 lexer/fuzzer_corpus/97846c394ced714617a96b8b35b582e232a9e7b3 create mode 100644 lexer/fuzzer_corpus/9888bb78613415dc88bd114be3f2633e747ae22f create mode 100644 lexer/fuzzer_corpus/991945983caa4499432036384514d356d791b3be create mode 100644 lexer/fuzzer_corpus/99a14a1d0ef9a631b975d4e3d898f1fc28634572 create mode 100644 lexer/fuzzer_corpus/99c0f2d3879cc32cf8f28dbe298b8f51780b0691 create mode 100644 lexer/fuzzer_corpus/99c58901dd5b578c26d9f06a680cd1586d884d0b create mode 100644 lexer/fuzzer_corpus/99d75bc6a864abd29d7531565e692e87cd78ea7f create mode 100644 lexer/fuzzer_corpus/9af095b9240a4b086859755798d38cd676803dd2 create mode 100644 lexer/fuzzer_corpus/9bef829363a2ea30f044c9521dc187bac9e518e8 create mode 100644 lexer/fuzzer_corpus/9c098fec348d1fb7ebd8f71dc3253896efec0698 create mode 100644 lexer/fuzzer_corpus/9c5122ab103de543630bc727b76bd7b21839c073 create mode 100644 lexer/fuzzer_corpus/9d89da8664157ea1b5faa5bde8caf9f31d85b4a4 create mode 100644 lexer/fuzzer_corpus/9da97ed219829e31b2b2a551b3ba371c7d7ab7f7 create mode 100644 lexer/fuzzer_corpus/9e1bf8c243c01b2c171f28550c25b974eb3fc910 create mode 100644 lexer/fuzzer_corpus/9f915817eadb6a53e1ba53785c9e39d3addfb7a7 create mode 100644 lexer/fuzzer_corpus/a019adfa6af044c1f3102fd4eb35f3883eed7767 create mode 100644 lexer/fuzzer_corpus/a03d6067a14043eca56172c64d9d734bbc6d3453 create mode 100644 lexer/fuzzer_corpus/a0c3025c93be787b318b0a0915efce0568f29fb4 create mode 100644 lexer/fuzzer_corpus/a0e3646d2ccccb4a16225b1c4995d6053b4bdd4e create mode 100644 lexer/fuzzer_corpus/a0edc24b3d17348f5cb80d2b6b002ee58db6b035 create mode 100644 lexer/fuzzer_corpus/a101443f19af96e9408021094d007f3da407fb7f create mode 100644 lexer/fuzzer_corpus/a116527e7791e8cfe660a8c53382415e74b1634e create mode 100644 lexer/fuzzer_corpus/a1ca34f30d867511c5071bd62a0ec9532226a626 create mode 100644 lexer/fuzzer_corpus/a204e6fc1dd252eb72786637ece539fc8ccb08be create mode 100644 lexer/fuzzer_corpus/a208cbe77067c1b6f065b09fc05a11f79843e4cf create mode 100644 lexer/fuzzer_corpus/a24bab38ef7386f98fc7f93be8d07c3f6ceb3ece create mode 100644 lexer/fuzzer_corpus/a24c8bbc68f5bbc75f9e4125919196e52f3b3419 create mode 100644 lexer/fuzzer_corpus/a259e1a662bcc421d6834afeab3a47dc344eedba create mode 100644 lexer/fuzzer_corpus/a2967df1f22ff6eb94dc4837d98507c543aae3cb create mode 100644 lexer/fuzzer_corpus/a29d6d6337656a0bd738e477cdd90231050f37cd create mode 100644 lexer/fuzzer_corpus/a2c6ea965e4b89873c59972ad24de3521f5ec565 create mode 100644 lexer/fuzzer_corpus/a3be9919f350dff90746d5bbd335e9c13e075c6b create mode 100644 lexer/fuzzer_corpus/a45e530738453fbacd12389fc0b7c6bb0b5908b5 create mode 100644 lexer/fuzzer_corpus/a4fdd8e51e18577132e9b1d5d9e8504e4d3c96dc create mode 100644 lexer/fuzzer_corpus/a5091dc3125fa52413368b176e86a49738c917a3 create mode 100644 lexer/fuzzer_corpus/a5bd5b33d21e9a221872d7ea360f18433d3f3be1 create mode 100644 lexer/fuzzer_corpus/a6a2deed0d75339e09924b0f19655f6656a15f4f create mode 100644 lexer/fuzzer_corpus/a81a394ce3ae2d25c0ee201c6578069a1b174e55 create mode 100644 lexer/fuzzer_corpus/a9bcae8634ddb628111c2eedd0fcb768f85ff9f5 create mode 100644 lexer/fuzzer_corpus/aa19f2bf66f2268aca0d9eca37dbc685625342a8 create mode 100644 lexer/fuzzer_corpus/aa597b4fbdaf9c8d1c9a17426569c76134ff0fb9 create mode 100644 lexer/fuzzer_corpus/ab437c655c7ad4f2d048b93a9bb3306d0d560e0f create mode 100644 lexer/fuzzer_corpus/ab7ec188984da88b4ab1fb8082a95165d2341dd1 create mode 100644 lexer/fuzzer_corpus/ac0b4253921b9410c5dc7fb082cedf8836ccbcf6 create mode 100644 lexer/fuzzer_corpus/ac15ecf3a7ca5b032a266d1e9e008ee0aa60df50 create mode 100644 lexer/fuzzer_corpus/ac20951ae95689b3ead13a8095570c9a2ed30e5e create mode 100644 lexer/fuzzer_corpus/ac7e926bb0bd586f189a08bd9887dd903b7ca7ab create mode 100644 lexer/fuzzer_corpus/aca10067e6738a677ea8f18c501d1078bc89586b create mode 100644 lexer/fuzzer_corpus/acd71bf955344d94564db8a7d3ab6ed13f5f30e5 create mode 100644 lexer/fuzzer_corpus/ad121b61847802cec3b334da80f661e215dd16d3 create mode 100644 lexer/fuzzer_corpus/adc83b19e793491b1c6ea0fd8b46cd9f32e592fc create mode 100644 lexer/fuzzer_corpus/adcb06d68c467bc49a484a781f3645f2e0fce25d create mode 100644 lexer/fuzzer_corpus/ae4efce72909d7c1fc095fa47f3cf98f4a7ffb34 create mode 100644 lexer/fuzzer_corpus/ae9c533353214d987cef18fd97d4fbaa24c39c09 create mode 100644 lexer/fuzzer_corpus/afeb1f561aa265b0793c0cf08ffbe986ba95cccd create mode 100644 lexer/fuzzer_corpus/b02b1b59c1aaf66b44b15dfc215b921a276f23e9 create mode 100644 lexer/fuzzer_corpus/b071ec550ba1741734797a724d10985838abe3f0 create mode 100644 lexer/fuzzer_corpus/b1256a6b51fe7e4af001152847a41e23822312fd create mode 100644 lexer/fuzzer_corpus/b1898734ba5a8617c5535e2ec02feb33764c5da7 create mode 100644 lexer/fuzzer_corpus/b1ac04528499a30c79bb5a6a887c7f093ffd3d7b create mode 100644 lexer/fuzzer_corpus/b27345719ecf784b471e96fdc2407baaac45ecd0 create mode 100644 lexer/fuzzer_corpus/b378c4f7a72199ec1da13bd6756d4487ac1a9fa3 create mode 100644 lexer/fuzzer_corpus/b399c00c30a1356525d5d39e7cfeb99b2f878bee create mode 100644 lexer/fuzzer_corpus/b41ca4c43c7c6700e337d07a188f3f1a8c13fe46 create mode 100644 lexer/fuzzer_corpus/b41da924198c3920fdaa0b0ff572615dae93f7dd create mode 100644 lexer/fuzzer_corpus/b4899afd21a1c4c6eb7459bf91ed43689919798e create mode 100644 lexer/fuzzer_corpus/b49b6c4ec35af87447943af9acb1a14a637ba4ae create mode 100644 lexer/fuzzer_corpus/b49dddf68a09edcb754e5d95cadc35e2683df728 create mode 100644 lexer/fuzzer_corpus/b4c66e7c06855671e747f3100c9d5072b79cf83a create mode 100644 lexer/fuzzer_corpus/b52f85fe855438edbb3177ba64ea88040c5068c3 create mode 100644 lexer/fuzzer_corpus/b5945b57aad75381e3a3545542330957d8af699b create mode 100644 lexer/fuzzer_corpus/b5eefc1ac36df7e12eaf561ea2198bd05650348f create mode 100644 lexer/fuzzer_corpus/b68b13e7dbf523d3850bfb4ee1879ee267ce1309 create mode 100644 lexer/fuzzer_corpus/b6f15ce61e23d12e16ac972ece7ecb71a1f4c87a create mode 100644 lexer/fuzzer_corpus/b7294356ab92ecb2a8f35f0b61cb2f3fc68af2f7 create mode 100644 lexer/fuzzer_corpus/b7719b430c03af92aef14110ee2fbf3abba0de5d create mode 100644 lexer/fuzzer_corpus/b7cd4bb8ad5ec4e73e07a3cda397faa3f19e4286 create mode 100644 lexer/fuzzer_corpus/b8e9125a0ae565f71d1d93249e347d56068d42bf create mode 100644 lexer/fuzzer_corpus/b9a93efe3d76aecec38a121521ae64810a0769c2 create mode 100644 lexer/fuzzer_corpus/bb1e5e53f6a1253fe1e896b50e9edc0095e2932b create mode 100644 lexer/fuzzer_corpus/bd7c4c25399bf8f278eb615f58b75b8f72349bf6 create mode 100644 lexer/fuzzer_corpus/be7f31b717f86fda96b3148fb706908303e17f8f create mode 100644 lexer/fuzzer_corpus/bee6d10492fd61954b05c5108f958c5406b30fc9 create mode 100644 lexer/fuzzer_corpus/befde2b724d2370f61d7dc2da95d1be21a9c862b create mode 100644 lexer/fuzzer_corpus/c02bf5d08db57f3aae88172e17cad08ebd076c22 create mode 100644 lexer/fuzzer_corpus/c18fefd5d4d05d1ee9f162801aa6e17f428ba8da create mode 100644 lexer/fuzzer_corpus/c1b2bcb63da8041ce87b328132217ba70d920fca create mode 100644 lexer/fuzzer_corpus/c1df12a64dd8abefb0e6590527cb10ed692cf324 create mode 100644 lexer/fuzzer_corpus/c21a4d67d547c0845676886c6892c8c6827d75e2 create mode 100644 lexer/fuzzer_corpus/c2bec5c726a06b456cdd88f28a32f48831044a11 create mode 100644 lexer/fuzzer_corpus/c32505224c93f972f500f44afb188d3889dfa159 create mode 100644 lexer/fuzzer_corpus/c3670cccd1b3582fb1ec1b742f6e2898cfe26555 create mode 100644 lexer/fuzzer_corpus/c3ed53cf882409c54cc6c988aae34deacecf057a create mode 100644 lexer/fuzzer_corpus/c63072e6cf44fde5c8ec3e7ea1a5328497ea5479 create mode 100644 lexer/fuzzer_corpus/c6435d401d81e17e25e273719e4f1fa7fe1b53b7 create mode 100644 lexer/fuzzer_corpus/c70643d26ec7090724a54c6e87ea68c89d4c4e91 create mode 100644 lexer/fuzzer_corpus/c7fb3f5be75a6dacfc3e28abbf73fe5e58495d30 create mode 100644 lexer/fuzzer_corpus/ca576072e488152f50e6f1158a1396f73ddd2c07 create mode 100644 lexer/fuzzer_corpus/cb2edb9e0c977a705a6f29fae0934079a1b60c92 create mode 100644 lexer/fuzzer_corpus/cb864d68d0b90ecc000956495f457f2da8cc0181 create mode 100644 lexer/fuzzer_corpus/cbe9914a17fe70a1883c2dab7491fd0211a5ee38 create mode 100644 lexer/fuzzer_corpus/cc34b4cfee9dc462dcc95d7560a21cbf4adcf7b0 create mode 100644 lexer/fuzzer_corpus/cc652bd0ebdb4b1726182372be30c691099f7e8c create mode 100644 lexer/fuzzer_corpus/ccaac59aa2a93544b76f073311b350dcf65fbf5e create mode 100644 lexer/fuzzer_corpus/ccc73c223aabaa38c58624ea80eb778c645346f2 create mode 100644 lexer/fuzzer_corpus/cd04f9a383899d9640ff1e9707e47e77afdd9562 create mode 100644 lexer/fuzzer_corpus/cd2ef6d312ee80a3d4c377361fddbb793889f4c8 create mode 100644 lexer/fuzzer_corpus/ce010e3e4729a79b9793c64a4532b53c54c9430c create mode 100644 lexer/fuzzer_corpus/ce3e985cb8f77fcd48e3ea06f922260a2dd36fda create mode 100644 lexer/fuzzer_corpus/cf7e04eb0562f842999ecc3f4ec6877fa4f1e342 create mode 100644 lexer/fuzzer_corpus/d1020364827748c3a6e1bf09c6e75a5edf44079e create mode 100644 lexer/fuzzer_corpus/d19cd0207ab449752da6b55a82975be7f056a70b create mode 100644 lexer/fuzzer_corpus/d1ee881e19534be9fc12fd862bb3f2269a09bdd7 create mode 100644 lexer/fuzzer_corpus/d26ba8c01b80dbb3ea1a50d429b832a33b6af614 create mode 100644 lexer/fuzzer_corpus/d2b69ab4a6972e182cdef5c319be940062388300 create mode 100644 lexer/fuzzer_corpus/d38a79abc527773b20840f0ac21b618049746c32 create mode 100644 lexer/fuzzer_corpus/d3ae4114281302b6810c02cee903e2f05aea79ce create mode 100644 lexer/fuzzer_corpus/d3c908f06f91576b96d60c7b165811e69993ae78 create mode 100644 lexer/fuzzer_corpus/d42d277470474b4dbf7a5181f298b299d3028a1a create mode 100644 lexer/fuzzer_corpus/d488eca7d059c07b0f9e8ad7d7206ace887cda85 create mode 100644 lexer/fuzzer_corpus/d51ab1559f11d168cd4cdf123602113f60732e79 create mode 100644 lexer/fuzzer_corpus/d8130b7018da880f1090b166df7bb13810f101bd create mode 100644 lexer/fuzzer_corpus/d8e267ac5306c3dae043f15df37dae5b76a44a52 create mode 100644 lexer/fuzzer_corpus/d9437de0ae53e80a335a15a00ec9e622f2fb89d3 create mode 100644 lexer/fuzzer_corpus/da5dc3160083ac54ec11a162d23293ffef7029c8 create mode 100644 lexer/fuzzer_corpus/daa6495ffb6c5cbf5cd3dbf3b7b8bfc42803d1d2 create mode 100644 lexer/fuzzer_corpus/daed34b7f0f3a2f9b0716b14514473d6efa38c3f create mode 100644 lexer/fuzzer_corpus/dba6c808eafe79949543a1f50ee39f82de48ccee create mode 100644 lexer/fuzzer_corpus/dbb41d9522e68d0faf7f5a03f41aed64e7b9d7ee create mode 100644 lexer/fuzzer_corpus/dc119760a36e1c532dc48cf83cb4ff18cbef6c15 create mode 100644 lexer/fuzzer_corpus/dcc6432dae6ed005aaa9f060c4909bb89c1d98d8 create mode 100644 lexer/fuzzer_corpus/dcf81fe92865368756d9729c63739c37b38f037b create mode 100644 lexer/fuzzer_corpus/dd0da9f51f2783d95680664efb3f5a322ee885b5 create mode 100644 lexer/fuzzer_corpus/dd3f58c65c86aea5827d99b4fe213b183fc79107 create mode 100644 lexer/fuzzer_corpus/de676ef0bc27e3411664f351ea13ee0f2901a8f1 create mode 100644 lexer/fuzzer_corpus/df9bc143232105f71dbc4cd6f29f1faf40adc348 create mode 100644 lexer/fuzzer_corpus/e01aeb76d2ded444ad0373a68f2c784db09ca0bd create mode 100644 lexer/fuzzer_corpus/e0938f8484d9bc11fc2e6c6a95b95bcda639c25a create mode 100644 lexer/fuzzer_corpus/e0db3d59e7b298f022cace1fd52d3875e5fc9694 create mode 100644 lexer/fuzzer_corpus/e255f1112e76bf142d77ee3c42cda90853fefeaf create mode 100644 lexer/fuzzer_corpus/e26caaba5987ef0e4c8e8960a65d163eb739b2a2 create mode 100644 lexer/fuzzer_corpus/e27d3a4fd0455fcd2766c39bf0c71431549a65cb create mode 100644 lexer/fuzzer_corpus/e2ca6c74ac95f6b766e427545f297fa1df3e7ae8 create mode 100644 lexer/fuzzer_corpus/e358ad9b805d394bdc48b7258e0c3b8becb2513b create mode 100644 lexer/fuzzer_corpus/e36e20af158c5a94704e98e0ee695eca5c85d557 create mode 100644 lexer/fuzzer_corpus/e4faefa4502eaf582fb184a2300122f40de097af create mode 100644 lexer/fuzzer_corpus/e5f2b058f54b45dc07f3b9d6e4637e8b7af2c5a7 create mode 100644 lexer/fuzzer_corpus/e72cc6d41d020b5c579ab185b34447ec9520f86c create mode 100644 lexer/fuzzer_corpus/e82759d6621dc86de4cf5033868a3673e74053dd create mode 100644 lexer/fuzzer_corpus/e8546e69f53ac69e138b8a739d321f629be57164 create mode 100644 lexer/fuzzer_corpus/e8d8ab82dea469e3e3c7a536df5a77e3ad899129 create mode 100644 lexer/fuzzer_corpus/e8e793189ab4cce6a062fa09c0740693b6ce1e19 create mode 100644 lexer/fuzzer_corpus/e8ec7cc1ca98820ae6e98c1354ec2d6bece46ef2 create mode 100644 lexer/fuzzer_corpus/e91c47ea25efbbfb60ba17d786caa9659bbab6d2 create mode 100644 lexer/fuzzer_corpus/ea17e12d2e985a026980a016b72acacb30244a76 create mode 100644 lexer/fuzzer_corpus/ea69aad1620b5025cc85f415080cd799b66ebc68 create mode 100644 lexer/fuzzer_corpus/ea6da9d77a360c4826d1a29c2bf40e9209bc1c0b create mode 100644 lexer/fuzzer_corpus/eb2f5a2dd2fee2ef20a54406427e10043b345485 create mode 100644 lexer/fuzzer_corpus/eb6be60b4aa6b17f16953f6095b6ea7efa92f6d4 create mode 100644 lexer/fuzzer_corpus/ec34b45a65e9bad07d332490983b305e6f1d358b create mode 100644 lexer/fuzzer_corpus/ec6905048c1682c644f01e41531ab3d87e0a2247 create mode 100644 lexer/fuzzer_corpus/ed2df06c65bbfdf156d4afc88bdc66d9d3290613 create mode 100644 lexer/fuzzer_corpus/ed93b3caa649c0dc8d2e7bc2fa885ecd7ad0ba36 create mode 100644 lexer/fuzzer_corpus/edd491a75e971973bd4cd9dc84a0023cebd62f92 create mode 100644 lexer/fuzzer_corpus/edf2f1a4740661b72760a302a261518fa842bde0 create mode 100644 lexer/fuzzer_corpus/eee58a61a1959843405fb465464ec698f6181a6f create mode 100644 lexer/fuzzer_corpus/ef6721b59164581f5525e2e2f16bbdb626de6ba7 create mode 100644 lexer/fuzzer_corpus/f05b2bd236751d7863172a380f5ab4315344968e create mode 100644 lexer/fuzzer_corpus/f0c16a24aba99a02eb9924dd4a4725ab8e92ffad create mode 100644 lexer/fuzzer_corpus/f10576d1e2fb48314b8dfbfbeb5d708defe6097b create mode 100644 lexer/fuzzer_corpus/f17479189c9591f3c73906ed84b33b87ac6e8e1f create mode 100644 lexer/fuzzer_corpus/f1778e9e69871a38d2ce4d8b7c4a3e0b35ece46a create mode 100644 lexer/fuzzer_corpus/f2e3dc7f73104b527baf917360356e7994267cdd create mode 100644 lexer/fuzzer_corpus/f3b6007923c6e42984caf9c5fb239cf38815e841 create mode 100644 lexer/fuzzer_corpus/f3da8335de7de651461ad28357d506e940d18bdf create mode 100644 lexer/fuzzer_corpus/f40831624c06f31927bd2af861887ad578246010 create mode 100644 lexer/fuzzer_corpus/f4ddda0ae8524f4f632d5d03291b59acc1952a74 create mode 100644 lexer/fuzzer_corpus/f53e9d74f34d349f856d8aba3f40712bcfe8d916 create mode 100644 lexer/fuzzer_corpus/f5581adcf52c7acfd5fa26cbb317231aff1d9ed7 create mode 100644 lexer/fuzzer_corpus/f57bb62ad6d29b8f4d1fb3baa4474f3af4e0cbab create mode 100644 lexer/fuzzer_corpus/f6117176339050e85b72129ff118f2713b118931 create mode 100644 lexer/fuzzer_corpus/f66e211bfde320bf50efe03fde1cbbbf5df440c6 create mode 100644 lexer/fuzzer_corpus/f6a16230ec874c52b6c1cd73ccc0b9dee2dd5574 create mode 100644 lexer/fuzzer_corpus/f7014162c0e7c8229146243ca875cec5757f6b39 create mode 100644 lexer/fuzzer_corpus/f7e31e99e09ddb661dc4a5f639f48baa48e233fb create mode 100644 lexer/fuzzer_corpus/f9373536de828c70789357df4be4069df64d5dc2 create mode 100644 lexer/fuzzer_corpus/f9a0b5a03a08526b1622f57bf3cefae54eb49abd create mode 100644 lexer/fuzzer_corpus/f9a6502095aa770e7213f96511a3d63f33757674 create mode 100644 lexer/fuzzer_corpus/f9b7f4ad29450f6bdf1baf2663c7b86a7ec39cfc create mode 100644 lexer/fuzzer_corpus/faa689e2f7b3c3877c1581ae943cffa5c037ffbf create mode 100644 lexer/fuzzer_corpus/facca3ae362b2fab961eb9e724b3790b1977d0a8 create mode 100644 lexer/fuzzer_corpus/fbe65ad556a0f0fe9b8215385e70da5555a3fba1 create mode 100644 lexer/fuzzer_corpus/fc880c8c473a9d0b14bb5827260c1170e8ca9535 create mode 100644 lexer/fuzzer_corpus/fc96ab8937b4d16598d2831e4d1f89df4b720d72 create mode 100644 lexer/fuzzer_corpus/fcc91d6415ebf086ccc8b84ef729d5099cc19a84 create mode 100644 lexer/fuzzer_corpus/fd958cb8a73d5d70d0be71a387c7973c3b1df2e9 create mode 100644 lexer/fuzzer_corpus/fdce145b982b47c9598cfe55883672e86727d5b8 create mode 100644 lexer/fuzzer_corpus/fe9a584f5c7c5d9eb5e4b15f85960ca7f1079a2e create mode 100644 lexer/fuzzer_corpus/fecd4b2d80be6971216cd554f44793b3b8adaba6 create mode 100644 lexer/fuzzer_corpus/fef279c42c269b2a38ccfbf781f73897284ec2b2 create mode 100644 lexer/fuzzer_corpus/ff5f77350f4850c12dc9576ea268de27bb55ade1 create mode 100644 lexer/fuzzer_corpus/ffcfd70e30e22415a17a3152c0ba1cc0f9f756a3 create mode 100644 lexer/token_kind.cpp create mode 100644 lexer/token_kind.h create mode 100644 lexer/token_kind_test.cpp create mode 100644 lexer/token_registry.def create mode 100644 lexer/tokenized_buffer.cpp create mode 100644 lexer/tokenized_buffer.h create mode 100644 lexer/tokenized_buffer_fuzzer.cpp create mode 100644 lexer/tokenized_buffer_test.cpp create mode 100644 lexer/tokenized_buffer_test_helpers.h diff --git a/lexer/BUILD b/lexer/BUILD new file mode 100644 index 000000000000..b6f0ae7339bf --- /dev/null +++ b/lexer/BUILD @@ -0,0 +1,75 @@ +# Part of the Carbon Language project, under the Apache License v2.0 with LLVM +# Exceptions. See /LICENSE for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test") +load("//bazel/fuzzing:rules.bzl", "cc_fuzz_test") + +package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "token_kind", + srcs = ["token_kind.cpp"], + hdrs = ["token_kind.h"], + textual_hdrs = ["token_registry.def"], + deps = ["@llvm-project//llvm:Support"], +) + +cc_test( + name = "token_kind_test", + srcs = ["token_kind_test.cpp"], + deps = [ + ":token_kind", + "@llvm-project//llvm:Support", + "@llvm-project//llvm:gtest", + "@llvm-project//llvm:gtest_main", + ], +) + +cc_library( + name = "tokenized_buffer", + srcs = ["tokenized_buffer.cpp"], + hdrs = ["tokenized_buffer.h"], + deps = [ + ":token_kind", + "//diagnostics:diagnostic_emitter", + "//source:source_buffer", + "@llvm-project//llvm:Support", + ], +) + +cc_library( + name = "tokenized_buffer_test_helpers", + testonly = 1, + hdrs = ["tokenized_buffer_test_helpers.h"], + deps = [ + ":tokenized_buffer", + "@llvm-project//llvm:Support", + "@llvm-project//llvm:gmock", + ], +) + +cc_test( + name = "tokenized_buffer_test", + srcs = ["tokenized_buffer_test.cpp"], + deps = [ + ":tokenized_buffer", + ":tokenized_buffer_test_helpers", + "//diagnostics:diagnostic_emitter", + "@llvm-project//llvm:Support", + "@llvm-project//llvm:gmock", + "@llvm-project//llvm:gtest", + "@llvm-project//llvm:gtest_main", + ], +) + +cc_fuzz_test( + name = "tokenized_buffer_fuzzer", + srcs = ["tokenized_buffer_fuzzer.cpp"], + corpus = glob(["fuzzer_corpus/*"]), + deps = [ + ":tokenized_buffer", + "//diagnostics:diagnostic_emitter", + "@llvm-project//llvm:Support", + ], +) diff --git a/lexer/fuzzer_corpus/00b9598434d1cb0aca2446e5d8059f955898661b b/lexer/fuzzer_corpus/00b9598434d1cb0aca2446e5d8059f955898661b new file mode 100644 index 0000000000000000000000000000000000000000..739aefd291770e59ab6efc962da46697d1c89034 GIT binary patch literal 14 VcmZQzaIMlP)F{v_&`8rr0{|Eg1Ev4~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/01096186d4e1347ff16a01491d6ef629f5f5fd42 b/lexer/fuzzer_corpus/01096186d4e1347ff16a01491d6ef629f5f5fd42 new file mode 100644 index 0000000000000000000000000000000000000000..140dc8308fcf342f108caa020900a9234299983b GIT binary patch literal 2178 zcmZQz$jHbr9RS8WW^9Rel0^e&N2N;6A}CYh$K52mcZ~gBq|P& zLXA#LWM>hy5?S%kVizEsJ6L1F+#KOX1A}237f3My^RJ14rKOR%nTeT!g^`J|iHU`Q I5v1V(0DCpJ%K!iX literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/011f63c979b2de6c44a0f974437ff176fb309cf7 b/lexer/fuzzer_corpus/011f63c979b2de6c44a0f974437ff176fb309cf7 new file mode 100644 index 0000000000000000000000000000000000000000..e72781519e904aff466e9b20ed90b2b27505d360 GIT binary patch literal 10 RcmZQzDA3SI(=5;|000U`0$Bh6 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/013a89a4caf353b43c203a2cbd270857c46863c8 b/lexer/fuzzer_corpus/013a89a4caf353b43c203a2cbd270857c46863c8 new file mode 100644 index 0000000000000000000000000000000000000000..b063c01c1d5838fbe12df2e16e29f14328dab39b GIT binary patch literal 18 VcmZQz27xs}U0(mGP2GrSM>GUZq0NwUR@`Jqf|K+K9|=I^k1k)`wcoRSLIl+ejylM| XyUZX9#6pseVll1{m3_9vE2Z=XQ%^Bi literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/05910a7c99851cbb657cfbf8850e1e67e98408b1 b/lexer/fuzzer_corpus/05910a7c99851cbb657cfbf8850e1e67e98408b1 new file mode 100644 index 0000000000000000000000000000000000000000..a03527e2bf7c106d64fd3a864df7f752292829eb GIT binary patch literal 92 wcmZQz@Z>7xsQ3bOh6mjzA8W08@@2IY%IL1q&l9L01n`3f93701$By#sB~S literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/062fe100147aaaf3a5f3f0a67c64991480597cfc b/lexer/fuzzer_corpus/062fe100147aaaf3a5f3f0a67c64991480597cfc new file mode 100644 index 0000000000000000000000000000000000000000..b564a4ceeb79b42b847e901037399898375e4902 GIT binary patch literal 5 McmZQz(9nnm00AfftN;K2 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0685140d284f7c98815eb844fe6445ac2e4d25da b/lexer/fuzzer_corpus/0685140d284f7c98815eb844fe6445ac2e4d25da new file mode 100644 index 0000000000000000000000000000000000000000..45164dd9bb4b84dd87c340f0439d930d8904592c GIT binary patch literal 14 TcmZQza4ffu2f_%hcrFG27Qh1Y literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/06b6c1a09f2ec62f93b7a3f1b03a2188700c8117 b/lexer/fuzzer_corpus/06b6c1a09f2ec62f93b7a3f1b03a2188700c8117 new file mode 100644 index 0000000000000000000000000000000000000000..d9e1a810ee408d451616853fb2caf8b852cbc940 GIT binary patch literal 15 TcmZQzsIsoIj^}da0%1o08GZvC literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/075e66efafa8882c10f46de45be654ad1f930c1f b/lexer/fuzzer_corpus/075e66efafa8882c10f46de45be654ad1f930c1f new file mode 100644 index 0000000000000000000000000000000000000000..17fa5b42c06e98d633e8117e1a223e94b4719035 GIT binary patch literal 126 wcmZQzD6w|5wvM;94gy0YMm$gy1Yr^|K2#Va5f2l?ugV&10f>M>pjHqB0KFn3@c;k- literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/07f95640a7ba78bebf24bea549bd129d81d03f14 b/lexer/fuzzer_corpus/07f95640a7ba78bebf24bea549bd129d81d03f14 new file mode 100644 index 0000000000000000000000000000000000000000..4a1f79771919314d8727354c3ee6bd340a4d8127 GIT binary patch literal 136 zcmZ9Fu?fI13=92$I6cxb*UtH0i&y* j(1`f@=;wL#Wc)0byKAV2qg;0>5LQw0NdglVjg6iQ?Cm8I literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/085e5e94c0193bc313159a1aac208bc7232fa24b b/lexer/fuzzer_corpus/085e5e94c0193bc313159a1aac208bc7232fa24b new file mode 100644 index 0000000000000000000000000000000000000000..87ecc5be2579511039e95d14ab86e995cccf864f GIT binary patch literal 11 McmZQzsB(t_01i7xs7xsF2KfL0 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0a73a50a6c6470643bc6ac4731df70e168a1d72a b/lexer/fuzzer_corpus/0a73a50a6c6470643bc6ac4731df70e168a1d72a new file mode 100644 index 0000000000000000000000000000000000000000..d8383ed8deabb391bf140d6fcc32c91f051935a4 GIT binary patch literal 41 fcmZQz(9m$LcC7}H8r7~~4idAvT0;{g?OF{0-@yyY literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0b02094a3c9673c0ca1a0f0ebb8a2a1cd334bd5d b/lexer/fuzzer_corpus/0b02094a3c9673c0ca1a0f0ebb8a2a1cd334bd5d new file mode 100644 index 0000000000000000000000000000000000000000..619517a64ab8531a09df91a0d011ce3313951e7d GIT binary patch literal 517 zcmZQ!;Bbl$a(0fdb_xorhB1-ZK;d{Nr?6}d3{?;r@^yl3rGiyKK|nVkJ2Dfiq19aR v#fcEFK$z%01L;DR2m2bL6hvZJLlax@xG*Tl3FJUnWZ`rwJfd)_Knn-}CH1L& literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0b50b447ee13e7ea31515670dee9cfe0159182a3 b/lexer/fuzzer_corpus/0b50b447ee13e7ea31515670dee9cfe0159182a3 new file mode 100644 index 0000000000000000000000000000000000000000..bce66129194828a0760c47dec01939739ff94249 GIT binary patch literal 260 zcmZQz$jHbrH8m}E3wp400KV&9smFU literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0b7b607b163793a78dd80383f3dfc1283ae77822 b/lexer/fuzzer_corpus/0b7b607b163793a78dd80383f3dfc1283ae77822 new file mode 100644 index 0000000000000000000000000000000000000000..8e2ee121ff8e2c98198caaafee8154221094dc05 GIT binary patch literal 6 NcmZQzsH&=B000C~0dD{R literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0b832ffe11d2337ca3efd79aa32140076d90dc67 b/lexer/fuzzer_corpus/0b832ffe11d2337ca3efd79aa32140076d90dc67 new file mode 100644 index 0000000000000000000000000000000000000000..4d0d40121c66b56579b333a7fe9a7319b3cf7783 GIT binary patch literal 3 KcmZQzPyhe`BLE=) literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0b9b08eca9652ba3a3e389f051e0d19e5e46fd3c b/lexer/fuzzer_corpus/0b9b08eca9652ba3a3e389f051e0d19e5e46fd3c new file mode 100644 index 0000000000000000000000000000000000000000..8d1afe6a22a69e3004d1cdcb795848a678a905ed GIT binary patch literal 109 ucmZQzP|(nXAP@~_gP33rND>S+G+|7j2#g8QpaIng6NM`P>xJ+@W&i+bjSxEk literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0beed1e9ae76d37f24c30c22c0b254f8efb30744 b/lexer/fuzzer_corpus/0beed1e9ae76d37f24c30c22c0b254f8efb30744 new file mode 100644 index 0000000000000000000000000000000000000000..e746b634eba3001de76769b64a54b73718e24502 GIT binary patch literal 32 acmZQz(9o!M1w#!D*J>c!6)XVafFJ;l4hduc literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0c38e5795a262ad27f8130c77a4bc34ffe7eaa82 b/lexer/fuzzer_corpus/0c38e5795a262ad27f8130c77a4bc34ffe7eaa82 new file mode 100644 index 0000000000000000000000000000000000000000..3b10a15ee88d5cc46862a6760100af4fd4caa2d2 GIT binary patch literal 23 ccmZQz@Z>7xsOV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0dfaf14bb1c6bbaf15c4840df4bbcba70727fb2f b/lexer/fuzzer_corpus/0dfaf14bb1c6bbaf15c4840df4bbcba70727fb2f new file mode 100644 index 0000000000000000000000000000000000000000..18d843f5a36e90b752d5cf3c948172bde53bdb6c GIT binary patch literal 44 ZcmZQzNYg+885#vpegTXD=4WVV006H*2qypl literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0e3efc3ff89fc9956def38fa002510e8f408e4e4 b/lexer/fuzzer_corpus/0e3efc3ff89fc9956def38fa002510e8f408e4e4 new file mode 100644 index 0000000000000000000000000000000000000000..1d352ab577b31888e858216f72cc58668509916c GIT binary patch literal 7 McmZQzsOADf00fo+h5!Hn literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0ea6b54fd89072271de9d6db7291db91e412ba0c b/lexer/fuzzer_corpus/0ea6b54fd89072271de9d6db7291db91e412ba0c new file mode 100644 index 0000000000000000000000000000000000000000..63ac2c468351adad524e24ac18f660f63690f7be GIT binary patch literal 10 OcmZQzsMe^~0096BGy&%T literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0eb01abf75b501eab2e9f8cf7c0a46d150e8035e b/lexer/fuzzer_corpus/0eb01abf75b501eab2e9f8cf7c0a46d150e8035e new file mode 100644 index 0000000000000000000000000000000000000000..7a93f9f1df6ced38cc833acce606f80c959fd0f1 GIT binary patch literal 1826 zcmdT_I}XDj4COezL#L|hz|0c$1U*A@`TF62Z46C>lpzcWHvYW#9F!22$SbY%zAe?1 zZOlj86TxZAXcE|)PgOF9TZgh#?bjEz4Ggy4Lr^L^ckg8%rX;A6Yzyt`p%xEj3K_Ip zS$mK}GfM1(0JO*{QF? zF+f@trE~bQne^-oD}X6Q8Epq6h|t>Mf`|%$_PFHyoTXFlWvNrE|Nk;dIQloBJwP+Y riAz6Fx+8_@l(C72!r9Z{JwPA>xQxO*mS;`V_j*E4^Ye+HwBExH-)tVm literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0ec0f5fdb11fb62a0552c7e13a49c164b757b049 b/lexer/fuzzer_corpus/0ec0f5fdb11fb62a0552c7e13a49c164b757b049 new file mode 100644 index 0000000000000000000000000000000000000000..b227b36283b063d6d064272d52b3213211fd9176 GIT binary patch literal 44 fcmZQz2+Fe#2-3*220{o4Vp&5)z-+LbbzU_99-|GW literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0f1ba78b09883fc942f3108c0d0238e5bbba7261 b/lexer/fuzzer_corpus/0f1ba78b09883fc942f3108c0d0238e5bbba7261 new file mode 100644 index 0000000000000000000000000000000000000000..106feefadd1718bc8c7b82f71ad3b5fba3026540 GIT binary patch literal 61 NcmZQ%P~ajP002s`0%iaJ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0f88a6fcd8459f99ca2009cc17572e4ee6c57949 b/lexer/fuzzer_corpus/0f88a6fcd8459f99ca2009cc17572e4ee6c57949 new file mode 100644 index 0000000000000000000000000000000000000000..9a8e6f84b6d80500671946f8e3b8d5770262b9b3 GIT binary patch literal 17 OcmZQz$b$lF2n_%-JO)4j literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0fa6870ba61bffbcf4331293a0c36abf2a53745d b/lexer/fuzzer_corpus/0fa6870ba61bffbcf4331293a0c36abf2a53745d new file mode 100644 index 0000000000000000000000000000000000000000..8785f1ded78e9d99891ab5b019e2bc591cc815dd GIT binary patch literal 73 zcmWN=u?>JQ3@KYwZA~B(Q-*{C5Ow*=u#8z(i&* UVhkJokyA4ycTLfia`|o72at&ro&W#< literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0fb249d887ffa905f90fe43c97cb0dea4277f682 b/lexer/fuzzer_corpus/0fb249d887ffa905f90fe43c97cb0dea4277f682 new file mode 100644 index 0000000000000000000000000000000000000000..adab4b9e8a47c8b09718620c6d8ccda1c5b6bdac GIT binary patch literal 103 zcmZQz$kNEmbgb5>F4oW}NYcX#!<6fD#~-234h?kp@zjtPxbL0n=Cj O6)Xk`f=mMIOalPmDIF&O literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/0ff985bb50cd92e0904ae0c3bf562a665a9761c8 b/lexer/fuzzer_corpus/0ff985bb50cd92e0904ae0c3bf562a665a9761c8 new file mode 100644 index 0000000000000000000000000000000000000000..84b53f8f261c78035d1c0fd0abb70641052e42b8 GIT binary patch literal 37 bcmZQzuy(Yz4ziAiQD8QRUj=3Xsj7tltcVI| literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/107c59baea92d5aa0b7daf7acc49d20b6a25d180 b/lexer/fuzzer_corpus/107c59baea92d5aa0b7daf7acc49d20b6a25d180 new file mode 100644 index 0000000000000000000000000000000000000000..96960eb76c869da786d535a5c0b8128c174a8b5e GIT binary patch literal 72 bcmZQzh_{A8>mWE2Dg=|kMq48(wvGn?=k65V literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/108fb5fc2033bcad402775791f7d3a83a434d402 b/lexer/fuzzer_corpus/108fb5fc2033bcad402775791f7d3a83a434d402 new file mode 100644 index 0000000000000000000000000000000000000000..9847fed625c84e5005710fb7e918a20e46badf85 GIT binary patch literal 15 UcmZQzsMe^i%&!Cj4GoQI03<~O-T(jq literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/10d4b9dc18446170ba10afb28ca65744f9010ed1 b/lexer/fuzzer_corpus/10d4b9dc18446170ba10afb28ca65744f9010ed1 new file mode 100644 index 0000000000000000000000000000000000000000..f1beeab069beed0c368f60448961e52e788bac56 GIT binary patch literal 25 dcmZQ!;Bbluf*|MWcqiu|AmJ3I5nr4b4**uB2Y&zn literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/11c0e4ea13d10a785b7298b416b5d1ec70cb9097 b/lexer/fuzzer_corpus/11c0e4ea13d10a785b7298b416b5d1ec70cb9097 new file mode 100644 index 0000000000000000000000000000000000000000..ab3b82d9d0144d736fd3cceeb84d160067aebe6c GIT binary patch literal 275 zcmZQzD2ca*K{z8Q-rCwa9L|Nw2LVN_kwig!N05MZ5E#ZISa4NA2o1>EVLDLNQQbg@ O%V8G7EXC;M1& literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/15d136091465e9311ea3fff6a81f3a16cd472b9a b/lexer/fuzzer_corpus/15d136091465e9311ea3fff6a81f3a16cd472b9a new file mode 100644 index 0000000000000000000000000000000000000000..c1af64cde97e29db4a7b3912d72ec664ccd0cc60 GIT binary patch literal 13 QcmZQz(9qD-1Y!^b019^jz5oCK literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/15f060997fb0309d15af20cf592235d47e6653cc b/lexer/fuzzer_corpus/15f060997fb0309d15af20cf592235d47e6653cc new file mode 100644 index 0000000000000000000000000000000000000000..2792d423fae5efd5b7a26eb869dbb97ba957fad6 GIT binary patch literal 105 lcmZQzNYem<0x$xxKul}^EDV!_(FlbZ2qp$AL&HNu0|4jv5~lzF literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/167feb1fda57dac588688aa0d0b7a50683620144 b/lexer/fuzzer_corpus/167feb1fda57dac588688aa0d0b7a50683620144 new file mode 100644 index 0000000000000000000000000000000000000000..f83363c2c8866f8230967ba057423442fed528db GIT binary patch literal 8 PcmZQzD6w|5t_lJG2I2wu literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1941ef6ffb0e99428fec8f63ce04c9eac4953bf4 b/lexer/fuzzer_corpus/1941ef6ffb0e99428fec8f63ce04c9eac4953bf4 new file mode 100644 index 0000000000000000000000000000000000000000..4e95ab72dec4d3f62bc25e994d047e36e0ebadb2 GIT binary patch literal 3326 zcmdT{v2Md45Tz?$(UGJz~sm=kq?=_$mXad84v{yQ*NGJuPkZL(3+eVe|pThHsQDc2IK z`tvr^2{Hv#2b02Q3mnhMH#*6V?(3ssa$DkUgRtBO@4emKw%Z9&68 zxq)?DKej^auGL!VZuY82<2AV;fGIFPtpKL^xn=5s5Mr%O)12^c$70bm@Pa#Fc28$J OEE*@yfw6angOG1GUW7&f literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/19c2134264582d9b56d13f26eb96e92d374574c6 b/lexer/fuzzer_corpus/19c2134264582d9b56d13f26eb96e92d374574c6 new file mode 100644 index 0000000000000000000000000000000000000000..793bf9f37ba910deeb9de1e0ca2164072262d4bd GIT binary patch literal 140 zcmZQ(uvTGC%L_yY$w;8MxVjh_6e2iqZPq|mUZ!JUpdVZa$N+N;0)st)Y>)~d@C$$g Khya8HsRRH>axZ@X literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1a51e55c866f939f2d132aef8ff5e600242ec29a b/lexer/fuzzer_corpus/1a51e55c866f939f2d132aef8ff5e600242ec29a new file mode 100644 index 0000000000000000000000000000000000000000..781682f8ffe58d9debf2d9bb307e77bcb6a12c03 GIT binary patch literal 5 McmZQzP*6|+006}RVE_OC literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1a7d939aee936be5d25799c3a57f8e8f3c851c89 b/lexer/fuzzer_corpus/1a7d939aee936be5d25799c3a57f8e8f3c851c89 new file mode 100644 index 0000000000000000000000000000000000000000..617fbf33c8ffcf9876fd8a8d672486bbf80fe32d GIT binary patch literal 40 qcmZQz$kNEmbgb5>F4hRD*2pT-DAXv>EYQ$Q0}~n=1qx|Ep)>&N4GVJs literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1a9160bf021e36d9c2bf8f783e5b24211dbc3a28 b/lexer/fuzzer_corpus/1a9160bf021e36d9c2bf8f783e5b24211dbc3a28 new file mode 100644 index 0000000000000000000000000000000000000000..f7c885eec41c1b335e9b5be65dfc0e093c039d78 GIT binary patch literal 7 OcmZQz$g+;-as&VbcL7iU literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1abb3bd834e95e4044a7eeca6e54a49d3c6ef802 b/lexer/fuzzer_corpus/1abb3bd834e95e4044a7eeca6e54a49d3c6ef802 new file mode 100644 index 0000000000000000000000000000000000000000..022f8bfacd3c97ea79206a332bda4289f04c6cbd GIT binary patch literal 55 fcmZQzD6w|5wvM;94g$k?AQQ@gFym1qpwjUGnLQ6n literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1af2d87f0c834bdfe46af5d5f18f014c3294c466 b/lexer/fuzzer_corpus/1af2d87f0c834bdfe46af5d5f18f014c3294c466 new file mode 100644 index 0000000000000000000000000000000000000000..9b1bcee1013e5ffcf35a2289274f459f5ae8f7dc GIT binary patch literal 76 acmZQ(I1mU1c@PRhS|fA7Y+NFaNGbu12^XjU literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1afe41bb4bfe01753e61e7aac1449e6fa2e96fe6 b/lexer/fuzzer_corpus/1afe41bb4bfe01753e61e7aac1449e6fa2e96fe6 new file mode 100644 index 0000000000000000000000000000000000000000..6424e27068af59c752001a5788ed94c77727667b GIT binary patch literal 34 LcmZQzs3rga{n8I% literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1bb9f4d20b726e743eb6af284a699ce4afa36583 b/lexer/fuzzer_corpus/1bb9f4d20b726e743eb6af284a699ce4afa36583 new file mode 100644 index 0000000000000000000000000000000000000000..64b808ea47e85af608bafae86dcbf4e1f56eccae GIT binary patch literal 10 NcmZQzs44>k1^^ID13v%& literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1c62dba4b7e1567683b1824278e7686e26d52834 b/lexer/fuzzer_corpus/1c62dba4b7e1567683b1824278e7686e26d52834 new file mode 100644 index 0000000000000000000000000000000000000000..028edde1e3b1134cad0b12fe0dd4ceaf93e2a8bb GIT binary patch literal 19 McmZQz$TLC%03q=Mj{pDw literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1da4e90919ecbf001b876a4972845144cf042f3a b/lexer/fuzzer_corpus/1da4e90919ecbf001b876a4972845144cf042f3a new file mode 100644 index 0000000000000000000000000000000000000000..784dc6c67773531b77b057641ef0d9ce04fcd962 GIT binary patch literal 1498 zcmc&!J5R$f5cYh(g7MfW>rGah!4U{#t4o(#;G}klP$ib0`0a3U;)oPb3Mk6iPR@_y zzI*s{uEzSVM(dcniY86ZD@{oy5;IYxdmCKZ4%Pu);Y7SyR$63j6A&?Q{Vd~L1Q_p% z*@7h_gQF&|SCLiw;NF_z0oLF>u#GCmynJl$hfn&lDi&9M3Tv7j-#Dy8MNZj$nmX{u z{V|-O{=Q~;^=+2tyjeFFx-=P@lJvQ5RtVwObu)_lg^vFFSZ_3({m7Ddc7uTd4|q^) zwy>eD7*J4}$A}HJjXDLWoe!&x+795B*i+_I;{+z-R;cXZr2-=g-w_2=-o0QaZ_c^* SUP!K);(nhAx+Q9YleiCM&zt@L literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1ec7532018f463cad2ba3d6928fb3c6b46df398a b/lexer/fuzzer_corpus/1ec7532018f463cad2ba3d6928fb3c6b46df398a new file mode 100644 index 0000000000000000000000000000000000000000..79d84859b02acac64726f1d51a8b19400217cb81 GIT binary patch literal 126 NcmZQ%P~aLk0025~1n>X= literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1f1e84248afa238a7417b29be35fee5af6ba57cc b/lexer/fuzzer_corpus/1f1e84248afa238a7417b29be35fee5af6ba57cc new file mode 100644 index 0000000000000000000000000000000000000000..e23a98319452101c02dba7f985b602515a6973da GIT binary patch literal 23 bcmZQz$kNC%)J)ST)F=Q!P0a$0G>rlPLH7m* literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/1ff7f0b20cb7d2be88fe82f1779f71a9b860b7b8 b/lexer/fuzzer_corpus/1ff7f0b20cb7d2be88fe82f1779f71a9b860b7b8 new file mode 100644 index 0000000000000000000000000000000000000000..131176c74d85377bffb2c362c8cf13b2c35fff67 GIT binary patch literal 29 bcmZQzD6w|5wziJ9whjWqcrXNUfdcUWYH|mo literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/20e233dd43706cd6dff2c7b774cdc47ead78de71 b/lexer/fuzzer_corpus/20e233dd43706cd6dff2c7b774cdc47ead78de71 new file mode 100644 index 0000000000000000000000000000000000000000..ad6bfa8246c3cb98800c021b89450b3757e80d92 GIT binary patch literal 6 NcmZQzaIJQ&2LJ<<0fhhn literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/213764f0401b8e8a9040c21bc153edff9286d315 b/lexer/fuzzer_corpus/213764f0401b8e8a9040c21bc153edff9286d315 new file mode 100644 index 0000000000000000000000000000000000000000..59d2bc7deba641969a5258aaa8be1b81aca5e7d5 GIT binary patch literal 1837 zcmd5-u};J=49)DXU7EsE2l-&Fp6PY$Te;O%|ukipisJ zk^TMc&E@{hZm%Ebmrq_@==#43^C{;O%k!MyOl|*l{V3w~N&z)D(mR Fi4Qx(0J8u9 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/213be3df2b6b577edcbb6f913298974fbb8d7324 b/lexer/fuzzer_corpus/213be3df2b6b577edcbb6f913298974fbb8d7324 new file mode 100644 index 0000000000000000000000000000000000000000..a111e2d265d6c49997633339acbbfcbd6caf468a GIT binary patch literal 44 ycmZQz@Z>7xs&ce;cI0w3=8AW;j^c6#3Rs76xmH=nbNO;Pa&b9xIXZI1TL1vm1PN{c literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/21ae4af22c4c258550b92d3cea9ce479a88c12a2 b/lexer/fuzzer_corpus/21ae4af22c4c258550b92d3cea9ce479a88c12a2 new file mode 100644 index 0000000000000000000000000000000000000000..a1dcd9939eda0569fd4f8d18263f1bda215b08b6 GIT binary patch literal 377 zcmb7=yA6Oa3`A4kO0KNP1uM{a3YtvMfdxc{D56MG+*9sT%7P6|6n4H2Yr+c(RH(vv y3=WkQHCPXgKuG`S{-crEEW;IQ#<5DuI&%N$jl1z%(VZ&M&42q~(FMgAJz095l_u8<>oy6OD^(5ZI|`@&vg= zdeEDoL0|>Q&LK_*9#te8R)lF7k>119h(#m_AqI4szcqqOE{mG3L%4zDa6@QCWg#1c vmbmgV9Z}Wd;UOD?M;Q@P)H4ZU8K}G06{%fOOY{>jhF_xW^Tlbj7K z0x!W{siOEINM4n;tr{W6*?9ul^I^>Qc{mQs;a+`1pFSS!YE>2p@5ODf#-$Bu!QM92 z_5rs!44_aTQt1>8eN9m_`vEcj{};Y7iXQ!U@SUNwIqw>zK@LW0bbDRvLWw9-N^iPH B)b#)W literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/221c22da6c2c0fd71d5ebc21876fd57cb77b1b00 b/lexer/fuzzer_corpus/221c22da6c2c0fd71d5ebc21876fd57cb77b1b00 new file mode 100644 index 0000000000000000000000000000000000000000..668dbb044c280670e0381df580756f3ec902e91f GIT binary patch literal 44 ecmZQzsOI9b=Blpd0zxnWh=&pm#d&wZ3nsXmYqD40GrH>Uw?Re2Jab{{8j3iX2lOAST#$) z!JcP^o+BtR-10aE*<#x`_ZTe)%dxtO^eOfocjo)}XC$nTrn^W!(q6i&ttFG6$r#E{ z{L&-=VvrJ$p9>(AqNGMtDHM=I@WLbaWQIs{^IIA!$dIXpZBC&ASz=K{m4qY_iG%+) htRYQcWf=8@4^s-f&MSjim|EOd-JqZU$jS_~eE^~oMS=hT literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/234563c77ded0c75e0583be09a1f4a8a016b8024 b/lexer/fuzzer_corpus/234563c77ded0c75e0583be09a1f4a8a016b8024 new file mode 100644 index 0000000000000000000000000000000000000000..c903c49efec8d8f96ad3156f81fdfd7a42033e86 GIT binary patch literal 20 LcmZQz(7*ry8q5OG literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/236e3801dd0cf62a835705da142af1587e498516 b/lexer/fuzzer_corpus/236e3801dd0cf62a835705da142af1587e498516 new file mode 100644 index 0000000000000000000000000000000000000000..9565ed98e2601ed91bfb15a59f8e31f455f335c3 GIT binary patch literal 29 McmZQ%P~gG|01;3DCIA2c literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/24426f52ba7ad6d178e9e20cb28cf9182d51871f b/lexer/fuzzer_corpus/24426f52ba7ad6d178e9e20cb28cf9182d51871f new file mode 100644 index 0000000000000000000000000000000000000000..0f031070cc2bddd2322857f4ccaa44baf7cf928f GIT binary patch literal 17 ScmZQz27xss@=%HvAoN=vi$;&S0~aj`Dah<5}4r=JMZ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/26514fd3aa2e7d09114d7b5c971e9cbc96e49aba b/lexer/fuzzer_corpus/26514fd3aa2e7d09114d7b5c971e9cbc96e49aba new file mode 100644 index 0000000000000000000000000000000000000000..dff5af643fd909b5f33a360a8bde855533b175b7 GIT binary patch literal 9 McmZQzsOADg00=Px3jhEB literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/26ffdd8987ca20c37b2e8b30866e534342d1c175 b/lexer/fuzzer_corpus/26ffdd8987ca20c37b2e8b30866e534342d1c175 new file mode 100644 index 0000000000000000000000000000000000000000..d95feedca75c34bf8cfb750e80e52e4199b2406c GIT binary patch literal 6 NcmZQz(9qP-1ONe=0HXi^ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/274399a85ea96a507d87d6199c58ea701113ec73 b/lexer/fuzzer_corpus/274399a85ea96a507d87d6199c58ea701113ec73 new file mode 100644 index 0000000000000000000000000000000000000000..ea788c121c7ef875cb6da8ad60133825a1fc1943 GIT binary patch literal 141 zcmZQz$kNEmbgb5}t}fQdC`i&M)F{v_(5NoZNYm5+GJ#|vkk%+r01AKv3y4qw(y9Sg f4WTvD;AUu4YXB_*TB4x|Q~*M08Xzu^d{_+t+fXMY literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/28135abd5f66044cb0fd6f82a3b0dd81b2059593 b/lexer/fuzzer_corpus/28135abd5f66044cb0fd6f82a3b0dd81b2059593 new file mode 100644 index 0000000000000000000000000000000000000000..70b3c2f4653f03c2447f3097cb59a3b14ee5526a GIT binary patch literal 423 zcmZQzi137f;A$YP5dr5Sn4VxMDCy}LjHV8zA4sDr#H$oxJjgsCKoUSOLE=%^oJ80z zxKALi3Pe}{aV3iDoPibvBUFI>NTQoyrlOb&G8V}#4c1-qmg$tfAZ)z%CE D<9mB< literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/281bc1b2b4a20d112c7ea17951397b5a789b5ee8 b/lexer/fuzzer_corpus/281bc1b2b4a20d112c7ea17951397b5a789b5ee8 new file mode 100644 index 0000000000000000000000000000000000000000..c9199dc5a808a365535fe8150433c2c9739eb40e GIT binary patch literal 1684 zcmdT^J8Q!*5YEt{+^_I>9y@E2oeVA%f=o*2A{wYD2?#ZAhvxo#?Z4GQ_Wd&knIHLxB#RpBwZ_x;(NR1)egA7_wAm(k*S`X;=m< z`N$X4Fary?#x-^57vS?~MvKm4#}>!YIcjs4W0T(jurGg3nSe1>gbYfCAr!Eoj9|->CH0 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/28434409ed42ff7b5f6cf4c0731765f70aae12ba b/lexer/fuzzer_corpus/28434409ed42ff7b5f6cf4c0731765f70aae12ba new file mode 100644 index 0000000000000000000000000000000000000000..ef121ea907f3d97f2173659b92833fc74f6cedff GIT binary patch literal 164 zcmZQzP|(nXAP@~_gP6zyKqX*4NUa8nBv=9{qzRVNQ~F4oW}NYVg;G)*8;s8OI%ppd2kmI$f_@il=W8k!(dQ$sTitOTL~ cEC&=%1Ia1?DHKhbg+LQQl2}C%b^%oY0M=qBZ~y=R literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/2a6775c7917e01ee00754918264977fdd60f15ea b/lexer/fuzzer_corpus/2a6775c7917e01ee00754918264977fdd60f15ea new file mode 100644 index 0000000000000000000000000000000000000000..94c6d820f8f8f4495855fcf80ca09ad7a373a508 GIT binary patch literal 29 acmZQz@Z>7xsj4Oh3>5$X literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/2bea1061181244323cdf95ad6a489b72ee38d225 b/lexer/fuzzer_corpus/2bea1061181244323cdf95ad6a489b72ee38d225 new file mode 100644 index 0000000000000000000000000000000000000000..ff5495519f447c93b4a8eb938de478da1e9a6269 GIT binary patch literal 27 QcmZQzNYf}NDA2$H084=c{{R30 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/2cce2108f1d888fdecf0c406fd5fb2ab0448d88d b/lexer/fuzzer_corpus/2cce2108f1d888fdecf0c406fd5fb2ab0448d88d new file mode 100644 index 0000000000000000000000000000000000000000..3a156a06226e914b12c25801265ba95a855d20df GIT binary patch literal 11 ScmZQz2VAAo{=;9#0BS>u!7{()5aLqvobC7kzbfBuEnt4!LaoCud P334;cTOdUU2;>0(uB=a5 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/2e047eb1a04b386c558490f7634175199fb86d2b b/lexer/fuzzer_corpus/2e047eb1a04b386c558490f7634175199fb86d2b new file mode 100644 index 0000000000000000000000000000000000000000..e9fb7f046d1b902f6d87a56ab78f1c64017b786f GIT binary patch literal 43 tcmZQza4SeF(5R}cs?w~g0s~Q%Bt$Bsv;n(AgxNH3JA_s0RU4=5a0j+ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/2eca067d0407b2ce79b7fe3aa0abf38b48178e16 b/lexer/fuzzer_corpus/2eca067d0407b2ce79b7fe3aa0abf38b48178e16 new file mode 100644 index 0000000000000000000000000000000000000000..e49f1c02698aa11e9e60dd8d5baa546e6fc9718c GIT binary patch literal 132 QcmZQ%XjGsN(7Ys{jB1 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/2eca430ce72ba8cfe14a36dae22c3af594455d78 b/lexer/fuzzer_corpus/2eca430ce72ba8cfe14a36dae22c3af594455d78 new file mode 100644 index 0000000000000000000000000000000000000000..1ec00b3b0ad5f5d7cf11b97cf3cbc2eda90a8bd5 GIT binary patch literal 11 OcmZQzsMe^~00RIFLjn%~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/300268d606563a63b1fa078deedf83afcaaae4f0 b/lexer/fuzzer_corpus/300268d606563a63b1fa078deedf83afcaaae4f0 new file mode 100644 index 0000000000000000000000000000000000000000..97fce95451869d0d82a865caf2904d11b7d06c1f GIT binary patch literal 2 JcmWe;0000e02BZK literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/30122a51022d504d0bd883ec9083db0ebc122f3a b/lexer/fuzzer_corpus/30122a51022d504d0bd883ec9083db0ebc122f3a new file mode 100644 index 0000000000000000000000000000000000000000..2e59967502b8d0bc7efe63b92ca811a19f3115f8 GIT binary patch literal 438 zcmb7AyKciU4D@_ok&)TjnG+FvsL>RG1TS4UMJO@|MvX4z$ETzp0fKaiND9>Pcof() zJ@xNBxzp?>*@|V$=U2;~CRSxmeDu)GK5=-%4}RGJ$HSJ|`Y0%c@oiabm(*-keDOqp z14N)69Taq-i%nDqRLI;{1#L@h^xqiMM2k|+AC_jlNA@<&zwH#uBYhR3{eIk0p;AwY zDu;zfdIPFGAVGBW3G%SX&uXB7RXBE}2%T!fdhpNiJGzK+v~_-U@P)~;Fm%$4SEADV E0saGlwg3PC literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/3055e6fc37e2846c56a0a7ef9c910807325c2df1 b/lexer/fuzzer_corpus/3055e6fc37e2846c56a0a7ef9c910807325c2df1 new file mode 100644 index 0000000000000000000000000000000000000000..16c31a2925c4e411441c82d5b8259f541b704e8d GIT binary patch literal 481 zcmb`Eu?~YU3`CjlD;Ukz&Y2>@P}HhbA{LfRwJL@P6?MTsUpK&r)Pb{aa&mr3ilU|V z+LAWq7M394d6p1_y@}BnZ*J=uIA#1*<~(rA|535u z&TcH33~vcmN*_h;tJX(8iLeD~Sc|A`5J3YCGEwS~VDtTC;T$=mIUV#@yoiL6UQAR~ UV@XV$9-fj((*(O@p_vxhF9J@5o&W#< literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/30a79f74923a4a0450c38b8d78c32dd0ec49fb1e b/lexer/fuzzer_corpus/30a79f74923a4a0450c38b8d78c32dd0ec49fb1e new file mode 100644 index 0000000000000000000000000000000000000000..932e776d40a18329123fbc564da1d60268888812 GIT binary patch literal 134 ZcmZQzD765B67oR>XDLydQ*f)Y1_1R`Ix_$O literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/30d2affb78dce801693964e7aa7a776e46764142 b/lexer/fuzzer_corpus/30d2affb78dce801693964e7aa7a776e46764142 new file mode 100644 index 0000000000000000000000000000000000000000..d9bbf5d988ed45060335a98ab77fc22211d6ed1b GIT binary patch literal 71 icmZQzunq#kcpwBbAWRUq#M%*65Tp(v4buYF84m!k#uLK; literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/33970181a654f47a1b7350a040f66460573c2b37 b/lexer/fuzzer_corpus/33970181a654f47a1b7350a040f66460573c2b37 new file mode 100644 index 0000000000000000000000000000000000000000..4d383411ba819ba5353a8383aa50917116f5d8a3 GIT binary patch literal 34 ZcmZQzsL;^Vh}2Be03t8}WkMK literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/36444b4480602bbc82c421d3a5dca926ee56f17d b/lexer/fuzzer_corpus/36444b4480602bbc82c421d3a5dca926ee56f17d new file mode 100644 index 0000000000000000000000000000000000000000..e9a2d0753a339360c0ee73f8425cd329a9597e4b GIT binary patch literal 5 McmZQz(9qBT008v>c>n+a literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/378f7e36a287439cdbcb171241c946981517e6b7 b/lexer/fuzzer_corpus/378f7e36a287439cdbcb171241c946981517e6b7 new file mode 100644 index 0000000000000000000000000000000000000000..fda26ba2cd943c48bebca7c41fa0042c5aaa5f5b GIT binary patch literal 95 zcmZQzD6x)@x3&%f!+2{5tb+2fi(7+K1%Z`#Esb0R@7)*$I5}~n@lz8LK4_>K|7@4664FeCLm;Vh1moT(R z-Q!;}Pac(bej0Pv?JXNySrQi%pe&&Q4_3hn6};($#%D$CW5`GmMj~6y2Rg0!0G8H1 AGXMYp literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/3e23582c9fe275a17897308f4529ce965ef26639 b/lexer/fuzzer_corpus/3e23582c9fe275a17897308f4529ce965ef26639 new file mode 100644 index 0000000000000000000000000000000000000000..3dcd9020616ae4849b53f68990b06cb747337c88 GIT binary patch literal 32 ZcmZQzD6w|5wvGoQAO(RS9tc{;0|10s2$BE* literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/3f0c682d7231780f496758f26a19dea90eb0a63f b/lexer/fuzzer_corpus/3f0c682d7231780f496758f26a19dea90eb0a63f new file mode 100644 index 0000000000000000000000000000000000000000..caabe06c6d9034e3a326cdbded7de5d62dac13ab GIT binary patch literal 6 NcmZQzD6+0%000AX0Vn_f literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/3f128a449c26d99e65f137b08835072d0f4fa93a b/lexer/fuzzer_corpus/3f128a449c26d99e65f137b08835072d0f4fa93a new file mode 100644 index 0000000000000000000000000000000000000000..3c0a8aafd85ab443b49f46716d96ff8676b414b7 GIT binary patch literal 4 LcmZQzh>r&V0U-dt literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/3f5305709a3b6e105cf4b8c1368a8d5c0540a2da b/lexer/fuzzer_corpus/3f5305709a3b6e105cf4b8c1368a8d5c0540a2da new file mode 100644 index 0000000000000000000000000000000000000000..fbf98e21c0600aadfa090018f90a556f8de4218a GIT binary patch literal 3 KcmZQz_zeI6{s8;{ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/3ffa1177da8e5aa9fe3d071384f8958da89d40a6 b/lexer/fuzzer_corpus/3ffa1177da8e5aa9fe3d071384f8958da89d40a6 new file mode 100644 index 0000000000000000000000000000000000000000..6e5ca6c898e9144c72610a8c76e20ec2291af3aa GIT binary patch literal 128 zcmZQz$jS@V$jfxB)~GHn)F{@_C`i&s(=5b1prE0VR-FdY57GkE ZQvlRntx=!}Gz-iEN}!nv)miwk8UV(*CvpG) literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/401b5ffa27fd9bcc9c4c99acc3294b51b7ab5435 b/lexer/fuzzer_corpus/401b5ffa27fd9bcc9c4c99acc3294b51b7ab5435 new file mode 100644 index 0000000000000000000000000000000000000000..b2bf5da66960b3fcd1c31c4f285e03c4052ab414 GIT binary patch literal 97 ocmZQz@Z>7xa^-S#1QGFEj@I!Io(2dMfJqbrMF@ohSB4@A06X6h#{d8T literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/403d7b69e46cde2a0c35e051dc0343b283943a6a b/lexer/fuzzer_corpus/403d7b69e46cde2a0c35e051dc0343b283943a6a new file mode 100644 index 0000000000000000000000000000000000000000..b6c0b8cecb00132852d91f4ec8c30e6db4ed66fe GIT binary patch literal 197 qcmZQzNYem<0x$xxKuqiaO#+RJT@ON(fO4$T85$mV+ygZms008FdLefJ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/419ccf5d9e7c1a163b62230196e1154953a91f9f b/lexer/fuzzer_corpus/419ccf5d9e7c1a163b62230196e1154953a91f9f new file mode 100644 index 0000000000000000000000000000000000000000..f45c23c4452aaf8fc33427d436515d7bbb0de8fc GIT binary patch literal 591 zcmZQzsIo4m2&CnKv|Dpo$5Ut!@upM}bT9?ZF@hRSO@G1MOM$asM!;xl7)3oVI>uX9 Jak+9i0syIF{!0J= literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/42880c44925ec18e3a69b2274b05e0aeff25e454 b/lexer/fuzzer_corpus/42880c44925ec18e3a69b2274b05e0aeff25e454 new file mode 100644 index 0000000000000000000000000000000000000000..f3365dbffe568cc2dc3b331170a0ba7d5f56b433 GIT binary patch literal 50 OcmZQz;7ZFQ2>}32@eSbs literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/434337b14da4a5fb3cdc96cdf47f17517583815c b/lexer/fuzzer_corpus/434337b14da4a5fb3cdc96cdf47f17517583815c new file mode 100644 index 0000000000000000000000000000000000000000..10daccd797325a54a3e24c707c9ac9b08727e469 GIT binary patch literal 20 TcmZQzu(r0=0AeuE05PoqC7}cD literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4351e9a0bb6b53c76164f05125a112cb283cfd81 b/lexer/fuzzer_corpus/4351e9a0bb6b53c76164f05125a112cb283cfd81 new file mode 100644 index 0000000000000000000000000000000000000000..72f7dcfc664ce05fd9ea7d0a0173e1b96170bc8e GIT binary patch literal 386 UcmZQz$jHbr9R&js0+4_Q0JGjufB*mh literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4480089669b1f8da9065f5eb9491687d9e31e9da b/lexer/fuzzer_corpus/4480089669b1f8da9065f5eb9491687d9e31e9da new file mode 100644 index 0000000000000000000000000000000000000000..cba12705e046b665d9c8c4319c1d2eab1901bc84 GIT binary patch literal 16 McmZQza6$&r02@04wg3PC literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4487fe428cf14de470fa39e874acece46fcfcbe8 b/lexer/fuzzer_corpus/4487fe428cf14de470fa39e874acece46fcfcbe8 new file mode 100644 index 0000000000000000000000000000000000000000..7a4913556edc7bd3e1378662419abd844089782e GIT binary patch literal 17 ScmZQzNV86}wg%!n2n_%vR|J3n literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/44df8bdb51a76972b66deb94dfdf5783de99a64e b/lexer/fuzzer_corpus/44df8bdb51a76972b66deb94dfdf5783de99a64e new file mode 100644 index 0000000000000000000000000000000000000000..0c822c028260639e47b37dd3ecb0fc7f9b951bbe GIT binary patch literal 3 KcmZQzhz0-vUI1JG literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/467d884be458d07e7fd5bdda5fff78c9133a1212 b/lexer/fuzzer_corpus/467d884be458d07e7fd5bdda5fff78c9133a1212 new file mode 100644 index 0000000000000000000000000000000000000000..87a98f1c7a57e93564ca57978434691ba6c13df5 GIT binary patch literal 325 zcmZQzh_{BoARrxNZ4KrDX|P~Cln+w_qzjx9TH4Nkk k7{p>Mk`P=2Ts>4D7VQXa2o_8k={5p&npq=!s^MV`0C*o?Y5)KL literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4852364d47db4ef47740f9184a39e0631aa69cd0 b/lexer/fuzzer_corpus/4852364d47db4ef47740f9184a39e0631aa69cd0 new file mode 100644 index 0000000000000000000000000000000000000000..e6090a5537f2f40447d613e8ac91f4bf17686867 GIT binary patch literal 33 ccmZQzD6w|5wvM;94g$k?AQQ*|iGUgL0E|}%$^ZZW literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/487b9de35feaf3e349a411438344e46c870120d5 b/lexer/fuzzer_corpus/487b9de35feaf3e349a411438344e46c870120d5 new file mode 100644 index 0000000000000000000000000000000000000000..124a6b72254107979e9c048aac12a46d26db7003 GIT binary patch literal 4 LcmZQzu+{_s0HXk9 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/48ba5eedfbf3c64e54d39fb78dcef8081d4cafc2 b/lexer/fuzzer_corpus/48ba5eedfbf3c64e54d39fb78dcef8081d4cafc2 new file mode 100644 index 0000000000000000000000000000000000000000..22bec37c5a38230764647c22d98adb66b46aa391 GIT binary patch literal 8 NcmZQzu#VRNLI4G^0jU50 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/49af95277336d8c0ed0d7a7522e73f8c87d89020 b/lexer/fuzzer_corpus/49af95277336d8c0ed0d7a7522e73f8c87d89020 new file mode 100644 index 0000000000000000000000000000000000000000..8fe164d2c78fbf5c6cb263bdb6dfb1ef37f5380d GIT binary patch literal 10 NcmZQzNXz2_BLEAA0+9d! literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/49d400fc7de4b5392935638c26ce2e62778d416e b/lexer/fuzzer_corpus/49d400fc7de4b5392935638c26ce2e62778d416e new file mode 100644 index 0000000000000000000000000000000000000000..8c93bae617460973fafb53f211647f3f020e5a2e GIT binary patch literal 65 TcmZQzNYfw(Xo59mXlMWcOIr$9 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4a0034191d5d0e629583d8b06b6a4a81ce024bee b/lexer/fuzzer_corpus/4a0034191d5d0e629583d8b06b6a4a81ce024bee new file mode 100644 index 0000000000000000000000000000000000000000..af0f25b743b7f1ae403ae832d4a3dde2bbcba26c GIT binary patch literal 213 zcmZQzD6w|5wvG?7j*qv7!60i8MCU;S;(>~R5T+beDO3`q0H&V^gJBjyEWo7~q6$R~ O$SFVo(+{x}$OizmR6WxG literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4b32fa9e7beb0500c4f76cdf27a4d1be933ddc68 b/lexer/fuzzer_corpus/4b32fa9e7beb0500c4f76cdf27a4d1be933ddc68 new file mode 100644 index 0000000000000000000000000000000000000000..560af9a8e9807d703a31202392320a575628ce16 GIT binary patch literal 94 hcmZQzNYj9Uf&v%|LZkCFG7$1;N`Vqck`NwH001N-5eEPO literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4b53f47724ca22ac2b26e7b2191779c9fe74fc4c b/lexer/fuzzer_corpus/4b53f47724ca22ac2b26e7b2191779c9fe74fc4c new file mode 100644 index 0000000000000000000000000000000000000000..a055d6e13ca595e4aa52a207268fee68be0e6b05 GIT binary patch literal 60 fcmZQzD6w|5j<*g1!+0PI9R`6#P=rB3*4FU=_zMvQ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4c5e150ebdd825a7ad25ac960eed57c54838c614 b/lexer/fuzzer_corpus/4c5e150ebdd825a7ad25ac960eed57c54838c614 new file mode 100644 index 0000000000000000000000000000000000000000..0486ee7404f9655732eee7f5bf49256f02853012 GIT binary patch literal 14 RcmZQzD77xN)&K$!0RR-F0<-`C literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4cb14c262491d3c0e6d47cef077c5ff05353e43d b/lexer/fuzzer_corpus/4cb14c262491d3c0e6d47cef077c5ff05353e43d new file mode 100644 index 0000000000000000000000000000000000000000..832a87de7fcf5efc3214c199dfb6679e7437d5c0 GIT binary patch literal 7 McmZQz-~xg?00992mjD0& literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4d042b03473298b5ef025639d90062272204d6b9 b/lexer/fuzzer_corpus/4d042b03473298b5ef025639d90062272204d6b9 new file mode 100644 index 0000000000000000000000000000000000000000..e79f968dd98f6c51fff694c79285340d4cad4c85 GIT binary patch literal 68 dcmZQzNYl{JC;%fM0|^uW1(5+dA0(FnMgX(F48H&X literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4dd2cd4a75976db57d91729517748dc8f1e9eb39 b/lexer/fuzzer_corpus/4dd2cd4a75976db57d91729517748dc8f1e9eb39 new file mode 100644 index 0000000000000000000000000000000000000000..08bd1ebb83ec0cad09f4e94a481167861c5c250c GIT binary patch literal 7 OcmZQz@Z<90@&f<@^#J<- literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4df44f90bc0f13fb557f109e46647b4d91a5014e b/lexer/fuzzer_corpus/4df44f90bc0f13fb557f109e46647b4d91a5014e new file mode 100644 index 0000000000000000000000000000000000000000..8f45cfa13dfb5f4dff2463e3dc5a774cd06a13ff GIT binary patch literal 36 ScmZQzu#QK9NKBZpbvyvDISLm5 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4e5560d451aa505e253511657c115baf69d8e6f8 b/lexer/fuzzer_corpus/4e5560d451aa505e253511657c115baf69d8e6f8 new file mode 100644 index 0000000000000000000000000000000000000000..6908c0d1c27f309261149a3dc9a7eecdb5636c0b GIT binary patch literal 36 McmZQ%P~aj202*=uYybcN literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4e6876ea3989c69057b0a81a029f83e5246f70dc b/lexer/fuzzer_corpus/4e6876ea3989c69057b0a81a029f83e5246f70dc new file mode 100644 index 0000000000000000000000000000000000000000..5bb50f7ca22c8e5da0d58801f188972e77ad4be6 GIT binary patch literal 34 ccmZQzsN#y`inNZjuBze!GOequ;Q|mo0Fz+}00000 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/4fbc30b7354b6bd455608e7fb5bb7f6feb37941e b/lexer/fuzzer_corpus/4fbc30b7354b6bd455608e7fb5bb7f6feb37941e new file mode 100644 index 0000000000000000000000000000000000000000..c651b16d590303d125f4620a8f2fc5072b604575 GIT binary patch literal 406 zcmY*U!Ab-%44renVvpIIg14MHojD95NXp9SC3x5(yHLbI5Z~weA!9ln5MN31@{-rm zu45i?0>=o`UKPD*jD|`*?@j-7Wsohe25Jn}_ceT=z8;%3=iSjJ&9W^ux?P&iH%JLt z#Y{xy!NcU)!_N!Fi9YFD#8kzhNJ!^fAP1sIA&_~DWW*P~fXj&rg-kg&WhuP4lrmD2 zr34xV9)v!S0uE}Z&nvvV^IK*<9={HpIhRM}`~R3Gp697y=8fH9?`uhQoHnK9P4x6< b^A!>hgaDEv!u1O@2I(BU;b&df+U@uS&H#3< literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/532fd1978e5444b41c97d1639fe7b8efc8da14e9 b/lexer/fuzzer_corpus/532fd1978e5444b41c97d1639fe7b8efc8da14e9 new file mode 100644 index 0000000000000000000000000000000000000000..808e09fe9df36dee92b2a998ecd5bf7806109fdd GIT binary patch literal 18 PcmZQz(1_Gb(?CK1Akzcw literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5378a1d0f6db372c2e26926f3ab692aaff281d5d b/lexer/fuzzer_corpus/5378a1d0f6db372c2e26926f3ab692aaff281d5d new file mode 100644 index 0000000000000000000000000000000000000000..354752d29632702a383803fb3c61d48b432828d2 GIT binary patch literal 373 zcmb`DF%rNa2n4O~OII-tMZS=RSETXvLBzx+GZrb3LT>M%lmi!<5ZXHp8V>}h5P^9q z3_BAiYS3sy?T8ewOf?zLBAPvGmJ_v#dFE362Wk&_4 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5458cc3caca58cf412198f6d5085f370b7d1cb97 b/lexer/fuzzer_corpus/5458cc3caca58cf412198f6d5085f370b7d1cb97 new file mode 100644 index 0000000000000000000000000000000000000000..0763d851ac9af28be318f20c84f93eac3d0c7a04 GIT binary patch literal 11 McmZQzC^mxv01K`HBme*a literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5577956e2ca1e38f1ece81a6c2190490c3273f20 b/lexer/fuzzer_corpus/5577956e2ca1e38f1ece81a6c2190490c3273f20 new file mode 100644 index 0000000000000000000000000000000000000000..6aeece34771cfaa6373bb526cda57c167f9131d0 GIT binary patch literal 120 qcmZQzD6w|5wvM;94g$mYco+jH27yosI3LacDJ7@~p#)|cm<9m(ej<+m literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/568e139f25140400eefdf6d4e2a38bc21e61d4c0 b/lexer/fuzzer_corpus/568e139f25140400eefdf6d4e2a38bc21e61d4c0 new file mode 100644 index 0000000000000000000000000000000000000000..322a3b56a7e896c3aac6783aeaa9e69fe81912b1 GIT binary patch literal 67 TcmZQzaK;bvjGzFUGO!c?CeIL3 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/56bc35408f7d618b0b2ad0cc28738fa9d38a0bd2 b/lexer/fuzzer_corpus/56bc35408f7d618b0b2ad0cc28738fa9d38a0bd2 new file mode 100644 index 0000000000000000000000000000000000000000..702b7635f83d4457372faf732bbdb84681e2f28e GIT binary patch literal 6 NcmZQza5OSv1ONgB0H*)| literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/57e42e4edb7e862c38e24209fea0d89c06034e4d b/lexer/fuzzer_corpus/57e42e4edb7e862c38e24209fea0d89c06034e4d new file mode 100644 index 0000000000000000000000000000000000000000..04d0e139f9fbc2a7734506acf2d89e2ba6c82fc1 GIT binary patch literal 40 ZcmZQz(9l!>BM_mX34;(ZAQ#90K>%>*1T8xD>>0DE*!y!{KC)F=o@EN+3P7696}i3@Wws(>)K|JaMOYpX>ia8G zYMp})VYzwkjipvA$Ex+LkG7g9sqv7LB<90Z#YENH?XOm{=6%6f(7wzSIwq>FY{mH) z#?)!V-sn+`^EU~cO9aVV)*AXR;oCw764=Pb>B@jl8noc{eUR3Q!CGYna0N24VmRB?1Tl literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/59fe75149f202f3e7920a1fd87959628855929a8 b/lexer/fuzzer_corpus/59fe75149f202f3e7920a1fd87959628855929a8 new file mode 100644 index 0000000000000000000000000000000000000000..67c9e852f9c8c518f201ceddeeb5a27930ad9040 GIT binary patch literal 21 ScmZQzu#UG50%8z^Qt<#cCk2@R literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5a02c95e0a7d591f275f196eb5274f1b2209e244 b/lexer/fuzzer_corpus/5a02c95e0a7d591f275f196eb5274f1b2209e244 new file mode 100644 index 0000000000000000000000000000000000000000..741669d0c4b88311fa944423b2f6234c8d62e37b GIT binary patch literal 10 LcmZQz;DiDI0Zsr( literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5aa449aa73c5c05cf57a957914e47a4d2adbd4c9 b/lexer/fuzzer_corpus/5aa449aa73c5c05cf57a957914e47a4d2adbd4c9 new file mode 100644 index 0000000000000000000000000000000000000000..7f4710010922a6ea330668fd8ac0356c8b3af539 GIT binary patch literal 27 XcmZQzNYg0LfP#Vo4NWLBLqh`qN6ZC4 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5adf5dd22c409ad57c9f6b29eeb92aaafdf5372c b/lexer/fuzzer_corpus/5adf5dd22c409ad57c9f6b29eeb92aaafdf5372c new file mode 100644 index 0000000000000000000000000000000000000000..8c696e3acb57c0fe0dca37407143b2efb5d762f6 GIT binary patch literal 286 qcmZQzsIumAwdS&pw=OO&E&^im0mKaQ^@DX%!w`^nD0Bu`yCVShXnTMF literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5b6e66c2980a4e9eae54c9996bd413b58e564150 b/lexer/fuzzer_corpus/5b6e66c2980a4e9eae54c9996bd413b58e564150 new file mode 100644 index 0000000000000000000000000000000000000000..1b28f379de43f9850c6a68ebf32ee370bf789ff3 GIT binary patch literal 101 YcmZQz$RY$Zyf6Sr3%VcmN-Kb{Ks*3YB@pWX literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5d31e2a814a923c713cd3533f1cf397c902d304e b/lexer/fuzzer_corpus/5d31e2a814a923c713cd3533f1cf397c902d304e new file mode 100644 index 0000000000000000000000000000000000000000..6d31093f2386bb506c0512bda617c572b4ec1f70 GIT binary patch literal 10 LcmZQzu!aHv2vz~v literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5d6c6fa498ecdef22875bdb7b8d212f146cc387b b/lexer/fuzzer_corpus/5d6c6fa498ecdef22875bdb7b8d212f146cc387b new file mode 100644 index 0000000000000000000000000000000000000000..6170abfcb15ea995e8f96730a7ac06a0a7de1af6 GIT binary patch literal 5 McmZQzaI`J~00FW9@c;k- literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5e05747916bcae6d1d14627260fa82de4caea0d7 b/lexer/fuzzer_corpus/5e05747916bcae6d1d14627260fa82de4caea0d7 new file mode 100644 index 0000000000000000000000000000000000000000..909332b7db0491f4d9f1c7110e43b969b31634a3 GIT binary patch literal 35 LcmZQzs3rse4ZRQC literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5e399a625d3bb3c6447dafe42e4553fc16950f6e b/lexer/fuzzer_corpus/5e399a625d3bb3c6447dafe42e4553fc16950f6e new file mode 100644 index 0000000000000000000000000000000000000000..50dbfb27eae05c633280dc5c9737cac8726dd411 GIT binary patch literal 11 LcmZQzu!aEu3Tgrr literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/5eb107e4dc5d78891aac3f0c1e83883b7a663fdf b/lexer/fuzzer_corpus/5eb107e4dc5d78891aac3f0c1e83883b7a663fdf new file mode 100644 index 0000000000000000000000000000000000000000..9b706d238912521e5c1c04e936836a42539152e8 GIT binary patch literal 341 zcmah_ISv3I2=gh9@H+p$St^%d-2b!51`gsgH~;_u literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/6015eb2c2f9da9ac11698c60c65c0bb094a66657 b/lexer/fuzzer_corpus/6015eb2c2f9da9ac11698c60c65c0bb094a66657 new file mode 100644 index 0000000000000000000000000000000000000000..753fe958e8787e338e94c9a7bc1ac14687288b4a GIT binary patch literal 23 bcmZQz$kNEts4mth)F{x<&`eX%NCQCtL;nTs literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/603588985367299d4b4e56c81186715fc8ab5298 b/lexer/fuzzer_corpus/603588985367299d4b4e56c81186715fc8ab5298 new file mode 100644 index 0000000000000000000000000000000000000000..9627254292c367fdde6fff3ae00f8496cdd19d12 GIT binary patch literal 15 WcmZQz&?wNT(9n$3)J)UR%mV-yaRXWa literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/60603d960234eaa4cf2748d2f8b43e1303171ec7 b/lexer/fuzzer_corpus/60603d960234eaa4cf2748d2f8b43e1303171ec7 new file mode 100644 index 0000000000000000000000000000000000000000..3be4dcec5e05e80f1f573bddae247e6080df3f11 GIT binary patch literal 7 OcmZQzh}Vd>jt2k)bOC_? literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/6235a1b078cf86f65be51d3e4d952688c0cf4027 b/lexer/fuzzer_corpus/6235a1b078cf86f65be51d3e4d952688c0cf4027 new file mode 100644 index 0000000000000000000000000000000000000000..69f7a4e5bbe5eabf77af38de3dfbd8ec0d18d892 GIT binary patch literal 37 McmZQ%;35dR02yWh-~a#s literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/62618378c0f30271418e65d9642b681cf5445c1e b/lexer/fuzzer_corpus/62618378c0f30271418e65d9642b681cf5445c1e new file mode 100644 index 0000000000000000000000000000000000000000..5513111268e666eeab0f73cacd3dad2c55a784ae GIT binary patch literal 7 OcmZQz@b%SjGynht<^ePS literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/62d8ba9122d4a19be633439c04f949e0683f417d b/lexer/fuzzer_corpus/62d8ba9122d4a19be633439c04f949e0683f417d new file mode 100644 index 0000000000000000000000000000000000000000..0cd8debd4cf0ba54944627ad426202d89415a1a0 GIT binary patch literal 133 NcmZQ%P~aMH003SW1vUTx literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/63fbf21dc690999b09177bf4ac4216676ed26b6e b/lexer/fuzzer_corpus/63fbf21dc690999b09177bf4ac4216676ed26b6e new file mode 100644 index 0000000000000000000000000000000000000000..542475849b7b70c921e57220e9128554a5430324 GIT binary patch literal 62 zcmZQz@Z?Giu1>2Ct`1H$s161)gQ^{atDU(VUAf}9G_o|3s*5%9Lb>v|9J$ictoCfIUcFc8pCrOY IC=2Fn0CMVnq5uE@ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/658886802343686540cb41c5499a46f1705b9d5c b/lexer/fuzzer_corpus/658886802343686540cb41c5499a46f1705b9d5c new file mode 100644 index 0000000000000000000000000000000000000000..784c6962ba67dc867eaccae64701bda0c451d5ed GIT binary patch literal 4 LcmZQzu(k#O0JQ*j literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/6614bca5723ef48592ebb2efee5bc73e17760aee b/lexer/fuzzer_corpus/6614bca5723ef48592ebb2efee5bc73e17760aee new file mode 100644 index 0000000000000000000000000000000000000000..965b3ff139b9de898e42a1fd7294762148263fd5 GIT binary patch literal 5 McmZQz;NoHc001`t6#xJL literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/664bd1be9730de5ce106f7b2d87774e6549c6ada b/lexer/fuzzer_corpus/664bd1be9730de5ce106f7b2d87774e6549c6ada new file mode 100644 index 0000000000000000000000000000000000000000..a78dd53639b9b3a30079a17a1d754e04c752f61c GIT binary patch literal 26 hcmZQz@Z>7zs(9|r@&`i?+F+p@10G3t=<^TWy literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/6a8a9d4ec0485d6a585db4b56ecfc8779e7888fd b/lexer/fuzzer_corpus/6a8a9d4ec0485d6a585db4b56ecfc8779e7888fd new file mode 100644 index 0000000000000000000000000000000000000000..48cf0718e02e32f202c4661ebaa91e3480426788 GIT binary patch literal 5 McmZQzsIIOB00QX&bN~PV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/6af377722221a297079f87c07a93c2189ac24fb1 b/lexer/fuzzer_corpus/6af377722221a297079f87c07a93c2189ac24fb1 new file mode 100644 index 0000000000000000000000000000000000000000..5ae871261b71d75880e5996a680daf14321977e1 GIT binary patch literal 18 TcmZQzu-35Fv<4GE1`q)N8xR8> literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/6b557d729ebff7f4da9b746da200980115618627 b/lexer/fuzzer_corpus/6b557d729ebff7f4da9b746da200980115618627 new file mode 100644 index 0000000000000000000000000000000000000000..3a4ba687c7c7190ad0a02621c65c2ff65b7dd7bb GIT binary patch literal 45 McmZQz&>$WF0F(U&xc~qF literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/6c4fb24e430367960280c066b72fb107b1c424ab b/lexer/fuzzer_corpus/6c4fb24e430367960280c066b72fb107b1c424ab new file mode 100644 index 0000000000000000000000000000000000000000..2e555db1ed51f7458ecb64ce3f55a0fd04d03030 GIT binary patch literal 10 PcmZQzh>zEZw+3PW3myVz literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/6c6e255ee96eef814112752fe189fae0dfe78743 b/lexer/fuzzer_corpus/6c6e255ee96eef814112752fe189fae0dfe78743 new file mode 100644 index 0000000000000000000000000000000000000000..83150082fff7d69e1413ac89299123269879eba0 GIT binary patch literal 36 ScmZQz(13zc1Otf)5(EHnTn2>z literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/6d44e5997f87b024c53eab22f5912e1988cb66f3 b/lexer/fuzzer_corpus/6d44e5997f87b024c53eab22f5912e1988cb66f3 new file mode 100644 index 0000000000000000000000000000000000000000..ae7cddb5beab1b66d89f5dae692d99c3caca61be GIT binary patch literal 6 NcmZQzD6X!q1^@)K0p$Py literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/6d512f956c75ca835d38cbcb6e26e1a2473abd08 b/lexer/fuzzer_corpus/6d512f956c75ca835d38cbcb6e26e1a2473abd08 new file mode 100644 index 0000000000000000000000000000000000000000..154072f31b942ed46d86c63d71160d5bec5c3a75 GIT binary patch literal 80 zcmZQz$kNEmbkwLW*3c+OO42CQD9|j>NQ2TEAX)=VYJ$Z7xs&ce;mVQm^FVwM1aYllLJ$$CJgO*6FbKu~t3_6WVl=8Um>w7n)CK^p CO)Iki literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/7016224c7c5f50c8e8aeb6e43851f5e958aa36da b/lexer/fuzzer_corpus/7016224c7c5f50c8e8aeb6e43851f5e958aa36da new file mode 100644 index 0000000000000000000000000000000000000000..5cb74a104c8fed5673cb305e8b6246d5e8c165e8 GIT binary patch literal 37 TcmZQzs6q!C$O1-HRi#+~B`OdA literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/709dcef4bfe4c6162c6a983a3d12eb20ac5cbed7 b/lexer/fuzzer_corpus/709dcef4bfe4c6162c6a983a3d12eb20ac5cbed7 new file mode 100644 index 0000000000000000000000000000000000000000..dbfa25113e1e12d7e4256e2c6cb7df71c4de5e1a GIT binary patch literal 130 pcmZQzi137f;A#*ZT&)oS7Xk7SJkMYR4 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/70aed57684596e5887c493a5a79dc1d6bcb5eb43 b/lexer/fuzzer_corpus/70aed57684596e5887c493a5a79dc1d6bcb5eb43 new file mode 100644 index 0000000000000000000000000000000000000000..7e82bb564feeac61f21c7ecbd6b9af5e9fd83c36 GIT binary patch literal 41 ZcmZQz2nf>1vj#yJ4dDSvs5qEk4FL7W466VD literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/716d1769833e864f111085008d8322d53a4daf30 b/lexer/fuzzer_corpus/716d1769833e864f111085008d8322d53a4daf30 new file mode 100644 index 0000000000000000000000000000000000000000..a00c30c4659e8c43b0828182224683e7c9e6553e GIT binary patch literal 67 zcmZQz$kNEmbgb5>F4oW}NYc9mM%B-C>f5>&?WwSeHm(5!U%!YG?Ps8B))R3 zX|!z7;_GJ7&%l((z=tz&b~>Ku@0S}cw|dM9^iaiEi3HhXvqQ>?0?o*oMKKIA5Fh&| z4o|cpS$!6=1@no!yt7Ex?d=kzu#jbOb(pgXAuE&ei<1egGP;cL7V33sS>nvi55A>8 AR{#J2 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/74bd0a894550c238cee609bb561591118137bc37 b/lexer/fuzzer_corpus/74bd0a894550c238cee609bb561591118137bc37 new file mode 100644 index 0000000000000000000000000000000000000000..c23248162c569c4738e9e60f71371562ae223cc7 GIT binary patch literal 103 QcmZQz;7ZG*7!foA0LT0t4*&oF literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/75977e3e56167889e781b65443e91eb49902cfbf b/lexer/fuzzer_corpus/75977e3e56167889e781b65443e91eb49902cfbf new file mode 100644 index 0000000000000000000000000000000000000000..8bee33e2382c23fb685d6fbc790b4b0fa61f5b9c GIT binary patch literal 89 ucmZQzD6w|5wziIsw+^xfA`r9=@&u9~0Wc3N0_DI3K{D}R2qw_DKp6lj7#My4 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/767654d5cbd98934fc45a7ba38f606c4efe7e359 b/lexer/fuzzer_corpus/767654d5cbd98934fc45a7ba38f606c4efe7e359 new file mode 100644 index 0000000000000000000000000000000000000000..15942afbe6329f94b53615ca23be2b1a9d164a4e GIT binary patch literal 35 OcmZQzutoEM42BsPz`vrSZ=)m1l=~PCF`$^MDi-UI8dX;*s)$&y#BayWwY}2h;=Fm| zdz|F{?xE(;G%R%pa+Y;K>0Yjy)K}Y@tE(%+B-ix~<3gM9Y0w-2&ZDMo4mit`F+#?J zY*@G655fp(ihjxe;ahS{r~^~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/77453d8dc39b44fdf3c80a0ca80c7ead9149de84 b/lexer/fuzzer_corpus/77453d8dc39b44fdf3c80a0ca80c7ead9149de84 new file mode 100644 index 0000000000000000000000000000000000000000..9c16509e66fa331a6b79c4a5ca02e8e942284266 GIT binary patch literal 465 zcmbu6KMMje48`mEK80ge=L}M~g11_nyJ(Ob4pF*XKD?$qTt2$0v*soW-N-I>wz2 z^N#TvYC|;WIvVmvV{bN(mHw^2232Yo8x}=Y_5XMEBf05kPOr4Iy&T?3TE$lT4H{_B Y2i0kMfk<^sWuO|pZjY&PBv0qu3mk}R761SM literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/788e547a1eb3cab3960e638885457a0fe112904c b/lexer/fuzzer_corpus/788e547a1eb3cab3960e638885457a0fe112904c new file mode 100644 index 0000000000000000000000000000000000000000..577881667dde304c5692ec66d110168c3f3f59f8 GIT binary patch literal 11 NcmZQzD9}iQKmZMU0;vE1 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/7897d38321a88305b14831654cdb32ba40665cfd b/lexer/fuzzer_corpus/7897d38321a88305b14831654cdb32ba40665cfd new file mode 100644 index 0000000000000000000000000000000000000000..01a43576b61ac6cf0e7ad10c1dd90aaa98e098b4 GIT binary patch literal 20 NcmZQ%P~buXtpEt!0Y?A; literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/799ee6b016fe616eec6ee67f1977744aee58aee0 b/lexer/fuzzer_corpus/799ee6b016fe616eec6ee67f1977744aee58aee0 new file mode 100644 index 0000000000000000000000000000000000000000..9f47fa51051b55847ada917a9df296fe30e45bc7 GIT binary patch literal 8 NcmZQzu(s9!0ssUd0T%!O literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/7a0cf48bba4dafb8f490124a89977a93c73988b4 b/lexer/fuzzer_corpus/7a0cf48bba4dafb8f490124a89977a93c73988b4 new file mode 100644 index 0000000000000000000000000000000000000000..f20f4a2790cccd9fa7bbb3718fc7d26333021f66 GIT binary patch literal 425 zcmah_v2MgL2+jPy;zn+3XC{6 zybcsftGZ-2&z?V@J;yb%Ds$qu*t*LH+86xd&fy4uks8|`1~bOZv-l~g`%hGynL}yj z`8^d|#H;7Bd7|l)y9v-j1S&0hDEd21zR)}(QUqN`T`9iCXrgJUvAtQKPEo}(WW{l$ zEEP@t;Q2~lMsz-3Ph?~VtbcJ<^bb^QqjFTK1jlV*XZ~GySLUFxv?_-RmvL&)RxW2B MrbkRd)=60N2j#_mrT_o{ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/7a26e6bcc857b6e9b797b3c918f2bcb1a569ddde b/lexer/fuzzer_corpus/7a26e6bcc857b6e9b797b3c918f2bcb1a569ddde new file mode 100644 index 0000000000000000000000000000000000000000..d5dc2123bc23440cc77ba3e6f3dbe1e918f90240 GIT binary patch literal 3 KcmZQz-~<2w3;+rM literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/7a34b6c09a1ec38856874d086cf899709fa20650 b/lexer/fuzzer_corpus/7a34b6c09a1ec38856874d086cf899709fa20650 new file mode 100644 index 0000000000000000000000000000000000000000..9bae760676a364bd587b5a33c1d3f0d529b51c2a GIT binary patch literal 430 zcmb7AF>b>!4D@`j$jEH%%!!CS)M$Z1f;(j46e92-q&2dHpD$%4O@}NINkKZ^krKOZ zr15>Ea9Z6ZyLt9}c=a5|#H!4RKO*#Id+gqD#)Sh2yjsg$F9tKlk7w~sQupsx@x|Q) z*g*suF+ed~X!eE5gu+G8_taPAnxmQKrR8pw;z=p0c!sP^?vkaoY6QRUWG_eZTA!+^EGjtKOV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/7dcb764405ae26b71cb127b30336b45fd802640a b/lexer/fuzzer_corpus/7dcb764405ae26b71cb127b30336b45fd802640a new file mode 100644 index 0000000000000000000000000000000000000000..078e1a4c49e3b32466e853e67804f5d78362ab59 GIT binary patch literal 12 QcmZQzaI*Hb24P=D01fK`SpWb4 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/7dde4f40a01dfa3b917b86b8bd035929132f32db b/lexer/fuzzer_corpus/7dde4f40a01dfa3b917b86b8bd035929132f32db new file mode 100644 index 0000000000000000000000000000000000000000..18368599248f68e7d7b8198ae81f1c31664a142f GIT binary patch literal 566 zcmZQzD6w|5wvM;94gy2#_;@HQ9w-QcRZxBbln+!2lR~gyB0)eoWYHi52ah@Ex*(>3 ztpOSkG}v7T@+6s|hBZ*E^BgrYG(127N!VCWSYZieh%gb6fruci=Agv7bzT6(WdI37 Br1t;- literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/7e01c8cdc6b1904415e575240588c4759047692d b/lexer/fuzzer_corpus/7e01c8cdc6b1904415e575240588c4759047692d new file mode 100644 index 0000000000000000000000000000000000000000..d40e9e60a4b6c363edb49b99a8837bd501a56ea7 GIT binary patch literal 10 OcmZQzNV9gd24MgSiUKpNlGcva04!1j!~g&Q literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/808863bfb504bd1a7ba89b4f8eb8c118a9125798 b/lexer/fuzzer_corpus/808863bfb504bd1a7ba89b4f8eb8c118a9125798 new file mode 100644 index 0000000000000000000000000000000000000000..bb24de5ff945212e8801b5835e8e14d11c00a66e GIT binary patch literal 24 VcmZQzD6w|5wvGowC>0On0{}`b266xZ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/80a0247ebe3fd2aceff058d956c1c921ed7681a4 b/lexer/fuzzer_corpus/80a0247ebe3fd2aceff058d956c1c921ed7681a4 new file mode 100644 index 0000000000000000000000000000000000000000..0b271626bd432018ba8c64d6c5b067d7a269e417 GIT binary patch literal 205 ZcmZQzu&%PUE~XF|QEWmn<&G$>0swrjS+4*9 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/80d94c313466452d7b50fd144838a527809f2c7f b/lexer/fuzzer_corpus/80d94c313466452d7b50fd144838a527809f2c7f new file mode 100644 index 0000000000000000000000000000000000000000..93dbae56b9b3be98bce38e597273135e7a981a4d GIT binary patch literal 17 McmZQzsOCa}03iVc9{>OV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/80f348579a9a803a72d4a4cccd54824488b55aac b/lexer/fuzzer_corpus/80f348579a9a803a72d4a4cccd54824488b55aac new file mode 100644 index 0000000000000000000000000000000000000000..ab68b19c8758661013081ad72d8fbe9f44fb8715 GIT binary patch literal 5 McmZQz$k)gR00I#K2LJ#7 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8211bb03478a5a26c1fb40236780cbee8da45a06 b/lexer/fuzzer_corpus/8211bb03478a5a26c1fb40236780cbee8da45a06 new file mode 100644 index 0000000000000000000000000000000000000000..0dc1ad07f66fc1ac57ff2b54f7fbffcb956f886e GIT binary patch literal 5 McmZQz;N;{40027x8~^|S literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/833ca5a7d4cdf2c1867491c242ece799a01d77a9 b/lexer/fuzzer_corpus/833ca5a7d4cdf2c1867491c242ece799a01d77a9 new file mode 100644 index 0000000000000000000000000000000000000000..eaa3cceb277fbfd21c1345d5a234e13a5099cc4a GIT binary patch literal 3 KcmZQz&;$SgEC4D1 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/83a58c921e3f326f742c80f8b885c6c6dcc68803 b/lexer/fuzzer_corpus/83a58c921e3f326f742c80f8b885c6c6dcc68803 new file mode 100644 index 0000000000000000000000000000000000000000..354c17fb675085fe3ab925cdeb7ad6209f6ec79a GIT binary patch literal 21 YcmZQzsIso&isXv4j^qN;AhvZC05moQJ^%m! literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/83a9bf595bc7dea203b912007f70743b88f7af95 b/lexer/fuzzer_corpus/83a9bf595bc7dea203b912007f70743b88f7af95 new file mode 100644 index 0000000000000000000000000000000000000000..e5333f8d20346a904fbb773d18875c12cfc45c02 GIT binary patch literal 35 ecmZQzD6w|5wvM;94gy0U1Biei2uOpVbvyu^A_+49 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/83cd63c7765c3f1d6f7f4f1f9b032f8efd46b3ef b/lexer/fuzzer_corpus/83cd63c7765c3f1d6f7f4f1f9b032f8efd46b3ef new file mode 100644 index 0000000000000000000000000000000000000000..4c3ec98e53d341b047c1b5227a5673d1c02319fb GIT binary patch literal 31 VcmZQzsDgmB0*y*I3o2Gs1pvX;4DtW~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8476e6af7e75aa144bad68b33b499cdac5da2bf4 b/lexer/fuzzer_corpus/8476e6af7e75aa144bad68b33b499cdac5da2bf4 new file mode 100644 index 0000000000000000000000000000000000000000..8ae722284a7df64f7afd37b24e50f52ff1ee7747 GIT binary patch literal 5 McmZQz2+H#V00Jce4*&oF literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8477039b36c6e7e796ce4036aa78d32e00ce0103 b/lexer/fuzzer_corpus/8477039b36c6e7e796ce4036aa78d32e00ce0103 new file mode 100644 index 0000000000000000000000000000000000000000..6bc49c15ac80dc4e32144d97a81771a02123dfda GIT binary patch literal 419 zcmZQzsIo2|Xkg7{9Z$I{a2gU{^ zdVO^hRGLODh}Z&yuys!>E8S2y3sXbrSGGAYT921oM1!e>yi+61J76))&0Gx<4EcGZ z6Nh@`DF@qxLm8Og#fD;)7w)XbudAl(CaqK3RDg?FUHd)`~-G;wsv z&v{OqCrYEYI*rXzSCEes3ys>ATSq5bQ(}4*POhBt6^O#~h4npeKl;%iOjpFIh_~BW zsDBx_=SJb>33R-woVTHvtI-d`BG}&_s+UNHTM$o9z5AkXr+7BhQKY`69cmpx5MKph U$RNgiJTZUr(Q?jraM(`?zg?Z7bN~PV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/86c5f1d7668cd16af68c6901ef37d10a929b937e b/lexer/fuzzer_corpus/86c5f1d7668cd16af68c6901ef37d10a929b937e new file mode 100644 index 0000000000000000000000000000000000000000..ffe20be9e0055ea4183a558530cf2b05fbb832a8 GIT binary patch literal 138 zcmZQzh_{ZnwhjV9AO&KB7!U~I1BFYh9YJicsvw9clnv2tUW)$2I3_Ich DS_US+ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/875d260c6259b312bf7adc25aa6d37de04cacef9 b/lexer/fuzzer_corpus/875d260c6259b312bf7adc25aa6d37de04cacef9 new file mode 100644 index 0000000000000000000000000000000000000000..ba5c272a78bfcc82631ba310f61cc2e0e792afcf GIT binary patch literal 4 LcmZQz(5M9f0MP)Z literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/87870c833802ae370b72ded06d6b5466283e5189 b/lexer/fuzzer_corpus/87870c833802ae370b72ded06d6b5466283e5189 new file mode 100644 index 0000000000000000000000000000000000000000..6bd99a4c5d72ce646712cf1cde9a4a4df32a3267 GIT binary patch literal 33 WcmZQzNUH*av;vJv2&<|JnGFEjlMT@T literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/882f2aaac218ec0d84736ac2c55910a4594a1eae b/lexer/fuzzer_corpus/882f2aaac218ec0d84736ac2c55910a4594a1eae new file mode 100644 index 0000000000000000000000000000000000000000..c5eef8ad446e64b9faaf33bcbd402be3e66d834d GIT binary patch literal 44 bcmZQzsL;@?)`-+h(*Pnc0b!z&AYKUo=hzCS literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8840b9e11ea5d3aea427c815ebfe1896dc3b765e b/lexer/fuzzer_corpus/8840b9e11ea5d3aea427c815ebfe1896dc3b765e new file mode 100644 index 0000000000000000000000000000000000000000..abf11fc15465215e5cbd270a0952b7b6e4ae7205 GIT binary patch literal 13 McmZQzsD^`D03XE#OaK4? literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8873098a4246f81ee6e5576070d0a7244b3ac9f3 b/lexer/fuzzer_corpus/8873098a4246f81ee6e5576070d0a7244b3ac9f3 new file mode 100644 index 0000000000000000000000000000000000000000..9f97f469d789953804ba9720567ce4da76d7ed72 GIT binary patch literal 612 zcmbtRK?=Yi3>)~B{le4OU6egR@aV<=!fWlnIl zOg2P0JJ0zJP~pqV*dUfJ`D2Y96~mZgKiLy^AhO!!>kuCoK;j^CaF_;^CCVJ2I==ug08xRVP(wkc gLjVz`I718o>4yOn$HQC#v5Diic0F(G(fdBvi literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/891f275cd08dde2776d7140e46cb047faf9f0f8d b/lexer/fuzzer_corpus/891f275cd08dde2776d7140e46cb047faf9f0f8d new file mode 100644 index 0000000000000000000000000000000000000000..9cc2c48fa8591eb2271c0c8f639b2716cab354e8 GIT binary patch literal 43 kcmZQz@Z>7xs3 ztpOSkL`@f(pxZ?i7Xp1rbg&^p1maDQ4=K?PvKT2&AnrhkEKi{0P@@HAGpZ<|ps>yh LaMZ}q@UR8|QGTSV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/895e8fd679feb6a39068aba3d31fb206089a064b b/lexer/fuzzer_corpus/895e8fd679feb6a39068aba3d31fb206089a064b new file mode 100644 index 0000000000000000000000000000000000000000..b04294a69bbb5711cdc5d8885cb6b8c75b062708 GIT binary patch literal 5 McmZQza5Q2700ArjbN~PV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8a00c440fa5a60b20d2c8085a38baeaaf3c5670c b/lexer/fuzzer_corpus/8a00c440fa5a60b20d2c8085a38baeaaf3c5670c new file mode 100644 index 0000000000000000000000000000000000000000..9c8b16b04a18ef2d2fcb92ef87c6d2d910239eb6 GIT binary patch literal 66 hcmZQzD6w|5j<>cB0>gM96O98Af=U1tA@hMs;{jMl5|sb| literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8a88097f625c33cc9cbe29343feb52ab248b5c1b b/lexer/fuzzer_corpus/8a88097f625c33cc9cbe29343feb52ab248b5c1b new file mode 100644 index 0000000000000000000000000000000000000000..4dbc9d564eeb52b7afcf1ffaf60464f87713bb22 GIT binary patch literal 4 LcmZQzaLfb%0Pg^+ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8b0a819cd3fc4d68cf3e0e0855f7ebcd89a20317 b/lexer/fuzzer_corpus/8b0a819cd3fc4d68cf3e0e0855f7ebcd89a20317 new file mode 100644 index 0000000000000000000000000000000000000000..cdcc4ecba00dff3470c02a7f9e36c1dccc5db10b GIT binary patch literal 8 PcmZQzsEW`?(?|mV2P6US literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8b98620ebbf7bab27f5ca3fc0ec663cc58c76db9 b/lexer/fuzzer_corpus/8b98620ebbf7bab27f5ca3fc0ec663cc58c76db9 new file mode 100644 index 0000000000000000000000000000000000000000..7e1d793a6fb19d53912f112595561e994ec6f479 GIT binary patch literal 132 NcmZQzupVd-4FIct9v1)r literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8c623105d5f0f8ac252343c858286d65b992687c b/lexer/fuzzer_corpus/8c623105d5f0f8ac252343c858286d65b992687c new file mode 100644 index 0000000000000000000000000000000000000000..20bb277dba010b6e8b4eec56cd281ccfaa8eecee GIT binary patch literal 33 RcmZQzNYg0Lzy&fiGyq-;1)l%_ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8c74dc0dc68a7e61878314355623c887ace5eefe b/lexer/fuzzer_corpus/8c74dc0dc68a7e61878314355623c887ace5eefe new file mode 100644 index 0000000000000000000000000000000000000000..d30f58dbcbde3330ebaa4a85ffd2d99718f1ba92 GIT binary patch literal 1284 zcmchX!4iTn3`CvbSNw|}y)!Z#_ydl5@c(DrU78GyMG?UqS_;d{CM`6lbZ*95$9TLC zD3WwtJ57}ZBp27U*D0tYdLe=9KXFBK7%yr>++A(+PKMb8KJva{5mm6TRMmQ*A^2Ks zH^f1z*Ne7SJIxXhdoVAAo{=;9#0BSaxk4g`_a!Z{FOm!8p0h9m$ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8f1f1bdd61e03a0432e1425982bc95d4eed1dc8f b/lexer/fuzzer_corpus/8f1f1bdd61e03a0432e1425982bc95d4eed1dc8f new file mode 100644 index 0000000000000000000000000000000000000000..e17fed8c926e624cdf458d1c0afadefba445395a GIT binary patch literal 32 ccmZQzD6w|5wvM;94g$k?AQQ*|lR)}D0EC?h4*&oF literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/8fc80309676fc4e9b457cba583e09623e3a50e8b b/lexer/fuzzer_corpus/8fc80309676fc4e9b457cba583e09623e3a50e8b new file mode 100644 index 0000000000000000000000000000000000000000..b89e92b0fa4d338a3b246a20b9c8680e466c7871 GIT binary patch literal 294 zcmZQzD2ca*K{z7_$g+m>VAAo{sNx`=BS;xg90cPLEV$kvgfYmPp*ldyfSQ09td0T$ cp)NqT7tBYt7-AtpHBbSX6Cu8ZI0fb^09IjCBLDyZ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/9032685281013329ab00123038a24e88ee87e99f b/lexer/fuzzer_corpus/9032685281013329ab00123038a24e88ee87e99f new file mode 100644 index 0000000000000000000000000000000000000000..8284de965c26824dbb49949fa748f3fad0d14532 GIT binary patch literal 16 ScmZQzaIF4o8>NYVh&8bG?BNTV=KQ$s_eP@_OY6Nu74Odv-S2sP3`7zhhB PFy!)rA+nla>4((-Ps$uO literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/932d2c4206b09575f98aba174b4ae7eeecf9dd87 b/lexer/fuzzer_corpus/932d2c4206b09575f98aba174b4ae7eeecf9dd87 new file mode 100644 index 0000000000000000000000000000000000000000..e920f35b8277b4f9c4bdcf0551572290a10e0ba9 GIT binary patch literal 18 UcmWe&00N)?VBq89bC6*z07W?nsQ>@~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/936b204683d9aace88edec6916348263f8845bd2 b/lexer/fuzzer_corpus/936b204683d9aace88edec6916348263f8845bd2 new file mode 100644 index 0000000000000000000000000000000000000000..514b3d985c94865d53d02efb54be4068fd702bc0 GIT binary patch literal 429 zcma)2v5vwp4DI~Bg3*jOd$MQ;Do#R)y4>Ok3o%3-)h+nv&uQtMDj0}kC$V4R_tG>y z^@pBf(llMNn`h6b56`hptje7DGh7$@!fuZr+&L1FuQt~n2ZI^o=2?7`)cu=_503$+ z!sVE1tmcIoG_VTS7ZoDPb?qW_3l%p3c2R?dcTmuUEPdGTgP_Wh%n02CxTxSCE)(0ST%cR?yU(cR?MF0Q* literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/94992041a722e9461cb4da61dc3ca6b1c807fc52 b/lexer/fuzzer_corpus/94992041a722e9461cb4da61dc3ca6b1c807fc52 new file mode 100644 index 0000000000000000000000000000000000000000..74998deeee7f655ed2352e46bd5d44d88577d6ed GIT binary patch literal 35 ccmZQzsIKO!wyx&lss@ul8U(F@1egUR0G4D33;+NC literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/94f232a0e1b64975bc82dc84a484907795dd3c9a b/lexer/fuzzer_corpus/94f232a0e1b64975bc82dc84a484907795dd3c9a new file mode 100644 index 0000000000000000000000000000000000000000..9d60c44012b6c3601e1a08dc4a4f6ba2abfc952c GIT binary patch literal 68 ucmZQz@Z^f;a^)%ol8!*K%Gwo5#{+qu)*x{t5o?%QkeI7=6<6t>cuxTB2oKW$ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/94f5a62a7150c24701f9b0ccc4f003afaf33b04b b/lexer/fuzzer_corpus/94f5a62a7150c24701f9b0ccc4f003afaf33b04b new file mode 100644 index 0000000000000000000000000000000000000000..3c44c7c016b912f560875282ceac0a2911c1ddb8 GIT binary patch literal 4 LcmZQzP*4B>0Av6` literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/951cfc17803941388dcb27de4933bcf3cfa4e308 b/lexer/fuzzer_corpus/951cfc17803941388dcb27de4933bcf3cfa4e308 new file mode 100644 index 0000000000000000000000000000000000000000..27f962b82f5906cd2b383f83b6ec72a130c9e6a8 GIT binary patch literal 11 OcmZQzC;O^5O(R2n_%i)B>vj literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/965d67a89f658ebc162f41d13880ceb53878398a b/lexer/fuzzer_corpus/965d67a89f658ebc162f41d13880ceb53878398a new file mode 100644 index 0000000000000000000000000000000000000000..00b1122a67d52e801370ff8c77d59a0adf51f106 GIT binary patch literal 5 McmZQzu;#J`009L6fdBvi literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/969a5335de7a36dab4b48601f83e8289d1e24e14 b/lexer/fuzzer_corpus/969a5335de7a36dab4b48601f83e8289d1e24e14 new file mode 100644 index 0000000000000000000000000000000000000000..ad1165af08f9220d0138bf93dbbf6c35e36c43a3 GIT binary patch literal 103 zcmZQzsIKO!1_CevqO5@|E-q^j3oH!bR|9$0U?xN AlmGw# literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/971e03f3b57ac29e3328d70fb6a901e50cc1e3c3 b/lexer/fuzzer_corpus/971e03f3b57ac29e3328d70fb6a901e50cc1e3c3 new file mode 100644 index 0000000000000000000000000000000000000000..5978da87ba16050313c0fe5de6ebfa782821d2e4 GIT binary patch literal 70 NcmZQ%P~f5*003eL0>A(O literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/976127759e62f70d02f40d83a2ed5b7951571ceb b/lexer/fuzzer_corpus/976127759e62f70d02f40d83a2ed5b7951571ceb new file mode 100644 index 0000000000000000000000000000000000000000..b833ef9028ae226abc692de1028f5858919e8a64 GIT binary patch literal 44 UcmZQz&;WyissacDgG7h}0IvE6y8r+H literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/97846c394ced714617a96b8b35b582e232a9e7b3 b/lexer/fuzzer_corpus/97846c394ced714617a96b8b35b582e232a9e7b3 new file mode 100644 index 0000000000000000000000000000000000000000..a73664657d7b40dddbcdda7ab4636ae4876df505 GIT binary patch literal 20 bcmZQz@Z>7xsNtOsK literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/991945983caa4499432036384514d356d791b3be b/lexer/fuzzer_corpus/991945983caa4499432036384514d356d791b3be new file mode 100644 index 0000000000000000000000000000000000000000..927102682d7591a630a5e247ddacd7dda62cbe89 GIT binary patch literal 28 fcmZQz@Z>7zs7xs0RaEa3zGl< literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/9c5122ab103de543630bc727b76bd7b21839c073 b/lexer/fuzzer_corpus/9c5122ab103de543630bc727b76bd7b21839c073 new file mode 100644 index 0000000000000000000000000000000000000000..fa16ca0c74d0abb9eb232ac9dfc30f1fbb3b3e84 GIT binary patch literal 45 QcmZQz(7**UP$hs|0GT}pIRF3v literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/9d89da8664157ea1b5faa5bde8caf9f31d85b4a4 b/lexer/fuzzer_corpus/9d89da8664157ea1b5faa5bde8caf9f31d85b4a4 new file mode 100644 index 0000000000000000000000000000000000000000..7ed33ce0418796c1147892c1f2d2044315987e4e GIT binary patch literal 430 zcmZutv1$V`488e%#f{3?S(C}#(4&Q7KISt+KOMVK>xddWS$v46)OR(8Pgi0j+!qEKc0T1hr$F*ChQG)=%B zDM7qu28ai8ZO%YEpx}?am`9Y5U65I3hCI z4QTd+1kusg45s CS%69a literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/9da97ed219829e31b2b2a551b3ba371c7d7ab7f7 b/lexer/fuzzer_corpus/9da97ed219829e31b2b2a551b3ba371c7d7ab7f7 new file mode 100644 index 0000000000000000000000000000000000000000..b99b06e437480be64eb7b99ca81a4350bfa652aa GIT binary patch literal 6 LcmZQzum%DE0#pF) literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/9e1bf8c243c01b2c171f28550c25b974eb3fc910 b/lexer/fuzzer_corpus/9e1bf8c243c01b2c171f28550c25b974eb3fc910 new file mode 100644 index 0000000000000000000000000000000000000000..8025b653d84be0f33867b76e7274f3f9c2e552cc GIT binary patch literal 88 fcmZQzNYf}N(0~FE3xxxd0Mi*LJR}af1dtB^{8|ua literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/9f915817eadb6a53e1ba53785c9e39d3addfb7a7 b/lexer/fuzzer_corpus/9f915817eadb6a53e1ba53785c9e39d3addfb7a7 new file mode 100644 index 0000000000000000000000000000000000000000..da9944802cdc3136d8191a49c9efd3a2d1d1268f GIT binary patch literal 18 McmZQzu#QKC04Qn%(EtDd literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a019adfa6af044c1f3102fd4eb35f3883eed7767 b/lexer/fuzzer_corpus/a019adfa6af044c1f3102fd4eb35f3883eed7767 new file mode 100644 index 0000000000000000000000000000000000000000..a755420ef376ae20f67770931e9c3fff0071bf10 GIT binary patch literal 5 McmZQzunvs|00FxI>;M1& literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a03d6067a14043eca56172c64d9d734bbc6d3453 b/lexer/fuzzer_corpus/a03d6067a14043eca56172c64d9d734bbc6d3453 new file mode 100644 index 0000000000000000000000000000000000000000..d1f4dc4b96b790ad87c99b43467d5240a2f761db GIT binary patch literal 560 zcmZQzD6w|5wvM;94gy2#_;@HQ9w-QcRZxBbln+!2lR~gyB0)eoWYHi52ah@Ex*(>3 zt%0~I$Qq07cy$3aL$tzNhH5=ty%3F5wh`nGu#dnDI13|yu)7zk+d416Q6odc0~E&i UJ&40PnCa;L$8ZK(h{G)g065vBE&u=k literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a0c3025c93be787b318b0a0915efce0568f29fb4 b/lexer/fuzzer_corpus/a0c3025c93be787b318b0a0915efce0568f29fb4 new file mode 100644 index 0000000000000000000000000000000000000000..4d5d4bcc1f90b04aeb4738a139a8be0e9dd2ea17 GIT binary patch literal 151 pcmZQ(uvTGC%L~j43=9tp1W_Ph4WW=os0cA?Fm+*y;57$mJpiK$E}#Ga literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a0e3646d2ccccb4a16225b1c4995d6053b4bdd4e b/lexer/fuzzer_corpus/a0e3646d2ccccb4a16225b1c4995d6053b4bdd4e new file mode 100644 index 0000000000000000000000000000000000000000..9a46ca528a4f5575cd683435dd8d91e43840de07 GIT binary patch literal 7 McmZQz2&x7`00qkd?EnA( literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a0edc24b3d17348f5cb80d2b6b002ee58db6b035 b/lexer/fuzzer_corpus/a0edc24b3d17348f5cb80d2b6b002ee58db6b035 new file mode 100644 index 0000000000000000000000000000000000000000..99f1f9fa614db411fe463082d9925e91cac0f313 GIT binary patch literal 6 NcmZQzs1B+Q0ssUs0h<5- literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a101443f19af96e9408021094d007f3da407fb7f b/lexer/fuzzer_corpus/a101443f19af96e9408021094d007f3da407fb7f new file mode 100644 index 0000000000000000000000000000000000000000..0eed11eedfc1b2f21e1fe97b3feb28a48a1b3ced GIT binary patch literal 10 LcmZQz;DQ1G0dfFQ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a116527e7791e8cfe660a8c53382415e74b1634e b/lexer/fuzzer_corpus/a116527e7791e8cfe660a8c53382415e74b1634e new file mode 100644 index 0000000000000000000000000000000000000000..6461d7744f2be295d106252d6764ea00a0ad9ee5 GIT binary patch literal 1480 zcmcIk!3x754DC5zv7`UsDbOBz8LU$1&6|e~WX!|B{QOesY!9oou1g_kd@p%P(W>$i z8p%#-_R@Q)QMuY}5h*6B>gzdos8Zbs$gt`{B=Vun46hY1b2AD#+ abec$YM26JNYJ6Z#6m`9QOo)eItExBEuxI4} literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a1ca34f30d867511c5071bd62a0ec9532226a626 b/lexer/fuzzer_corpus/a1ca34f30d867511c5071bd62a0ec9532226a626 new file mode 100644 index 0000000000000000000000000000000000000000..ca6102e8566bde3ea7c97e0826972c9206962ee5 GIT binary patch literal 424 zcmcgoxeb6Y3}h6_%NVS{2ox4jAR|go%O;%76F?wQA*JwhpHmb)hORQ$1ZV?{(4@Hc zlAvX5gj;q2hobv~lx#-YyXqbz>pn(cxP060 T^@D|90)L+Kd$J3S|0J_5ER%Hu literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a204e6fc1dd252eb72786637ece539fc8ccb08be b/lexer/fuzzer_corpus/a204e6fc1dd252eb72786637ece539fc8ccb08be new file mode 100644 index 0000000000000000000000000000000000000000..8b2e4e199c77a74720a61c316133eb3c060d42a4 GIT binary patch literal 37 bcmZQzunw}0w+0g+MwPWSkVLS60#yqEwG;}d literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a208cbe77067c1b6f065b09fc05a11f79843e4cf b/lexer/fuzzer_corpus/a208cbe77067c1b6f065b09fc05a11f79843e4cf new file mode 100644 index 0000000000000000000000000000000000000000..2b3e1f5e3b0fad5b5934a1ae11cea5becf7e8a4f GIT binary patch literal 78 zcmXBKu?@f=3`9{zq5K{rt58@XMRbVL%Y&WnzTUO=^35lR4H^R$GT}x|j9VhIQp(Ej J5q11GPdG=66<7cO literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a24bab38ef7386f98fc7f93be8d07c3f6ceb3ece b/lexer/fuzzer_corpus/a24bab38ef7386f98fc7f93be8d07c3f6ceb3ece new file mode 100644 index 0000000000000000000000000000000000000000..4df6ae967bc341307fdcc0170908acb3ee3e3de1 GIT binary patch literal 7 OcmZQz(5TXgya@mVx&i$F literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a24c8bbc68f5bbc75f9e4125919196e52f3b3419 b/lexer/fuzzer_corpus/a24c8bbc68f5bbc75f9e4125919196e52f3b3419 new file mode 100644 index 0000000000000000000000000000000000000000..f94550ce3c402828660cd6ded5c3d45a4f36405c GIT binary patch literal 6 NcmZQz;Ns$X4*&sA0S*8F literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a259e1a662bcc421d6834afeab3a47dc344eedba b/lexer/fuzzer_corpus/a259e1a662bcc421d6834afeab3a47dc344eedba new file mode 100644 index 0000000000000000000000000000000000000000..4f6323800b8cfa765e7f0e773b5c2060be48ca01 GIT binary patch literal 4 LcmZQzh!+9?0Mr0- literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a2967df1f22ff6eb94dc4837d98507c543aae3cb b/lexer/fuzzer_corpus/a2967df1f22ff6eb94dc4837d98507c543aae3cb new file mode 100644 index 0000000000000000000000000000000000000000..ea22da153423394e41581c5b3bfb2a44bac052d1 GIT binary patch literal 6 LcmZQz-~s{w0BQg! literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a29d6d6337656a0bd738e477cdd90231050f37cd b/lexer/fuzzer_corpus/a29d6d6337656a0bd738e477cdd90231050f37cd new file mode 100644 index 0000000000000000000000000000000000000000..e6b13bcc3ad0a42d5bff13b4712ceef5be079fef GIT binary patch literal 6 NcmZQzh_8;12LJ>R0hs^* literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a2c6ea965e4b89873c59972ad24de3521f5ec565 b/lexer/fuzzer_corpus/a2c6ea965e4b89873c59972ad24de3521f5ec565 new file mode 100644 index 0000000000000000000000000000000000000000..5eeb34a9d357f25181fb44a7a1c1c77944b8fac9 GIT binary patch literal 13 NcmZQzaOO&bK>!XA0(1ZX literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a3be9919f350dff90746d5bbd335e9c13e075c6b b/lexer/fuzzer_corpus/a3be9919f350dff90746d5bbd335e9c13e075c6b new file mode 100644 index 0000000000000000000000000000000000000000..939aaa7b53101ef6a6c39f9be22350b2c1948eff GIT binary patch literal 18 LcmZQzutoy_A8G@! literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a45e530738453fbacd12389fc0b7c6bb0b5908b5 b/lexer/fuzzer_corpus/a45e530738453fbacd12389fc0b7c6bb0b5908b5 new file mode 100644 index 0000000000000000000000000000000000000000..49e6182cc8cc3287a1d55144a3e338729071ccf2 GIT binary patch literal 8 PcmZQzsIIQAt*r$B3M&HX literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a4fdd8e51e18577132e9b1d5d9e8504e4d3c96dc b/lexer/fuzzer_corpus/a4fdd8e51e18577132e9b1d5d9e8504e4d3c96dc new file mode 100644 index 0000000000000000000000000000000000000000..ce7bf297d5b3c633ee0cf8d40395bdf80c4a85e9 GIT binary patch literal 19 LcmZQzP(TL&6EgxK literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a5091dc3125fa52413368b176e86a49738c917a3 b/lexer/fuzzer_corpus/a5091dc3125fa52413368b176e86a49738c917a3 new file mode 100644 index 0000000000000000000000000000000000000000..26e35f95b49b8b7af59d97be9c7f86fa38da9464 GIT binary patch literal 37 acmZQzuy(YL2SOMHWL8-N0aO&kT?hcJTnZ=v literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a5bd5b33d21e9a221872d7ea360f18433d3f3be1 b/lexer/fuzzer_corpus/a5bd5b33d21e9a221872d7ea360f18433d3f3be1 new file mode 100644 index 0000000000000000000000000000000000000000..522fa3d0a77b80353e0d526899e8cf6344fdd8f8 GIT binary patch literal 16 XcmZQzaIMlP)F{v_&`7IJ(?|mVAzcKA literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a6a2deed0d75339e09924b0f19655f6656a15f4f b/lexer/fuzzer_corpus/a6a2deed0d75339e09924b0f19655f6656a15f4f new file mode 100644 index 0000000000000000000000000000000000000000..d67f6f939bab9aa072e142667247b7357bd8b928 GIT binary patch literal 66 qcmZQzaI31SN-NN)1d}_s~Uy? literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a81a394ce3ae2d25c0ee201c6578069a1b174e55 b/lexer/fuzzer_corpus/a81a394ce3ae2d25c0ee201c6578069a1b174e55 new file mode 100644 index 0000000000000000000000000000000000000000..9d55ca75fa1b8f73e158ddb4a8b3273cc2859e08 GIT binary patch literal 17 UcmZQz$f_>ZD9|X>NCV?w04TKtx&QzG literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/a9bcae8634ddb628111c2eedd0fcb768f85ff9f5 b/lexer/fuzzer_corpus/a9bcae8634ddb628111c2eedd0fcb768f85ff9f5 new file mode 100644 index 0000000000000000000000000000000000000000..e4edb74cb95bd539c0373a341013f5059d576e10 GIT binary patch literal 11 QcmZQz(9qD()Jy|n00;lW;}_h#Hx%o?Txl!$J=b7OpmCl TNwf@~vEiS+BZ^H6t);sIBCv%K literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/aa597b4fbdaf9c8d1c9a17426569c76134ff0fb9 b/lexer/fuzzer_corpus/aa597b4fbdaf9c8d1c9a17426569c76134ff0fb9 new file mode 100644 index 0000000000000000000000000000000000000000..d571a00b887f92ae2d8eba8b00a851b11c8bca0a GIT binary patch literal 267 zcmX|4%ZdU)44iX)g~#%^=bReb!wd@2&473bENl>A8*%Vrety&AV&zq-6l54CPKSw+ zsk(Vx>d%+gphZ+giX5Xv`x0@%ZuD;RZgWe(4k4t24BcUep55}&#`G(e2lWBKBBa*|6o;bno+rp(ljr#MQ!Xo*8>aaE<6$YGn&{(FDjUCaM3A0 z>eM4=#yzOf9FmStl9J@;n4JpWbny}&&;y7xs7<^~=B literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/adc83b19e793491b1c6ea0fd8b46cd9f32e592fc b/lexer/fuzzer_corpus/adc83b19e793491b1c6ea0fd8b46cd9f32e592fc new file mode 100644 index 000000000000..8b137891791f --- /dev/null +++ b/lexer/fuzzer_corpus/adc83b19e793491b1c6ea0fd8b46cd9f32e592fc @@ -0,0 +1 @@ + diff --git a/lexer/fuzzer_corpus/adcb06d68c467bc49a484a781f3645f2e0fce25d b/lexer/fuzzer_corpus/adcb06d68c467bc49a484a781f3645f2e0fce25d new file mode 100644 index 0000000000000000000000000000000000000000..6502b3b04d2478dd6df852f2b27661f4ce725606 GIT binary patch literal 7 OcmZQzC@JGADFXlnp8?+h literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ae4efce72909d7c1fc095fa47f3cf98f4a7ffb34 b/lexer/fuzzer_corpus/ae4efce72909d7c1fc095fa47f3cf98f4a7ffb34 new file mode 100644 index 0000000000000000000000000000000000000000..5acdf806852abf7ee66e09c66cb7c0731ddcb0e3 GIT binary patch literal 6 NcmZQzNUzS*1ONmW0eS!c literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ae9c533353214d987cef18fd97d4fbaa24c39c09 b/lexer/fuzzer_corpus/ae9c533353214d987cef18fd97d4fbaa24c39c09 new file mode 100644 index 0000000000000000000000000000000000000000..290ad7c6f17dbcc2b3e91d91449ce3ff5936829e GIT binary patch literal 6 LcmZQzPyhk|0Y(6U literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/afeb1f561aa265b0793c0cf08ffbe986ba95cccd b/lexer/fuzzer_corpus/afeb1f561aa265b0793c0cf08ffbe986ba95cccd new file mode 100644 index 0000000000000000000000000000000000000000..4f4b09fde155ff05e5931588db23bb4e3bb97d13 GIT binary patch literal 4 LcmZQz2zCSj0P6si literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b02b1b59c1aaf66b44b15dfc215b921a276f23e9 b/lexer/fuzzer_corpus/b02b1b59c1aaf66b44b15dfc215b921a276f23e9 new file mode 100644 index 0000000000000000000000000000000000000000..a4792363902507dd14c1ddd7b8c413b3c011df7d GIT binary patch literal 195 zcmZQzi137f;OdAf7*itxCh8en4H687%0RdX>0kuY6RZ%d5=qb#&W0ESmUl)`3gJNP VfU5@D2WO+}giCm41Xo)#008aWIeGv9 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b071ec550ba1741734797a724d10985838abe3f0 b/lexer/fuzzer_corpus/b071ec550ba1741734797a724d10985838abe3f0 new file mode 100644 index 0000000000000000000000000000000000000000..0c12f07c08c2cd401a704f178e402b58145c81c8 GIT binary patch literal 146 zcmXwyI|{=<3`AYeNpysOtHEm=w-F}gRuN{4#Uzj-x_pKN7eeUs-VDPEdPaKsBVFC| zmb_*V^9R%VI}w;bqN-+8ShJQd>l;o$3W0Cl|Ej~l%lW>cgRRO~ij@)13I-y^uFaxZ KoZ=OphwWd5pDR)T literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b1256a6b51fe7e4af001152847a41e23822312fd b/lexer/fuzzer_corpus/b1256a6b51fe7e4af001152847a41e23822312fd new file mode 100644 index 0000000000000000000000000000000000000000..46a55914b898614155101931d1f29c26e2e4be27 GIT binary patch literal 7 OcmZQzaI*Hb_5}a~=K)gy literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b1898734ba5a8617c5535e2ec02feb33764c5da7 b/lexer/fuzzer_corpus/b1898734ba5a8617c5535e2ec02feb33764c5da7 new file mode 100644 index 0000000000000000000000000000000000000000..0b446340aa4e40320d6d92bf955e219a85f71004 GIT binary patch literal 48 XcmZQzu#S(n20<`^!9vW^D;K|2km literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b1ac04528499a30c79bb5a6a887c7f093ffd3d7b b/lexer/fuzzer_corpus/b1ac04528499a30c79bb5a6a887c7f093ffd3d7b new file mode 100644 index 0000000000000000000000000000000000000000..4b97a85c5ac69f007d5e88003d116aa01ae2a2c7 GIT binary patch literal 38 ocmZQz$kNEmbgWL+s4mt>)6gi?D9|iW@B}gofKa0#35Ycc0M6zLzyJUM literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b27345719ecf784b471e96fdc2407baaac45ecd0 b/lexer/fuzzer_corpus/b27345719ecf784b471e96fdc2407baaac45ecd0 new file mode 100644 index 0000000000000000000000000000000000000000..219013d51239a6367e765b3c45b1463ad859b68b GIT binary patch literal 4 LcmZQzNXr8N0X_iL literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b378c4f7a72199ec1da13bd6756d4487ac1a9fa3 b/lexer/fuzzer_corpus/b378c4f7a72199ec1da13bd6756d4487ac1a9fa3 new file mode 100644 index 0000000000000000000000000000000000000000..d2d739f678d7f51ec5f4838c7e8b5a8d6d5766f0 GIT binary patch literal 7 OcmZQzNXz3&%L4!f6#=sV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b399c00c30a1356525d5d39e7cfeb99b2f878bee b/lexer/fuzzer_corpus/b399c00c30a1356525d5d39e7cfeb99b2f878bee new file mode 100644 index 0000000000000000000000000000000000000000..20f506ce44eaa5062ba53fa476aa3b3d4b3271dc GIT binary patch literal 19 McmZQ%P~buX00));!TmsG7P~@Ljkty{E|uY6J(;bRZF(PcJ3X7xs*2}w1wuy%38Eaq1YFdS%MqajEa!@<*pVLq)r1UV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b4899afd21a1c4c6eb7459bf91ed43689919798e b/lexer/fuzzer_corpus/b4899afd21a1c4c6eb7459bf91ed43689919798e new file mode 100644 index 0000000000000000000000000000000000000000..b0900ca9b04d7dcefd4c170d116c962cb10719e4 GIT binary patch literal 9 NcmZQz(5Th`0RRSD0c-#O literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b49b6c4ec35af87447943af9acb1a14a637ba4ae b/lexer/fuzzer_corpus/b49b6c4ec35af87447943af9acb1a14a637ba4ae new file mode 100644 index 0000000000000000000000000000000000000000..7105883b0a0f867d5a3b03e8ad65a79bea971679 GIT binary patch literal 12 PcmZQzNORP1v<5=}4rKy` literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b49dddf68a09edcb754e5d95cadc35e2683df728 b/lexer/fuzzer_corpus/b49dddf68a09edcb754e5d95cadc35e2683df728 new file mode 100644 index 0000000000000000000000000000000000000000..4a4a95440a500df2a3270c4411ac6f12492e5c3a GIT binary patch literal 827 zcmc&zy$%8)4DQ^gaIBlUcB;bQ#p&2wShRzKF&YPLe0J?YJiWM|<*%g_zJ35eL(Qfk zuhi9K+H$UCi>ozW@yw;wpgEY1SDbI8X#j+VFYa|S^1Y)Nd=W;0Vu zmiCLAsjN_nV62mKOO^EZCZS|97WupW*k0N6TBi(ha`KnoY_A7PM=^fc-p`z1LF|~t z>@8wOI?%yL`6w6y1@_zM=PwuHBeP`ow~f)eh#oIB9;3jChya*-X5 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b4c66e7c06855671e747f3100c9d5072b79cf83a b/lexer/fuzzer_corpus/b4c66e7c06855671e747f3100c9d5072b79cf83a new file mode 100644 index 0000000000000000000000000000000000000000..7afc70f2e3702d9b982a72c09c32f902ec3d8a9e GIT binary patch literal 36 PcmZQzsOG{A!BXDD7OM_!t_A=H84hj$ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b68b13e7dbf523d3850bfb4ee1879ee267ce1309 b/lexer/fuzzer_corpus/b68b13e7dbf523d3850bfb4ee1879ee267ce1309 new file mode 100644 index 0000000000000000000000000000000000000000..c8b199635c5995ca8afe724950f93b3c364de943 GIT binary patch literal 5 McmZQzu(q}a00CzJvH$=8 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b6f15ce61e23d12e16ac972ece7ecb71a1f4c87a b/lexer/fuzzer_corpus/b6f15ce61e23d12e16ac972ece7ecb71a1f4c87a new file mode 100644 index 0000000000000000000000000000000000000000..4d3d341f33fea4c1f86aad6e81db07091d2136b4 GIT binary patch literal 10 RcmZQzaO5iGa^!Mk000K;0apM3 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b7294356ab92ecb2a8f35f0b61cb2f3fc68af2f7 b/lexer/fuzzer_corpus/b7294356ab92ecb2a8f35f0b61cb2f3fc68af2f7 new file mode 100644 index 0000000000000000000000000000000000000000..adaf863928661bede3f3673dfdfdd1fa1ae808b6 GIT binary patch literal 83 ncmZQzP|(l>A`k&(Xh2yIVUU!j0zw|77DWM27H$GinT93+^t=o~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b7719b430c03af92aef14110ee2fbf3abba0de5d b/lexer/fuzzer_corpus/b7719b430c03af92aef14110ee2fbf3abba0de5d new file mode 100644 index 0000000000000000000000000000000000000000..865807decea7dbcee6e19c87c5920dd98e7bb000 GIT binary patch literal 4 LcmZQzP_PC70Dk~n literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b7cd4bb8ad5ec4e73e07a3cda397faa3f19e4286 b/lexer/fuzzer_corpus/b7cd4bb8ad5ec4e73e07a3cda397faa3f19e4286 new file mode 100644 index 0000000000000000000000000000000000000000..d5e26d956cfee5c4e03ae055abcbe36f2599f985 GIT binary patch literal 131 bcmZQz$jC6o1I+Qrp-LH$4$MrAO--x--0T`6 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b8e9125a0ae565f71d1d93249e347d56068d42bf b/lexer/fuzzer_corpus/b8e9125a0ae565f71d1d93249e347d56068d42bf new file mode 100644 index 0000000000000000000000000000000000000000..a482f9b058e2b28c75c103ccbb6104324586b34c GIT binary patch literal 133 ncmZQzNYem<0wB@^F~Cd+1A_!A!UoWV(fLq4*o8ARJTx=_5knUc literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/b9a93efe3d76aecec38a121521ae64810a0769c2 b/lexer/fuzzer_corpus/b9a93efe3d76aecec38a121521ae64810a0769c2 new file mode 100644 index 0000000000000000000000000000000000000000..63f0b68d4d49268afbaadf3e9f142af3c135bff8 GIT binary patch literal 34 LcmZQzuqFTidC~`A literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/bb1e5e53f6a1253fe1e896b50e9edc0095e2932b b/lexer/fuzzer_corpus/bb1e5e53f6a1253fe1e896b50e9edc0095e2932b new file mode 100644 index 0000000000000000000000000000000000000000..ec6097b198a4e25d87779111de635058ade69c0c GIT binary patch literal 4 LcmZQz(9i?`0DS;b literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/bd7c4c25399bf8f278eb615f58b75b8f72349bf6 b/lexer/fuzzer_corpus/bd7c4c25399bf8f278eb615f58b75b8f72349bf6 new file mode 100644 index 0000000000000000000000000000000000000000..61f4efbea87179b483b02c577dbeb4eb7fbbdcb2 GIT binary patch literal 35 OcmZQz;KT#CKym;R;Q=cE literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/be7f31b717f86fda96b3148fb706908303e17f8f b/lexer/fuzzer_corpus/be7f31b717f86fda96b3148fb706908303e17f8f new file mode 100644 index 0000000000000000000000000000000000000000..a9790b18b838dd910f983dc156f66dd733e1dc6b GIT binary patch literal 642 mcmZQz$jHbr9hRVi?qFC3BYsaAkPa-(42&&IEKCg`2@e4OA)-|P literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/bee6d10492fd61954b05c5108f958c5406b30fc9 b/lexer/fuzzer_corpus/bee6d10492fd61954b05c5108f958c5406b30fc9 new file mode 100644 index 0000000000000000000000000000000000000000..7aa04705a1ede1ffcb4cf0e55e30e43eb05ef541 GIT binary patch literal 4 LcmZQz2#o~*0Sf@L literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/befde2b724d2370f61d7dc2da95d1be21a9c862b b/lexer/fuzzer_corpus/befde2b724d2370f61d7dc2da95d1be21a9c862b new file mode 100644 index 0000000000000000000000000000000000000000..fe1a052f5908d40bacd2b9e1705013bce333e6c0 GIT binary patch literal 73 lcmZQz@Z>6WE+Y literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c02bf5d08db57f3aae88172e17cad08ebd076c22 b/lexer/fuzzer_corpus/c02bf5d08db57f3aae88172e17cad08ebd076c22 new file mode 100644 index 0000000000000000000000000000000000000000..1725660c3e0eed944b3b38faf033b108a7cb5985 GIT binary patch literal 114 zcmWm4F$w}f3Sgjc>pIXk(Z=*}F7fhAxV z_-ah;rXQGTGa~!ik=RnZq1LK+$&~~tPZ5L}8bTg?OJ6bTjPhSzdAtYxvScac2Sj2Y Ap#T5? literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c18fefd5d4d05d1ee9f162801aa6e17f428ba8da b/lexer/fuzzer_corpus/c18fefd5d4d05d1ee9f162801aa6e17f428ba8da new file mode 100644 index 0000000000000000000000000000000000000000..3d1966813c4d8f1f7dab18180c8e3c9805be565f GIT binary patch literal 9 QcmZQz2-eWh)X>xf00o@^M*si- literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c1b2bcb63da8041ce87b328132217ba70d920fca b/lexer/fuzzer_corpus/c1b2bcb63da8041ce87b328132217ba70d920fca new file mode 100644 index 0000000000000000000000000000000000000000..4ad2545a86b55c6295eb1664ef3de73e8122004f GIT binary patch literal 18 WcmZQzsH(~Xf-1+Xth_u|APWFF`39!| literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c1df12a64dd8abefb0e6590527cb10ed692cf324 b/lexer/fuzzer_corpus/c1df12a64dd8abefb0e6590527cb10ed692cf324 new file mode 100644 index 0000000000000000000000000000000000000000..a16a93b68fc77659bae51f3ce6dcf70a167d8dff GIT binary patch literal 1154 zcmZQz$jHbr9R=ivfB}7hIduW~{vLcf=^GIS)Qt$@Ohfh}VI9b-2M^oCz{J?Z#KOQB HQt$u(smkfQ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c21a4d67d547c0845676886c6892c8c6827d75e2 b/lexer/fuzzer_corpus/c21a4d67d547c0845676886c6892c8c6827d75e2 new file mode 100644 index 0000000000000000000000000000000000000000..dcbdd1cfa6cd3d28b3853e73193b00c1dbf04090 GIT binary patch literal 8 PcmZQzsMe^~(5MCg2H^qf literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c2bec5c726a06b456cdd88f28a32f48831044a11 b/lexer/fuzzer_corpus/c2bec5c726a06b456cdd88f28a32f48831044a11 new file mode 100644 index 0000000000000000000000000000000000000000..e1ded6082090d091ddc7a123cd59834eba6e2dcf GIT binary patch literal 130 NcmZQ%P~aL^002&t1sDJT literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c32505224c93f972f500f44afb188d3889dfa159 b/lexer/fuzzer_corpus/c32505224c93f972f500f44afb188d3889dfa159 new file mode 100644 index 0000000000000000000000000000000000000000..369664575f1c53d47893096bc6b742564ce0d96a GIT binary patch literal 36 gcmZQz@Z@ska^x!Is)`3PK+uuP(Hg{d1Y$4^0CD{WPXGV_ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c3670cccd1b3582fb1ec1b742f6e2898cfe26555 b/lexer/fuzzer_corpus/c3670cccd1b3582fb1ec1b742f6e2898cfe26555 new file mode 100644 index 0000000000000000000000000000000000000000..f109405a581abe830a040d2c9c2285a80683243d GIT binary patch literal 335 zcmZQ(uvTGC%L~j43=9tp1W_Ph4WSTZ0IDcHrBIcQP|dhZ1WLnf3BYSLip>}n!>j?@ k1~U+9HH^X(28)1+V2~pGro!C`GY?8z2ZA*tiCPB&02knBM*si- literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c3ed53cf882409c54cc6c988aae34deacecf057a b/lexer/fuzzer_corpus/c3ed53cf882409c54cc6c988aae34deacecf057a new file mode 100644 index 0000000000000000000000000000000000000000..0d29dd658099aa577218557338cd0d5d382b4cbd GIT binary patch literal 44 TcmZQzunw%QF0LjBG^_&wo(mHI literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c63072e6cf44fde5c8ec3e7ea1a5328497ea5479 b/lexer/fuzzer_corpus/c63072e6cf44fde5c8ec3e7ea1a5328497ea5479 new file mode 100644 index 0000000000000000000000000000000000000000..0a5df510dc44ca2114eacfed2fdf91ed6e4f001f GIT binary patch literal 98 zcmZQz$kNEmbgb5>F4oW}NJ`SsDAd#}&?wLV5}Ij19*C(~prDba0ag=KtpOGUN~eJ_ NL)Je(Bj zG(}QclRu8ne2q%wjfk>r1hwii$cFd4I!&BeV2_gvAZ%1X z?7`RcY&AqJ2OGSpsi7Q?op)7D>U e=p~*!oN-zIONK~9Ww_{ud$-b__T13<|MCMDDKzZ> literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c70643d26ec7090724a54c6e87ea68c89d4c4e91 b/lexer/fuzzer_corpus/c70643d26ec7090724a54c6e87ea68c89d4c4e91 new file mode 100644 index 0000000000000000000000000000000000000000..29e44e89f129c6887ec5270ad25b8428a91e11ec GIT binary patch literal 75 PcmZQz&>#n7V9^8st6~eO literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/c7fb3f5be75a6dacfc3e28abbf73fe5e58495d30 b/lexer/fuzzer_corpus/c7fb3f5be75a6dacfc3e28abbf73fe5e58495d30 new file mode 100644 index 0000000000000000000000000000000000000000..8263326a9a38a06a3b068ca40d5842b45e9b8018 GIT binary patch literal 4 LcmZQz;N%1V03QGo literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ca576072e488152f50e6f1158a1396f73ddd2c07 b/lexer/fuzzer_corpus/ca576072e488152f50e6f1158a1396f73ddd2c07 new file mode 100644 index 0000000000000000000000000000000000000000..4ffe592cbaa7e8a52628ab7f0a9cda260eb24dc8 GIT binary patch literal 4 LcmZQz;Nk=T03iSr literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/cb2edb9e0c977a705a6f29fae0934079a1b60c92 b/lexer/fuzzer_corpus/cb2edb9e0c977a705a6f29fae0934079a1b60c92 new file mode 100644 index 0000000000000000000000000000000000000000..4c488ef17bd730af8f1fd38a18a99418006e4f72 GIT binary patch literal 185 zcmY+6u?>JQ3;{01Gok* literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/cbe9914a17fe70a1883c2dab7491fd0211a5ee38 b/lexer/fuzzer_corpus/cbe9914a17fe70a1883c2dab7491fd0211a5ee38 new file mode 100644 index 0000000000000000000000000000000000000000..49d9b4c472f18ab1403c1077a0a0d0cda3349b4a GIT binary patch literal 38 YcmZQz2nf>1vj##438$f=AQ|gC0MP0SbN~PV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/cc34b4cfee9dc462dcc95d7560a21cbf4adcf7b0 b/lexer/fuzzer_corpus/cc34b4cfee9dc462dcc95d7560a21cbf4adcf7b0 new file mode 100644 index 0000000000000000000000000000000000000000..1907d3e665c8765351771a4f14495a172d390a3f GIT binary patch literal 824 zcmaJaa zjd7-F$p~ZYVOp|MSS);IFOx>#SbzL2U5C3}m&F#fD3gQaZ_}PM-hLpqFA*k;AXfs+ zwm_v0Cj5?=DbHPSihJ=S{g}TOXgfH=sQ5sc=~-O(L`0g7Ki_(tC|eih(#6M?xMJS#oC_xt}=_tE~J7 ZmRX$>2u=dT11E@wIi18P;p$jbAKz`b|3Lr% literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/cc652bd0ebdb4b1726182372be30c691099f7e8c b/lexer/fuzzer_corpus/cc652bd0ebdb4b1726182372be30c691099f7e8c new file mode 100644 index 0000000000000000000000000000000000000000..8896e0bebd5e56ab8763cf1209e344493dc5b5f8 GIT binary patch literal 61 zcmZQz@Z@r=POApVv;7Z(i| OYp$Z|;OgK4jSK+&Oc3P& literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ccaac59aa2a93544b76f073311b350dcf65fbf5e b/lexer/fuzzer_corpus/ccaac59aa2a93544b76f073311b350dcf65fbf5e new file mode 100644 index 0000000000000000000000000000000000000000..9b7ba2ca8e09a4bdce4d7ea19ce11b2e84b15251 GIT binary patch literal 4 LcmZQz;JN|;0PFzY literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ccc73c223aabaa38c58624ea80eb778c645346f2 b/lexer/fuzzer_corpus/ccc73c223aabaa38c58624ea80eb778c645346f2 new file mode 100644 index 0000000000000000000000000000000000000000..77690850be768b51ee347c28183aa83b07f52236 GIT binary patch literal 255 PcmZQ%P~aM|z>5n2|CS0m literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/cd04f9a383899d9640ff1e9707e47e77afdd9562 b/lexer/fuzzer_corpus/cd04f9a383899d9640ff1e9707e47e77afdd9562 new file mode 100644 index 0000000000000000000000000000000000000000..db521616e270e3bd0444759a09307fabac820bb2 GIT binary patch literal 71 zcmZQz$kNEmbgb5>F4oX=)kxFODAXv>EKmTlz+yqw8X5&jKn#SMK$M0mpb6HH#sC1r Cq!We! literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/cd2ef6d312ee80a3d4c377361fddbb793889f4c8 b/lexer/fuzzer_corpus/cd2ef6d312ee80a3d4c377361fddbb793889f4c8 new file mode 100644 index 0000000000000000000000000000000000000000..eb991762c4ff3f638181ff3d1222117ac4219a8f GIT binary patch literal 53 zcmZQz@GRx3a(kRf-;PT`u=c&;+71jRMUyg*1&c0A>*feEoSw8vsW31}^{r literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d1020364827748c3a6e1bf09c6e75a5edf44079e b/lexer/fuzzer_corpus/d1020364827748c3a6e1bf09c6e75a5edf44079e new file mode 100644 index 0000000000000000000000000000000000000000..ae80374f0698aaaca761befdee46813d2155ce26 GIT binary patch literal 119 hcmZQz&;Wu0Faoi#fD9xtphARFFb7GJSf+=D1^~ko6cGRb literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d19cd0207ab449752da6b55a82975be7f056a70b b/lexer/fuzzer_corpus/d19cd0207ab449752da6b55a82975be7f056a70b new file mode 100644 index 0000000000000000000000000000000000000000..fa7136b457ef6cf74c3d86206bc0c7252e697f08 GIT binary patch literal 6 NcmZQzsMM%d1^@$l0YCr% literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d1ee881e19534be9fc12fd862bb3f2269a09bdd7 b/lexer/fuzzer_corpus/d1ee881e19534be9fc12fd862bb3f2269a09bdd7 new file mode 100644 index 0000000000000000000000000000000000000000..ea7e6ea0b3dad68255f9984d54200f033c2b85d1 GIT binary patch literal 37 ZcmZQzsL+Vg&`8tJgd!LX5diTtN&udP2)zIR literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d26ba8c01b80dbb3ea1a50d429b832a33b6af614 b/lexer/fuzzer_corpus/d26ba8c01b80dbb3ea1a50d429b832a33b6af614 new file mode 100644 index 0000000000000000000000000000000000000000..fd60487508b76f63be25bcaf93f078f711e42020 GIT binary patch literal 18 VcmZQza5gvR;!4Zo$^(;Wc>o=M1K0on literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d2b69ab4a6972e182cdef5c319be940062388300 b/lexer/fuzzer_corpus/d2b69ab4a6972e182cdef5c319be940062388300 new file mode 100644 index 0000000000000000000000000000000000000000..7c19668cc82385c16bc4cb8ed62cf595c02cc5fb GIT binary patch literal 4 LcmZQzaDEB^0dD~* literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d38a79abc527773b20840f0ac21b618049746c32 b/lexer/fuzzer_corpus/d38a79abc527773b20840f0ac21b618049746c32 new file mode 100644 index 0000000000000000000000000000000000000000..93fc8823b37a4ccc678e0214125b5a66472f3805 GIT binary patch literal 19 VcmZQz$f_>ZDA3R-)JTI6!2mF}1quKF literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d3ae4114281302b6810c02cee903e2f05aea79ce b/lexer/fuzzer_corpus/d3ae4114281302b6810c02cee903e2f05aea79ce new file mode 100644 index 0000000000000000000000000000000000000000..ba5c95ab5adc6a4c1af9f06096e1dbf1148870b3 GIT binary patch literal 9 OcmZQz2-a{@0Ac_Js{x|` literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d3c908f06f91576b96d60c7b165811e69993ae78 b/lexer/fuzzer_corpus/d3c908f06f91576b96d60c7b165811e69993ae78 new file mode 100644 index 0000000000000000000000000000000000000000..17d0c6e98b7093dcea16a3d8611af430b022e58a GIT binary patch literal 9 QcmZQz2 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d488eca7d059c07b0f9e8ad7d7206ace887cda85 b/lexer/fuzzer_corpus/d488eca7d059c07b0f9e8ad7d7206ace887cda85 new file mode 100644 index 0000000000000000000000000000000000000000..65cc9d3d3bd29c8a6ddeb8c35b600aa712754b21 GIT binary patch literal 3 KcmZQzs0IK4egJ#` literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d51ab1559f11d168cd4cdf123602113f60732e79 b/lexer/fuzzer_corpus/d51ab1559f11d168cd4cdf123602113f60732e79 new file mode 100644 index 0000000000000000000000000000000000000000..606724982a3abd9198706b622ae87f90e67af81f GIT binary patch literal 5 McmZQz&?wLZ00D*o!TO literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/d9437de0ae53e80a335a15a00ec9e622f2fb89d3 b/lexer/fuzzer_corpus/d9437de0ae53e80a335a15a00ec9e622f2fb89d3 new file mode 100644 index 0000000000000000000000000000000000000000..b14006dea1bb038322fc945c5b16c761dfc7d61a GIT binary patch literal 6 LcmZQzs0IQ61k?fT literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/da5dc3160083ac54ec11a162d23293ffef7029c8 b/lexer/fuzzer_corpus/da5dc3160083ac54ec11a162d23293ffef7029c8 new file mode 100644 index 0000000000000000000000000000000000000000..4a9ea5ec03def6747335997fc0b0ad39a80ea85b GIT binary patch literal 123 zcmZQz$jS@V$jfxB)~GJlDAX*_0HHJujY1$S&;&w_G%(iCfXV=cH3}3o(!lD0Y)zmv PNErwr>%*_NK%*J}IjJG- literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/daa6495ffb6c5cbf5cd3dbf3b7b8bfc42803d1d2 b/lexer/fuzzer_corpus/daa6495ffb6c5cbf5cd3dbf3b7b8bfc42803d1d2 new file mode 100644 index 0000000000000000000000000000000000000000..a49bcda77045600a82bcea454ade3229d5e66412 GIT binary patch literal 29 LcmZQz(7+77xs&eFVjpuT-j^c9WsuV=W^w8bmnq&7xs2C1`>{3T+UpMKr-HuD~cx>zGGlq-+RF^wxNElZ;~k1H6c KwmP^#BLe`pj1U0; literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/dcf81fe92865368756d9729c63739c37b38f037b b/lexer/fuzzer_corpus/dcf81fe92865368756d9729c63739c37b38f037b new file mode 100644 index 0000000000000000000000000000000000000000..b5318c4c0841017a2cf4f88bc0ff2f6be219abb1 GIT binary patch literal 33 jcmZQz$kNEmbgVAcDAXv>&@9kQ(}1uv3pCO+(io}%mthF> literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/dd0da9f51f2783d95680664efb3f5a322ee885b5 b/lexer/fuzzer_corpus/dd0da9f51f2783d95680664efb3f5a322ee885b5 new file mode 100644 index 0000000000000000000000000000000000000000..d967972068737afa68082e4567e8300876715e3d GIT binary patch literal 34 icmWe&&~##0DdJY0ssI2 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/df9bc143232105f71dbc4cd6f29f1faf40adc348 b/lexer/fuzzer_corpus/df9bc143232105f71dbc4cd6f29f1faf40adc348 new file mode 100644 index 0000000000000000000000000000000000000000..7f03fd84c2dbbf572404e05f51d2697f3a33abe0 GIT binary patch literal 10 PcmZQzuucQQJnJ+73myWE literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e01aeb76d2ded444ad0373a68f2c784db09ca0bd b/lexer/fuzzer_corpus/e01aeb76d2ded444ad0373a68f2c784db09ca0bd new file mode 100644 index 0000000000000000000000000000000000000000..9d674127a8288b031d947e5d8addd37d53a80053 GIT binary patch literal 18 RcmZQzh}VdZ2VxkE1^_3>1fu`| literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e0938f8484d9bc11fc2e6c6a95b95bcda639c25a b/lexer/fuzzer_corpus/e0938f8484d9bc11fc2e6c6a95b95bcda639c25a new file mode 100644 index 0000000000000000000000000000000000000000..fe17b49e1e14742d8e3cf899b7b7e21e9cfdcdad GIT binary patch literal 9 QcmZQz(8$-w*VN1h00(;k@Bjb+ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e0db3d59e7b298f022cace1fd52d3875e5fc9694 b/lexer/fuzzer_corpus/e0db3d59e7b298f022cace1fd52d3875e5fc9694 new file mode 100644 index 0000000000000000000000000000000000000000..32fbe4feffc871b3bfb3887ff6491361ebbb6f7e GIT binary patch literal 27 RcmZQzsIIOq0s$b63ILeC3)cVu literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e255f1112e76bf142d77ee3c42cda90853fefeaf b/lexer/fuzzer_corpus/e255f1112e76bf142d77ee3c42cda90853fefeaf new file mode 100644 index 0000000000000000000000000000000000000000..7f474f79cddb660bbf9f554424e1d44f7a8db02b GIT binary patch literal 140 xcmZQzD2ca*K{z7_$g+m>;;lh^N00!J1%mMi7LqE6F_?P6Iu4FC%O literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e5f2b058f54b45dc07f3b9d6e4637e8b7af2c5a7 b/lexer/fuzzer_corpus/e5f2b058f54b45dc07f3b9d6e4637e8b7af2c5a7 new file mode 100644 index 0000000000000000000000000000000000000000..a365d7fdb7ca6092f76fbc9f590f847045aaec58 GIT binary patch literal 126 zcmZQz$jS@V$jfxB)~GJl&?rdK&?wX>&;&va5K4ox(}0{bO$`m8AOUHR9-tD90)=8Q T4KfO>8Eybbg(gr%;lpYGrzIl< literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e72cc6d41d020b5c579ab185b34447ec9520f86c b/lexer/fuzzer_corpus/e72cc6d41d020b5c579ab185b34447ec9520f86c new file mode 100644 index 0000000000000000000000000000000000000000..c63664d67c8cd6c6b527cff4a0aff19e75a9ea3d GIT binary patch literal 18 XcmZQz$n&?Z$O57Y4-F3w56*G`FJT2Z literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e82759d6621dc86de4cf5033868a3673e74053dd b/lexer/fuzzer_corpus/e82759d6621dc86de4cf5033868a3673e74053dd new file mode 100644 index 0000000000000000000000000000000000000000..b678df50e02fb72f696e56a1a82722fdd060f8f9 GIT binary patch literal 4 LcmZQz$jATy0XzWF literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e8546e69f53ac69e138b8a739d321f629be57164 b/lexer/fuzzer_corpus/e8546e69f53ac69e138b8a739d321f629be57164 new file mode 100644 index 0000000000000000000000000000000000000000..deb715648485ece059dc2a68eec02fda313ee8d6 GIT binary patch literal 6 NcmZQzu-4Gf0005v0JH!A literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e8d8ab82dea469e3e3c7a536df5a77e3ad899129 b/lexer/fuzzer_corpus/e8d8ab82dea469e3e3c7a536df5a77e3ad899129 new file mode 100644 index 0000000000000000000000000000000000000000..2c54e3c4a387b746e0cd7fbdad233b8283e71669 GIT binary patch literal 294 zcmZQzD2ca*K{z7_$g+m>VAAo{U~v!ymjj8wAeu1T1fY5lgek+&4>Aoy4NNudt;AwE Jl25>%1^}dNRGI() literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e8e793189ab4cce6a062fa09c0740693b6ce1e19 b/lexer/fuzzer_corpus/e8e793189ab4cce6a062fa09c0740693b6ce1e19 new file mode 100644 index 0000000000000000000000000000000000000000..17eaf77249699a218a78bb9e1ac35e8d8f8773e4 GIT binary patch literal 10 NcmZQz2myoKTmTFu0@DBh literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e8ec7cc1ca98820ae6e98c1354ec2d6bece46ef2 b/lexer/fuzzer_corpus/e8ec7cc1ca98820ae6e98c1354ec2d6bece46ef2 new file mode 100644 index 0000000000000000000000000000000000000000..8dc2caf3d1fad068456f2cbbcb947ffb94ed2ae4 GIT binary patch literal 131 scmZQzD6w|5wvM;94g$k?ATu6?4H3a63RVh{u!iV|s6{r3pl<7U0CepoT>t<8 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/e91c47ea25efbbfb60ba17d786caa9659bbab6d2 b/lexer/fuzzer_corpus/e91c47ea25efbbfb60ba17d786caa9659bbab6d2 new file mode 100644 index 0000000000000000000000000000000000000000..a3d4a44e9a72c227d50165c2c6a97cfaabaf24ab GIT binary patch literal 130 XcmZQz(5Qlg6iPuJu?E1cEX@J{?G`hL literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ea17e12d2e985a026980a016b72acacb30244a76 b/lexer/fuzzer_corpus/ea17e12d2e985a026980a016b72acacb30244a76 new file mode 100644 index 0000000000000000000000000000000000000000..fea2cd1e947277d51dcf1824015d90826ee9c2d7 GIT binary patch literal 19 UcmZQzu-35Fv<4GEMjj9Y03TTcivR!s literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ea69aad1620b5025cc85f415080cd799b66ebc68 b/lexer/fuzzer_corpus/ea69aad1620b5025cc85f415080cd799b66ebc68 new file mode 100644 index 0000000000000000000000000000000000000000..a25e1affc687668de7bff2cd627ef9fb3a0bacc8 GIT binary patch literal 6 NcmZQzsHzUG1^@(r0mJ|R literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ea6da9d77a360c4826d1a29c2bf40e9209bc1c0b b/lexer/fuzzer_corpus/ea6da9d77a360c4826d1a29c2bf40e9209bc1c0b new file mode 100644 index 0000000000000000000000000000000000000000..ae5fa74178501dfa07c8f76b8fb62a6edee47869 GIT binary patch literal 7 LcmZQzs0IN52Rs63 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/eb2f5a2dd2fee2ef20a54406427e10043b345485 b/lexer/fuzzer_corpus/eb2f5a2dd2fee2ef20a54406427e10043b345485 new file mode 100644 index 0000000000000000000000000000000000000000..3e3df4f89e5fe1aeb7b9b6006f84310c5082345e GIT binary patch literal 717 zcmb7BNe+N82sG(e{6$axKu*RFcx?RtNx|X>)U5|dhnayu>T;i!LWO7|;>0f>$;Hu@ zEPtqEIGnCCFz3kMM_13sV7B|t(*c|W3R7sqf}-@+1I(-UXB5QHNd4S$6y^+dMIHCn hQ|Li0=r0Ras6dyGOSi6%reU~Yl>tJ4#FScarVSD@;X?ob literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/eb6be60b4aa6b17f16953f6095b6ea7efa92f6d4 b/lexer/fuzzer_corpus/eb6be60b4aa6b17f16953f6095b6ea7efa92f6d4 new file mode 100644 index 0000000000000000000000000000000000000000..0b61ba76c5b8ee8e304138fa61a6077fbc4b03a6 GIT binary patch literal 16 XcmZQz(6H91(9n$3Ow&x$(98n>888Ej literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ec34b45a65e9bad07d332490983b305e6f1d358b b/lexer/fuzzer_corpus/ec34b45a65e9bad07d332490983b305e6f1d358b new file mode 100644 index 0000000000000000000000000000000000000000..7e8807a84dad029316468a05263e48f86955a27f GIT binary patch literal 395 zcmaivK@Na02n2iPOFjD+-yo0I0a_X(sm9pd6_>F!RZ%YC88=6F)yYB$vXcvkX*b7Z zQq#X)y7@Hv*Oo?`b)~beX~%{t@rnX~S@0HJ4G<&j+3jLzfI(_}i8Te8uiC@^<4_X6 Ha*Lb~7wTHy literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ec6905048c1682c644f01e41531ab3d87e0a2247 b/lexer/fuzzer_corpus/ec6905048c1682c644f01e41531ab3d87e0a2247 new file mode 100644 index 0000000000000000000000000000000000000000..7eb644f4062a279484dca66399bcf4196db87a81 GIT binary patch literal 7 OcmZQz@Y3+s$OZrdwEF literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f05b2bd236751d7863172a380f5ab4315344968e b/lexer/fuzzer_corpus/f05b2bd236751d7863172a380f5ab4315344968e new file mode 100644 index 0000000000000000000000000000000000000000..02c0f1cbc4046919db080f0898693ce53583ed6b GIT binary patch literal 13 UcmZQzD77xPcB%HN&ay5702iwR{r~^~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f0c16a24aba99a02eb9924dd4a4725ab8e92ffad b/lexer/fuzzer_corpus/f0c16a24aba99a02eb9924dd4a4725ab8e92ffad new file mode 100644 index 0000000000000000000000000000000000000000..9648d0406caa0dc67b4f80d2172cdf7ef50b5f96 GIT binary patch literal 24 ScmZQzsD^=B7^tqUtp)&kO$w&~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f10576d1e2fb48314b8dfbfbeb5d708defe6097b b/lexer/fuzzer_corpus/f10576d1e2fb48314b8dfbfbeb5d708defe6097b new file mode 100644 index 0000000000000000000000000000000000000000..aa081d4ae33ae1d64aee00c3f849ac7170fa0442 GIT binary patch literal 216 zcmZQ!;Bbl$a(0dnss_?d)gWfIlT#3w3uXhE@lH-**&0C*g&1)5x<%fz<#=TL$R> literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f1778e9e69871a38d2ce4d8b7c4a3e0b35ece46a b/lexer/fuzzer_corpus/f1778e9e69871a38d2ce4d8b7c4a3e0b35ece46a new file mode 100644 index 0000000000000000000000000000000000000000..4afddd260071e31e7e15928a6e5c7e4f6cf26d92 GIT binary patch literal 8 NcmZQzsMG*LeEVLRl7c#fR z$u+UE39s4B52xhO{^@#!RSB)O5Z;{@cu+U zPm_W&?$_M4yqz6BQ{+snEW<%9RJ9HM1hWEk@MsJk*uMx%Mg$L*s1`1$W2EMSQ}y|I zH8^;$b=eA(<0CltE2OLA_=fTxneRnoMRU&GQAZPj`!ZkHtNS h?$yEt!`GojY}0_zF@Y6b^~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f3da8335de7de651461ad28357d506e940d18bdf b/lexer/fuzzer_corpus/f3da8335de7de651461ad28357d506e940d18bdf new file mode 100644 index 0000000000000000000000000000000000000000..cb5a33698db0e6d6602a53d6a8fce18b0f7fd688 GIT binary patch literal 71 VcmZQz$ifct;KCZ3a3(H>CIHs98`A&) literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f40831624c06f31927bd2af861887ad578246010 b/lexer/fuzzer_corpus/f40831624c06f31927bd2af861887ad578246010 new file mode 100644 index 0000000000000000000000000000000000000000..d6331f72e067cb91f746df4aaaf5912ffee225b1 GIT binary patch literal 4 LcmZQ%;D`qR0Cxas literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f4ddda0ae8524f4f632d5d03291b59acc1952a74 b/lexer/fuzzer_corpus/f4ddda0ae8524f4f632d5d03291b59acc1952a74 new file mode 100644 index 0000000000000000000000000000000000000000..64c06eef4c52a95175e58439057fb736ae369d7d GIT binary patch literal 110 zcmXBKAr1mT3@FI(}dB@>Ke8ohzWs=*?)PK;GTG=a&dAy)15gH6Fs1q w*u{G65_TBY#gxdgVjyu(8H(1L;9YOz3!w@_pg!u8pXL9KRe!~U-b-FtzLkj{HUIzs literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f53e9d74f34d349f856d8aba3f40712bcfe8d916 b/lexer/fuzzer_corpus/f53e9d74f34d349f856d8aba3f40712bcfe8d916 new file mode 100644 index 0000000000000000000000000000000000000000..a56654412bd144a2bc1624225acfd45283db6e7f GIT binary patch literal 3 KcmZQzs09E3fB=2~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f5581adcf52c7acfd5fa26cbb317231aff1d9ed7 b/lexer/fuzzer_corpus/f5581adcf52c7acfd5fa26cbb317231aff1d9ed7 new file mode 100644 index 0000000000000000000000000000000000000000..4c2860cb90b0fb8728f3ff9d4e2288e35a43af09 GIT binary patch literal 106 pcmZQ(U|R6BTWDR literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f57bb62ad6d29b8f4d1fb3baa4474f3af4e0cbab b/lexer/fuzzer_corpus/f57bb62ad6d29b8f4d1fb3baa4474f3af4e0cbab new file mode 100644 index 0000000000000000000000000000000000000000..0a561b0e2f2e649d974c15e79f6435486ad12b56 GIT binary patch literal 137 UcmZQzNYj7-O(;DORECBI0KFv@m;e9( literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f6117176339050e85b72129ff118f2713b118931 b/lexer/fuzzer_corpus/f6117176339050e85b72129ff118f2713b118931 new file mode 100644 index 0000000000000000000000000000000000000000..5713182d7f51083bec1d78f6aa8ccdc879e458ee GIT binary patch literal 13 QcmZQz&;SE3FE0%Z01Nd39{>OV literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f66e211bfde320bf50efe03fde1cbbbf5df440c6 b/lexer/fuzzer_corpus/f66e211bfde320bf50efe03fde1cbbbf5df440c6 new file mode 100644 index 0000000000000000000000000000000000000000..60419111f276dcae8ad512fcfd63714601cb6eb0 GIT binary patch literal 18 XcmZQzsN!;U&@9l8;%x+_9rC7rn6eNF?x|8l@ z^;jw9n^?Rw#;7xs2ockZExA4K5C-^x3mHMIIy-;>&VktKK>&|<)Qss3QgYCB*b$ty zNjYIQDLQ>%QH@Vgi;G5ZGt4t>dRk2_(YWB}Y!^wCUb$p@H4PRK4~MemVN NT+WE!xaecfyI=9No}mB$ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f9373536de828c70789357df4be4069df64d5dc2 b/lexer/fuzzer_corpus/f9373536de828c70789357df4be4069df64d5dc2 new file mode 100644 index 0000000000000000000000000000000000000000..32636ee6306fc104c312343a94f74ec38aa0e7aa GIT binary patch literal 3 KcmZQz=mr1)jsT1R literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/f9a0b5a03a08526b1622f57bf3cefae54eb49abd b/lexer/fuzzer_corpus/f9a0b5a03a08526b1622f57bf3cefae54eb49abd new file mode 100644 index 0000000000000000000000000000000000000000..002186f3d796eee0dd723836cf307658beb059f1 GIT binary patch literal 566 zcmZQzD6w|5wvM;94gy2#_;@HQ9w-QcRZxBbln+!2lR~gyB0)eoWYHi52ah@Ex*(>3 zoCI`@bZD9|X>NCP5`U;reo1d;#% literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/faa689e2f7b3c3877c1581ae943cffa5c037ffbf b/lexer/fuzzer_corpus/faa689e2f7b3c3877c1581ae943cffa5c037ffbf new file mode 100644 index 0000000000000000000000000000000000000000..d2c6264467cde220c1d91dc93bf661b020918bad GIT binary patch literal 39 WcmZQzh_?;`!+2{DgmZvwByj-9(h8dZ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/facca3ae362b2fab961eb9e724b3790b1977d0a8 b/lexer/fuzzer_corpus/facca3ae362b2fab961eb9e724b3790b1977d0a8 new file mode 100644 index 0000000000000000000000000000000000000000..0eb264775757152ff459fb4552cbf5f4119e2c34 GIT binary patch literal 391 zcmZQz$jHbrB^DSGr7)BvpaD{ym+1)6l#365lz`>IY7G#;1kN-y4XuKh6dD==W8kO3 t4uC7cXFpI5tj;k$9*;7(QDBB=ydm6i2!^4FiHW(Tk*TQxF!;HutNB2Cky z|Lx%gSFoU#O-)ZL)0^eUA(4@POf?U(?&K;rx^WsAMAj05BtIKTf(tG-qYP3cWXU&j+aN@k>#0;xTec7{{?L<+W?xaR&$JQF;IX literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/fc880c8c473a9d0b14bb5827260c1170e8ca9535 b/lexer/fuzzer_corpus/fc880c8c473a9d0b14bb5827260c1170e8ca9535 new file mode 100644 index 0000000000000000000000000000000000000000..961ecc2e21274592e7bf1390bf09d96eee8e5dd3 GIT binary patch literal 156 gcmZQzNYfw;GzlxgQ~}WhAv568=zO>YoB>w>0Edqm6aWAK literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/fc96ab8937b4d16598d2831e4d1f89df4b720d72 b/lexer/fuzzer_corpus/fc96ab8937b4d16598d2831e4d1f89df4b720d72 new file mode 100644 index 0000000000000000000000000000000000000000..f578dc9df90fd2bf9b60c54723c1e8c1cd6dfa64 GIT binary patch literal 13 PcmZQz(5Th`0x$sp4>|&0 literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/fcc91d6415ebf086ccc8b84ef729d5099cc19a84 b/lexer/fuzzer_corpus/fcc91d6415ebf086ccc8b84ef729d5099cc19a84 new file mode 100644 index 0000000000000000000000000000000000000000..c2428eb03bef183a284ccab206e889a4cf0a10ed GIT binary patch literal 11 PcmZQz@Y3+o$Ob_G3yuPI literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/fd958cb8a73d5d70d0be71a387c7973c3b1df2e9 b/lexer/fuzzer_corpus/fd958cb8a73d5d70d0be71a387c7973c3b1df2e9 new file mode 100644 index 0000000000000000000000000000000000000000..898f0737218f4a095c53a92e32ccf73ea7f23289 GIT binary patch literal 16 XcmZQz$kNEt(5Nof&`8tB({KU+9+3m_ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/fdce145b982b47c9598cfe55883672e86727d5b8 b/lexer/fuzzer_corpus/fdce145b982b47c9598cfe55883672e86727d5b8 new file mode 100644 index 0000000000000000000000000000000000000000..615ce7d56136e0822bc2f1b253bb3270919b0243 GIT binary patch literal 20 VcmZQzNYl{Juy(Z8NY${0QUE8J1T6pn literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/fe9a584f5c7c5d9eb5e4b15f85960ca7f1079a2e b/lexer/fuzzer_corpus/fe9a584f5c7c5d9eb5e4b15f85960ca7f1079a2e new file mode 100644 index 0000000000000000000000000000000000000000..678903a0403e190bad961d36631e683bfdf9d5be GIT binary patch literal 6 LcmZQz-~<8y0AK(m literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/fecd4b2d80be6971216cd554f44793b3b8adaba6 b/lexer/fuzzer_corpus/fecd4b2d80be6971216cd554f44793b3b8adaba6 new file mode 100644 index 0000000000000000000000000000000000000000..dc9be270d23d30539b23203d8c5d36c936ccedf2 GIT binary patch literal 11 ScmZQzNOROk%(r&5b_4(om;#sp literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/fef279c42c269b2a38ccfbf781f73897284ec2b2 b/lexer/fuzzer_corpus/fef279c42c269b2a38ccfbf781f73897284ec2b2 new file mode 100644 index 0000000000000000000000000000000000000000..12cb389136e187b86ae9a672a88bb7ae1edd934f GIT binary patch literal 322 mcmZQz$jHbrr2z;HtqP?S8wjeyr2v}?NeK*K-~j*(3u9ma literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ff5f77350f4850c12dc9576ea268de27bb55ade1 b/lexer/fuzzer_corpus/ff5f77350f4850c12dc9576ea268de27bb55ade1 new file mode 100644 index 0000000000000000000000000000000000000000..f856ab875de2be1230a2247fbdf9005f56445d21 GIT binary patch literal 3 KcmZQz&;S4cD*!0~ literal 0 HcmV?d00001 diff --git a/lexer/fuzzer_corpus/ffcfd70e30e22415a17a3152c0ba1cc0f9f756a3 b/lexer/fuzzer_corpus/ffcfd70e30e22415a17a3152c0ba1cc0f9f756a3 new file mode 100644 index 0000000000000000000000000000000000000000..43e972674483fc63845dfe4289d64976dd136875 GIT binary patch literal 43 wcmV~$p%DNe3+m4kitlZlALVp0Vr)w8=+@fa&PNf>%#U7{E@flZsVKDuiN!vFvP literal 0 HcmV?d00001 diff --git a/lexer/token_kind.cpp b/lexer/token_kind.cpp new file mode 100644 index 000000000000..7aba5c216382 --- /dev/null +++ b/lexer/token_kind.cpp @@ -0,0 +1,103 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include "lexer/token_kind.h" + +#include "llvm/ADT/StringRef.h" + +namespace Carbon { + +auto TokenKind::Name() const -> llvm::StringRef { + static constexpr llvm::StringLiteral Names[] = { +#define CARBON_TOKEN(TokenName) #TokenName, +#include "lexer/token_registry.def" + }; + return Names[static_cast(kind_value)]; +} + +auto TokenKind::IsSymbol() const -> bool { + static constexpr bool Table[] = { +#define CARBON_TOKEN(TokenName) false, +#define CARBON_SYMBOL_TOKEN(TokenName, Spelling) true, +#include "lexer/token_registry.def" + }; + return Table[static_cast(kind_value)]; +} + +auto TokenKind::IsGroupingSymbol() const -> bool { + static constexpr bool Table[] = { +#define CARBON_TOKEN(TokenName) false, +#define CARBON_OPENING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, ClosingName) \ + true, +#define CARBON_CLOSING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, OpeningName) \ + true, +#include "lexer/token_registry.def" + }; + return Table[static_cast(kind_value)]; +} + +auto TokenKind::IsOpeningSymbol() const -> bool { + static constexpr bool Table[] = { +#define CARBON_TOKEN(TokenName) false, +#define CARBON_OPENING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, ClosingName) \ + true, +#include "lexer/token_registry.def" + }; + return Table[static_cast(kind_value)]; +} + +auto TokenKind::GetClosingSymbol() const -> TokenKind { + static constexpr TokenKind Table[] = { +#define CARBON_TOKEN(TokenName) Error(), +#define CARBON_OPENING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, ClosingName) \ + ClosingName(), +#include "lexer/token_registry.def" + }; + auto result = Table[static_cast(kind_value)]; + assert(result != Error() && "Only opening symbols are valid!"); + return result; +} + +auto TokenKind::IsClosingSymbol() const -> bool { + static constexpr bool Table[] = { +#define CARBON_TOKEN(TokenName) false, +#define CARBON_CLOSING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, OpeningName) \ + true, +#include "lexer/token_registry.def" + }; + return Table[static_cast(kind_value)]; +} + +auto TokenKind::GetOpeningSymbol() const -> TokenKind { + static constexpr TokenKind Table[] = { +#define CARBON_TOKEN(TokenName) Error(), +#define CARBON_CLOSING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, OpeningName) \ + OpeningName(), +#include "lexer/token_registry.def" + }; + auto result = Table[static_cast(kind_value)]; + assert(result != Error() && "Only closing symbols are valid!"); + return result; +} + +auto TokenKind::IsKeyword() const -> bool { + static constexpr bool Table[] = { +#define CARBON_TOKEN(TokenName) false, +#define CARBON_KEYWORD_TOKEN(TokenName, Spelling) true, +#include "lexer/token_registry.def" + }; + return Table[static_cast(kind_value)]; +} + +auto TokenKind::GetFixedSpelling() const -> llvm::StringRef { + static constexpr llvm::StringLiteral Table[] = { +#define CARBON_TOKEN(TokenName) "", +#define CARBON_SYMBOL_TOKEN(TokenName, Spelling) Spelling, +#define CARBON_KEYWORD_TOKEN(TokenName, Spelling) Spelling, +#include "lexer/token_registry.def" + }; + return Table[static_cast(kind_value)]; +} + +} // namespace Carbon diff --git a/lexer/token_kind.h b/lexer/token_kind.h new file mode 100644 index 000000000000..69dfbe1af1c5 --- /dev/null +++ b/lexer/token_kind.h @@ -0,0 +1,88 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#ifndef LEXER_TOKEN_KIND_H_ +#define LEXER_TOKEN_KIND_H_ + +#include + +#include + +#include "llvm/ADT/StringRef.h" + +namespace Carbon { + +class TokenKind { + enum class KindEnum : int8_t { +#define CARBON_TOKEN(TokenName) TokenName, +#include "lexer/token_registry.def" + }; + + public: +#define CARBON_TOKEN(TokenName) \ + static constexpr auto TokenName()->TokenKind { return KindEnum::TokenName; } +#include "lexer/token_registry.def" + + // The default constructor is deleted as objects of this type should always be + // constructed using the above factory functions for each unique kind. + TokenKind() = delete; + + auto operator==(const TokenKind& rhs) const -> bool { + return kind_value == rhs.kind_value; + } + auto operator!=(const TokenKind& rhs) const -> bool { + return kind_value != rhs.kind_value; + } + + // Get a friendly name for the token for logging or debugging. + auto Name() const -> llvm::StringRef; + + // Test whether this kind of token is a simple symbol sequence (punctuation, + // not letters) that appears directly in the source text and can be + // unambiguously lexed with `starts_with` logic. While these may appear + // inside of other tokens, outside of the contents of other tokens they + // don't require any specific characters before or after to distinguish them + // in the source. Returns false otherwise. + auto IsSymbol() const -> bool; + + // Test whether this kind of token is a grouping symbol (part of an opening + // and closing pair that must always be matched in the token stream). + auto IsGroupingSymbol() const -> bool; + + // Test whether this kind of token is an opening symbol for a group. + auto IsOpeningSymbol() const -> bool; + + // Returns the associated closing symbol for an opening symbol. + // + // The token kind must be an opening symbol. + auto GetClosingSymbol() const -> TokenKind; + + // Test whether this kind of token is an closing symbol for a group. + auto IsClosingSymbol() const -> bool; + + // Returns the associated opening symbol for a closing symbol. + // + // The token kind must be an closing symbol. + auto GetOpeningSymbol() const -> TokenKind; + + // Test whether this kind of token is a keyword. + auto IsKeyword() const -> bool; + + // If this token kind has a fixed spelling when in source code, returns it. + // Otherwise returns an empty string. + auto GetFixedSpelling() const -> llvm::StringRef; + + // Enable implicit conversion to an int, including in a `constexpr` context, + // to enable usage in `switch` and `case`. + constexpr operator int() const { return static_cast(kind_value); } + + private: + constexpr TokenKind(KindEnum kind_value) : kind_value(kind_value) {} + + KindEnum kind_value; +}; + +} // namespace Carbon + +#endif // LEXER_TOKEN_KIND_H_ diff --git a/lexer/token_kind_test.cpp b/lexer/token_kind_test.cpp new file mode 100644 index 000000000000..c803a0441326 --- /dev/null +++ b/lexer/token_kind_test.cpp @@ -0,0 +1,93 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include "lexer/token_kind.h" + +#include + +#include "gmock/gmock.h" +#include "gtest/gtest.h" +#include "llvm/ADT/StringRef.h" + +namespace Carbon { +namespace { + +using ::testing::MatchesRegex; + +// We restrict symbols to punctuation characters that are expected to be widely +// available on modern keyboards used for programming. +constexpr llvm::StringLiteral SymbolRegex = "[][{}!@#%^&*()/?\\|;:.,<>=+~-]+"; + +// We restrict keywords to be lowercase ASCII letters and underscores. +constexpr llvm::StringLiteral KeywordRegex = "[a-z_]+"; + +#define CARBON_TOKEN(TokenName) \ + TEST(TokenKindTest, TokenName) { \ + EXPECT_EQ(#TokenName, TokenKind::TokenName().Name()); \ + EXPECT_FALSE(TokenKind::TokenName().IsSymbol()); \ + EXPECT_FALSE(TokenKind::TokenName().IsKeyword()); \ + EXPECT_EQ("", TokenKind::TokenName().GetFixedSpelling()); \ + } +#define CARBON_SYMBOL_TOKEN(TokenName, Spelling) \ + TEST(TokenKindTest, TokenName) { \ + EXPECT_EQ(#TokenName, TokenKind::TokenName().Name()); \ + EXPECT_TRUE(TokenKind::TokenName().IsSymbol()); \ + EXPECT_FALSE(TokenKind::TokenName().IsGroupingSymbol()); \ + EXPECT_FALSE(TokenKind::TokenName().IsOpeningSymbol()); \ + EXPECT_FALSE(TokenKind::TokenName().IsClosingSymbol()); \ + EXPECT_FALSE(TokenKind::TokenName().IsKeyword()); \ + EXPECT_EQ(Spelling, TokenKind::TokenName().GetFixedSpelling()); \ + EXPECT_THAT(Spelling, MatchesRegex(SymbolRegex.str())); \ + } +#define CARBON_OPENING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, ClosingName) \ + TEST(TokenKindTest, TokenName) { \ + EXPECT_EQ(#TokenName, TokenKind::TokenName().Name()); \ + EXPECT_TRUE(TokenKind::TokenName().IsSymbol()); \ + EXPECT_TRUE(TokenKind::TokenName().IsGroupingSymbol()); \ + EXPECT_TRUE(TokenKind::TokenName().IsOpeningSymbol()); \ + EXPECT_EQ(TokenKind::ClosingName(), \ + TokenKind::TokenName().GetClosingSymbol()); \ + EXPECT_FALSE(TokenKind::TokenName().IsClosingSymbol()); \ + EXPECT_FALSE(TokenKind::TokenName().IsKeyword()); \ + EXPECT_EQ(Spelling, TokenKind::TokenName().GetFixedSpelling()); \ + EXPECT_THAT(Spelling, MatchesRegex(SymbolRegex.str())); \ + } +#define CARBON_CLOSING_GROUP_SYMBOL_TOKEN(TokenName, Spelling, OpeningName) \ + TEST(TokenKindTest, TokenName) { \ + EXPECT_EQ(#TokenName, TokenKind::TokenName().Name()); \ + EXPECT_TRUE(TokenKind::TokenName().IsSymbol()); \ + EXPECT_TRUE(TokenKind::TokenName().IsGroupingSymbol()); \ + EXPECT_FALSE(TokenKind::TokenName().IsOpeningSymbol()); \ + EXPECT_TRUE(TokenKind::TokenName().IsClosingSymbol()); \ + EXPECT_EQ(TokenKind::OpeningName(), \ + TokenKind::TokenName().GetOpeningSymbol()); \ + EXPECT_FALSE(TokenKind::TokenName().IsKeyword()); \ + EXPECT_EQ(Spelling, TokenKind::TokenName().GetFixedSpelling()); \ + EXPECT_THAT(Spelling, MatchesRegex(SymbolRegex.str())); \ + } +#define CARBON_KEYWORD_TOKEN(TokenName, Spelling) \ + TEST(TokenKindTest, TokenName) { \ + EXPECT_EQ(#TokenName, TokenKind::TokenName().Name()); \ + EXPECT_FALSE(TokenKind::TokenName().IsSymbol()); \ + EXPECT_TRUE(TokenKind::TokenName().IsKeyword()); \ + EXPECT_EQ(Spelling, TokenKind::TokenName().GetFixedSpelling()); \ + EXPECT_THAT(Spelling, MatchesRegex(KeywordRegex.str())); \ + } +#include "lexer/token_registry.def" + +// Verify that the symbol tokens are sorted from longest to shortest. This is +// important to ensure that simply in-order testing will identify tokens +// following the max-munch rule. +TEST(TokenKindTest, SymbolsInDescendingLength) { + int previous_length = INT_MAX; +#define CARBON_SYMBOL_TOKEN(TokenName, Spelling) \ + EXPECT_LE(llvm::StringRef(Spelling).size(), previous_length) \ + << "Symbol token not in descending length order: " << #TokenName; \ + previous_length = llvm::StringRef(Spelling).size(); +#include "lexer/token_registry.def" + EXPECT_GT(previous_length, 0); +} + +} // namespace +} // namespace Carbon diff --git a/lexer/token_registry.def b/lexer/token_registry.def new file mode 100644 index 000000000000..48c34b58a356 --- /dev/null +++ b/lexer/token_registry.def @@ -0,0 +1,162 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// Note that this is an X-macro header. +// +// It does not use `#include` guards, and instead is designed to be `#include`ed +// after some set of x-macros are defined in order for its inclusion to expand +// to the desired output. +// +// The viable X-macros to define prior to including the header are: +// +// - `CARBON_TOKEN` +// - `CARBON_SYMBOL_TOKEN` +// - `CARBON_OPENING_GROUP_SYMBOL_TOKEN` +// - `CARBON_CLOSING_GROUP_SYMBOL_TOKEN` +// - `CARBON_KEYWORD_TOKEN` +// +// This tree represents the subset relationship between these macros. +// +// Regardless of which of these macros is defined prior to inclusion, all of the +// definitions will be removed at the end of including this file to clean up the +// set of defined macros. + +#ifndef CARBON_TOKEN +#define CARBON_TOKEN(Name) +#endif + +#ifndef CARBON_SYMBOL_TOKEN +#define CARBON_SYMBOL_TOKEN(Name, Spelling) CARBON_TOKEN(Name) +#endif + +// Note that symbols need to be ordered from longest to shortest to effectively +// provide max-munch lexing. + +// clang-format off + +CARBON_SYMBOL_TOKEN(GreaterGreaterEqual, ">>=") +CARBON_SYMBOL_TOKEN(LessEqualGreater, "<=>") +CARBON_SYMBOL_TOKEN(LessLessEqual, "<<=") + +CARBON_SYMBOL_TOKEN(AmpEqual, "&=") +CARBON_SYMBOL_TOKEN(CaretEqual, "^=") +CARBON_SYMBOL_TOKEN(ColonEqual, ":=") +CARBON_SYMBOL_TOKEN(EqualEqual, "==") +CARBON_SYMBOL_TOKEN(EqualGreater, "=>") +CARBON_SYMBOL_TOKEN(ExclaimEqual, "!=") +CARBON_SYMBOL_TOKEN(GreaterEqual, ">=") +CARBON_SYMBOL_TOKEN(GreaterGreater, ">>") +CARBON_SYMBOL_TOKEN(LessEqual, "<=") +CARBON_SYMBOL_TOKEN(LessGreater, "<>") +CARBON_SYMBOL_TOKEN(LessLess, "<<") +CARBON_SYMBOL_TOKEN(LessMinus, "<-") +CARBON_SYMBOL_TOKEN(MinusEqual, "-=") +CARBON_SYMBOL_TOKEN(MinusGreater, "->") +CARBON_SYMBOL_TOKEN(MinusMinus, "--") +CARBON_SYMBOL_TOKEN(PercentEqual, "%=") +CARBON_SYMBOL_TOKEN(PipeEqual, "|=") +CARBON_SYMBOL_TOKEN(PlusEqual, "+=") +CARBON_SYMBOL_TOKEN(PlusPlus, "++") +CARBON_SYMBOL_TOKEN(SlashEqual, "/=") +CARBON_SYMBOL_TOKEN(StarEqual, "*=") +CARBON_SYMBOL_TOKEN(TildeEqual, "~=") + +CARBON_SYMBOL_TOKEN(Amp, "&") +CARBON_SYMBOL_TOKEN(At, "@") +CARBON_SYMBOL_TOKEN(Backslash, "\\") +CARBON_SYMBOL_TOKEN(Caret, "^") +CARBON_SYMBOL_TOKEN(Colon, ":") +CARBON_SYMBOL_TOKEN(Comma, ",") +CARBON_SYMBOL_TOKEN(Equal, "=") +CARBON_SYMBOL_TOKEN(Exclaim, "!") +CARBON_SYMBOL_TOKEN(Greater, ">") +CARBON_SYMBOL_TOKEN(Hash, "#") +CARBON_SYMBOL_TOKEN(Less, "<") +CARBON_SYMBOL_TOKEN(Minus, "-") +CARBON_SYMBOL_TOKEN(Percent, "%") +CARBON_SYMBOL_TOKEN(Period, ".") +CARBON_SYMBOL_TOKEN(Pipe, "|") +CARBON_SYMBOL_TOKEN(Plus, "+") +CARBON_SYMBOL_TOKEN(Question, "?") +CARBON_SYMBOL_TOKEN(Semi, ";") +CARBON_SYMBOL_TOKEN(Slash, "/") +CARBON_SYMBOL_TOKEN(Star, "*") +CARBON_SYMBOL_TOKEN(Tilde, "~") + +// clang-format on + +#ifndef CARBON_OPENING_GROUP_SYMBOL_TOKEN +#define CARBON_OPENING_GROUP_SYMBOL_TOKEN(Name, Spelling, ClosingName) \ + CARBON_SYMBOL_TOKEN(Name, Spelling) +#endif +// clang-format on +CARBON_OPENING_GROUP_SYMBOL_TOKEN(OpenParen, "(", CloseParen) +CARBON_OPENING_GROUP_SYMBOL_TOKEN(OpenCurlyBrace, "{", CloseCurlyBrace) +// clang-format off +#undef CARBON_OPENING_GROUP_SYMBOL_TOKEN + +#ifndef CARBON_CLOSING_GROUP_SYMBOL_TOKEN +#define CARBON_CLOSING_GROUP_SYMBOL_TOKEN(Name, Spelling, OpeningName) \ + CARBON_SYMBOL_TOKEN(Name, Spelling) +#endif +// clang-format on +CARBON_CLOSING_GROUP_SYMBOL_TOKEN(CloseParen, ")", OpenParen) +CARBON_CLOSING_GROUP_SYMBOL_TOKEN(CloseCurlyBrace, "}", OpenCurlyBrace) +// clang-format off +#undef CARBON_CLOSING_GROUP_SYMBOL_TOKEN + +#undef CARBON_SYMBOL_TOKEN + +#ifndef CARBON_KEYWORD_TOKEN +#define CARBON_KEYWORD_TOKEN(Name, Spelling) CARBON_TOKEN(Name) +#endif +// clang-format off +CARBON_KEYWORD_TOKEN(AndKeyword, "and") +CARBON_KEYWORD_TOKEN(AsmKeyword, "asm") +CARBON_KEYWORD_TOKEN(BreakKeyword, "break") +CARBON_KEYWORD_TOKEN(CatchKeyword, "catch") +CARBON_KEYWORD_TOKEN(ClassKeyword, "class") +CARBON_KEYWORD_TOKEN(ContinueKeyword, "continue") +CARBON_KEYWORD_TOKEN(ElseKeyword, "else") +CARBON_KEYWORD_TOKEN(EnumKeyword, "enum") +CARBON_KEYWORD_TOKEN(ExternKeyword, "extern") +CARBON_KEYWORD_TOKEN(FinalKeyword, "final") +CARBON_KEYWORD_TOKEN(FixKeyword, "fix") +CARBON_KEYWORD_TOKEN(FnKeyword, "fn") +CARBON_KEYWORD_TOKEN(ForKeyword, "for") +CARBON_KEYWORD_TOKEN(GuardKeyword, "guard") +CARBON_KEYWORD_TOKEN(IfKeyword, "if") +CARBON_KEYWORD_TOKEN(InlineKeyword, "inline") +CARBON_KEYWORD_TOKEN(InoutKeyword, "inout") +CARBON_KEYWORD_TOKEN(InterfaceKeyword, "interface") +CARBON_KEYWORD_TOKEN(InternalKeyword, "internal") +CARBON_KEYWORD_TOKEN(LetKeyword, "let") +CARBON_KEYWORD_TOKEN(LoopKeyword, "loop") +CARBON_KEYWORD_TOKEN(MatchKeyword, "match") +CARBON_KEYWORD_TOKEN(NotKeyword, "not") +CARBON_KEYWORD_TOKEN(OrKeyword, "or") +CARBON_KEYWORD_TOKEN(OutKeyword, "out") +CARBON_KEYWORD_TOKEN(PrivateKeyword, "private") +CARBON_KEYWORD_TOKEN(ProtectedKeyword, "protected") +CARBON_KEYWORD_TOKEN(PublicKeyword, "public") +CARBON_KEYWORD_TOKEN(RefKeyword, "ref") +CARBON_KEYWORD_TOKEN(ReturnKeyword, "return") +CARBON_KEYWORD_TOKEN(StaticKeyword, "static") +CARBON_KEYWORD_TOKEN(StructKeyword, "struct") +CARBON_KEYWORD_TOKEN(ThroKeyword, "throw") +CARBON_KEYWORD_TOKEN(TryKeyword, "try") +CARBON_KEYWORD_TOKEN(UnderscoreKeyword, "_") +CARBON_KEYWORD_TOKEN(VarKeyword, "var") +CARBON_KEYWORD_TOKEN(VirtualKeyword, "virtual") +CARBON_KEYWORD_TOKEN(WhileKeyword, "while") +CARBON_KEYWORD_TOKEN(XorKeyword, "xor") +// clang-format on +#undef CARBON_KEYWORD_TOKEN + +CARBON_TOKEN(Identifier) +CARBON_TOKEN(IntegerLiteral) +CARBON_TOKEN(DocComment) +CARBON_TOKEN(Error) + +#undef CARBON_TOKEN diff --git a/lexer/tokenized_buffer.cpp b/lexer/tokenized_buffer.cpp new file mode 100644 index 000000000000..c4f9915a81bf --- /dev/null +++ b/lexer/tokenized_buffer.cpp @@ -0,0 +1,570 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include "lexer/tokenized_buffer.h" + +#include +#include +#include + +#include "llvm/ADT/StringExtras.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/ADT/StringSwitch.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/Format.h" +#include "llvm/Support/FormatVariadic.h" +#include "llvm/Support/raw_ostream.h" + +namespace Carbon { + +static auto TakeLeadingIntegerLiteral(llvm::StringRef source_text) + -> llvm::StringRef { + return source_text.take_while([](char c) { return llvm::isDigit(c); }); +} + +struct UnmatchedClosing { + static constexpr llvm::StringLiteral ShortName = "syntax-balanced-delimiters"; + static constexpr llvm::StringLiteral Message = + "Closing symbol without a corresponding opening symbol."; + + struct Substitutions {}; + static auto Format(const Substitutions&) -> std::string { + return Message.str(); + } +}; + +struct MismatchedClosing { + static constexpr llvm::StringLiteral ShortName = "syntax-balanced-delimiters"; + static constexpr llvm::StringLiteral Message = + "Closing symbol does not match most recent opening symbol."; + + struct Substitutions {}; + static auto Format(const Substitutions&) -> std::string { + return Message.str(); + } +}; + +struct UnrecognizedCharacters { + static constexpr llvm::StringLiteral ShortName = + "syntax-unrecognized-characters"; + static constexpr llvm::StringLiteral Message = + "Encountered unrecognized characters while parsing."; + + struct Substitutions {}; + static auto Format(const Substitutions&) -> std::string { + return Message.str(); + } +}; + +// Implementation of the lexer logic itself. +// +// The design is that lexing can loop over the source buffer, consuming it into +// tokens by calling into this API. This class handles the state and breaks down +// the different lexing steps that may be used. It directly updates the provided +// tokenized buffer with the lexed tokens. +class TokenizedBuffer::Lexer { + TokenizedBuffer& buffer; + DiagnosticEmitter& emitter; + + Line current_line; + LineInfo* current_line_info; + + int current_column = 0; + bool set_indent = false; + + llvm::SmallVector open_groups; + + public: + Lexer(TokenizedBuffer& buffer, DiagnosticEmitter& emitter) + : buffer(buffer), + emitter(emitter), + current_line(buffer.AddLine({0, 0, 0})), + current_line_info(&buffer.GetLineInfo(current_line)) {} + + auto SkipWhitespace(llvm::StringRef& source_text) -> bool { + while (!source_text.empty()) { + // We only support line-oriented commenting and lex comments as-if they + // were whitespace. Any comment must be the only non-whitespace on the + // line. + if (source_text.startswith("//") && !set_indent) { + // Check if the comment has a special starting sequence of three slashes + // followed by a space. This represents a documentation comment that is + // preserved as a token in the buffer. When parsing, these comments will + // only be accepted in specific parts of the grammar and will be + // associated with the parsed constructs as structure documentation. All + // other comments are simply treated as whitespace. + if (source_text.startswith("///")) { + current_line_info->indent = current_column; + set_indent = true; + buffer.AddToken({.kind = TokenKind::DocComment(), + .token_line = current_line, + .column = current_column}); + } + while (!source_text.empty() && source_text.front() != '\n') { + ++current_column; + source_text = source_text.drop_front(); + } + if (source_text.empty()) + break; + } + + switch (source_text.front()) { + default: + // If we find a non-whitespace character without exhausting the + // buffer, return true to continue lexing. + return true; + + case '\n': + // New lines are special in order to track line structure. + current_line_info->length = current_column; + // If this is the last character in the source, directly return here + // to avoid creating an empty line. + source_text = source_text.drop_front(); + if (source_text.empty()) + return false; + + // Otherwise, add a line and set up to continue lexing. + current_line = buffer.AddLine( + {current_line_info->start + current_column + 1, 0, 0}); + current_line_info = &buffer.GetLineInfo(current_line); + current_column = 0; + set_indent = false; + continue; + + case ' ': + case '\t': + // Skip other forms of whitespace while tracking column. + // FIXME: This obviously needs looooots more work to handle unicode + // whitespace as well as special handling to allow better tokenization + // of operators. This is just a stub to check that our column + // management works. + ++current_column; + source_text = source_text.drop_front(); + continue; + } + } + + assert(source_text.empty() && "Cannot reach here w/o finishing the text!"); + // Update the line length as this is also the end of a line. + current_line_info->length = current_column; + return false; + } + + auto LexIntegerLiteral(llvm::StringRef& source_text) -> bool { + llvm::StringRef int_text = TakeLeadingIntegerLiteral(source_text); + if (int_text.empty()) + return false; + llvm::APInt int_value; + if (int_text.getAsInteger(/*Radix=*/0, int_value)) + return false; + + int int_column = current_column; + current_column += int_text.size(); + source_text = source_text.drop_front(int_text.size()); + + if (!set_indent) { + current_line_info->indent = int_column; + set_indent = true; + } + auto token = buffer.AddToken({.kind = TokenKind::IntegerLiteral(), + .token_line = current_line, + .column = int_column}); + buffer.GetTokenInfo(token).literal_index = buffer.int_literals.size(); + buffer.int_literals.push_back(std::move(int_value)); + return true; + } + + auto LexSymbolToken(llvm::StringRef& source_text) -> bool { + TokenKind kind = llvm::StringSwitch(source_text) +#define CARBON_SYMBOL_TOKEN(Name, Spelling) \ + .StartsWith(Spelling, TokenKind::Name()) +#include "lexer/token_registry.def" + .Default(TokenKind::Error()); + if (kind == TokenKind::Error()) + return false; + + if (!set_indent) { + current_line_info->indent = current_column; + set_indent = true; + } + + CloseInvalidOpenGroups(kind); + + Token token = buffer.AddToken( + {.kind = kind, .token_line = current_line, .column = current_column}); + current_column += kind.GetFixedSpelling().size(); + source_text = source_text.drop_front(kind.GetFixedSpelling().size()); + + // Opening symbols just need to be pushed onto our queue of opening groups. + if (kind.IsOpeningSymbol()) { + open_groups.push_back(token); + return true; + } + + // Only closing symbols need further special handling. + if (!kind.IsClosingSymbol()) + return true; + + TokenInfo& closing_token_info = buffer.GetTokenInfo(token); + + // Check that there is a matching opening symbol before we consume this as + // a closing symbol. + if (open_groups.empty()) { + closing_token_info.kind = TokenKind::Error(); + closing_token_info.error_length = kind.GetFixedSpelling().size(); + buffer.has_errors = true; + + emitter.EmitError( + [](UnmatchedClosing::Substitutions&) {}); + // Note that this still returns true as we do consume a symbol. + return true; + } + + // Finally can handle a normal closing symbol. + Token opening_token = open_groups.pop_back_val(); + TokenInfo& opening_token_info = buffer.GetTokenInfo(opening_token); + opening_token_info.closing_token = token; + closing_token_info.opening_token = opening_token; + return true; + } + + // Closes all open groups that cannot remain open across the symbol `K`. + // Users may pass `Error` to close all open groups. + auto CloseInvalidOpenGroups(TokenKind kind) -> void { + if (!kind.IsClosingSymbol() && kind != TokenKind::Error()) + return; + + while (!open_groups.empty()) { + Token opening_token = open_groups.back(); + TokenKind opening_kind = buffer.GetTokenInfo(opening_token).kind; + if (kind == opening_kind.GetClosingSymbol()) + return; + + open_groups.pop_back(); + buffer.has_errors = true; + emitter.EmitError( + [](MismatchedClosing::Substitutions&) {}); + + // TODO: do a smarter backwards scan for where to put the closing + // token. + Token closing_token = + buffer.AddToken({.kind = opening_kind.GetClosingSymbol(), + .is_recovery = true, + .token_line = current_line, + .column = current_column}); + TokenInfo& opening_token_info = buffer.GetTokenInfo(opening_token); + TokenInfo& closing_token_info = buffer.GetTokenInfo(closing_token); + opening_token_info.closing_token = closing_token; + closing_token_info.opening_token = opening_token; + } + } + + auto GetOrCreateIdentifier(llvm::StringRef text) -> Identifier { + auto insert_result = buffer.identifier_map.insert( + {text, Identifier(buffer.identifier_infos.size())}); + if (insert_result.second) + buffer.identifier_infos.push_back({text}); + return insert_result.first->second; + } + + auto LexKeywordOrIdentifier(llvm::StringRef& source_text) -> bool { + if (!llvm::isAlpha(source_text.front()) && source_text.front() != '_') + return false; + + if (!set_indent) { + current_line_info->indent = current_column; + set_indent = true; + } + + // Take the valid characters off the front of the source buffer. + llvm::StringRef identifier_text = source_text.take_while( + [](char c) { return llvm::isAlnum(c) || c == '_'; }); + assert(!identifier_text.empty() && "Must have at least one character!"); + int identifier_column = current_column; + current_column += identifier_text.size(); + source_text = source_text.drop_front(identifier_text.size()); + + // Check if the text matches a keyword token, and if so use that. + TokenKind kind = llvm::StringSwitch(identifier_text) +#define CARBON_KEYWORD_TOKEN(Name, Spelling) .Case(Spelling, TokenKind::Name()) +#include "lexer/token_registry.def" + .Default(TokenKind::Error()); + if (kind != TokenKind::Error()) { + buffer.AddToken({.kind = kind, + .token_line = current_line, + .column = identifier_column}); + return true; + } + + // Otherwise we have a generic identifier. + buffer.AddToken({.kind = TokenKind::Identifier(), + .token_line = current_line, + .column = identifier_column, + .id = GetOrCreateIdentifier(identifier_text)}); + return true; + } + + auto LexError(llvm::StringRef& source_text) -> void { + llvm::StringRef error_text = source_text.take_while([](char c) { + if (llvm::isAlnum(c)) + return false; + switch (c) { + case '_': + return false; + case '\t': + return false; + case '\n': + return false; + } + return llvm::StringSwitch(llvm::StringRef(&c, 1)) +#define CARBON_SYMBOL_TOKEN(Name, Spelling) .StartsWith(Spelling, false) +#include "lexer/token_registry.def" + .Default(true); + }); + if (error_text.empty()) { + // TODO: Reimplement this to use the lexer properly. In the meantime, + // guarantee that we eat at least one byte. + error_text = source_text.take_front(1); + } + + // Longer errors get to be two tokens. + error_text = error_text.substr(0, std::numeric_limits::max()); + auto token = buffer.AddToken( + {.kind = TokenKind::Error(), + .token_line = current_line, + .column = current_column, + .error_length = static_cast(error_text.size())}); + // TODO: #19 - Need to convert to the diagnostics library. + llvm::errs() << "ERROR: Line " << buffer.GetLineNumber(token) << ", Column " + << buffer.GetColumnNumber(token) + << ": Unrecognized characters!\n"; + + current_column += error_text.size(); + source_text = source_text.drop_front(error_text.size()); + buffer.has_errors = true; + } +}; + +auto TokenizedBuffer::Lex(SourceBuffer& source, DiagnosticEmitter& emitter) + -> TokenizedBuffer { + TokenizedBuffer buffer(source); + Lexer lexer(buffer, emitter); + + llvm::StringRef source_text = source.Text(); + while (lexer.SkipWhitespace(source_text)) { + // Each time we find non-whitespace characters, try each kind of token we + // support lexing, from simplest to most complex. + if (lexer.LexSymbolToken(source_text)) + continue; + if (lexer.LexKeywordOrIdentifier(source_text)) + continue; + if (lexer.LexIntegerLiteral(source_text)) + continue; + lexer.LexError(source_text); + } + + lexer.CloseInvalidOpenGroups(TokenKind::Error()); + return buffer; +} + +auto TokenizedBuffer::GetKind(Token token) const -> TokenKind { + return GetTokenInfo(token).kind; +} + +auto TokenizedBuffer::GetLine(Token token) const -> Line { + return GetTokenInfo(token).token_line; +} + +auto TokenizedBuffer::GetLineNumber(Token token) const -> int { + return GetLineNumber(GetLine(token)); +} + +auto TokenizedBuffer::GetColumnNumber(Token token) const -> int { + return GetTokenInfo(token).column + 1; +} + +auto TokenizedBuffer::GetTokenText(Token token) const -> llvm::StringRef { + auto& token_info = GetTokenInfo(token); + llvm::StringRef fixed_spelling = token_info.kind.GetFixedSpelling(); + if (!fixed_spelling.empty()) + return fixed_spelling; + + if (token_info.kind == TokenKind::Error()) { + auto& line_info = GetLineInfo(token_info.token_line); + int64_t token_start = line_info.start + token_info.column; + return source->Text().substr(token_start, token_info.error_length); + } + + // Documentation comment tokens refer back to the source text. + if (token_info.kind == TokenKind::DocComment()) { + auto& line_info = GetLineInfo(token_info.token_line); + int64_t token_start = line_info.start + token_info.column; + int64_t token_stop = line_info.start + line_info.length; + return source->Text().slice(token_start, token_stop); + } + + // Refer back to the source text to preserve oddities like radix or leading + // 0's the author had. + if (token_info.kind == TokenKind::IntegerLiteral()) { + auto& line_info = GetLineInfo(token_info.token_line); + int64_t token_start = line_info.start + token_info.column; + return TakeLeadingIntegerLiteral(source->Text().substr(token_start)); + } + + assert(token_info.kind == TokenKind::Identifier() && + "Only identifiers have stored text!"); + return GetIdentifierText(token_info.id); +} + +auto TokenizedBuffer::GetIdentifier(Token token) const -> Identifier { + auto& token_info = GetTokenInfo(token); + assert(token_info.kind == TokenKind::Identifier() && + "The token must be an identifier!"); + return token_info.id; +} + +auto TokenizedBuffer::GetIntegerLiteral(Token token) const -> llvm::APInt { + auto& token_info = GetTokenInfo(token); + assert(token_info.kind == TokenKind::IntegerLiteral() && + "The token must be an integer literal!"); + return int_literals[token_info.literal_index]; +} + +auto TokenizedBuffer::GetMatchedClosingToken(Token opening_token) const + -> Token { + auto& opening_token_info = GetTokenInfo(opening_token); + assert(opening_token_info.kind.IsOpeningSymbol() && + "The token must be an opening group symbol!"); + return opening_token_info.closing_token; +} + +auto TokenizedBuffer::GetMatchedOpeningToken(Token closing_token) const + -> Token { + auto& closing_token_info = GetTokenInfo(closing_token); + assert(closing_token_info.kind.IsClosingSymbol() && + "The token must be an closing group symbol!"); + return closing_token_info.opening_token; +} + +auto TokenizedBuffer::IsRecoveryToken(Token token) const -> bool { + return GetTokenInfo(token).is_recovery; +} + +auto TokenizedBuffer::GetLineNumber(Line line) const -> int { + return line.index + 1; +} + +auto TokenizedBuffer::GetIndentColumnNumber(Line line) const -> int { + return GetLineInfo(line).indent + 1; +} + +auto TokenizedBuffer::GetIdentifierText(Identifier identifier) const + -> llvm::StringRef { + return identifier_infos[identifier.index].text; +} + +auto TokenizedBuffer::PrintWidths::Widen(const PrintWidths& widths) -> void { + index = std::max(widths.index, index); + kind = std::max(widths.kind, kind); + column = std::max(widths.column, column); + line = std::max(widths.line, line); + indent = std::max(widths.indent, indent); +} + +auto TokenizedBuffer::GetTokenPrintWidths(Token token) const -> PrintWidths { + PrintWidths widths = {}; + // Compute the printed width of the various token information. When numbers + // here are printed in decimal, the number of digits needed is is one more than + // the log-base-10 of the value. + widths.index = std::log10(token_infos.size()) + 1; + widths.kind = GetKind(token).Name().size(); + widths.line = std::log10(GetLineNumber(token)) + 1; + widths.column = std::log10(GetColumnNumber(token)) + 1; + widths.indent = std::log10(GetIndentColumnNumber(GetLine(token))) + 1; + return widths; +} + +auto TokenizedBuffer::Print(llvm::raw_ostream& output_stream) const -> void { + if (Tokens().begin() == Tokens().end()) + return; + + PrintWidths widths = {}; + widths.index = std::log10(token_infos.size()) + 1; + for (Token token : Tokens()) + widths.Widen(GetTokenPrintWidths(token)); + + for (Token token : Tokens()) { + PrintToken(output_stream, token, widths); + output_stream << "\n"; + } +} + +auto TokenizedBuffer::PrintToken(llvm::raw_ostream& output_stream, + Token token) const -> void { + PrintToken(output_stream, token, {}); +} + +auto TokenizedBuffer::PrintToken(llvm::raw_ostream& output_stream, Token token, + PrintWidths widths) const -> void { + widths.Widen(GetTokenPrintWidths(token)); + int token_index = token.index; + auto& token_info = GetTokenInfo(token); + llvm::StringRef token_text = GetTokenText(token); + + // Output the main chunk using one format string. We have to do the + // justification manually in order to use the dynamically computed widths + // and get the quotes included. + output_stream << llvm::formatv( + "token: { index: {0}, kind: {1}, line: {2}, column: {3}, indent: {4}, " + "spelling: '{5}'", + llvm::format_decimal(token_index, widths.index), + llvm::right_justify( + (llvm::Twine("'") + token_info.kind.Name() + "'").str(), + widths.kind + 2), + llvm::format_decimal(GetLineNumber(token_info.token_line), widths.line), + llvm::format_decimal(GetColumnNumber(token), widths.column), + llvm::format_decimal(GetIndentColumnNumber(token_info.token_line), + widths.indent), + token_text); + + if (token_info.kind == TokenKind::Identifier()) + output_stream << ", identifier: " << GetIdentifier(token).index; + else if (token_info.kind.IsOpeningSymbol()) + output_stream << ", closing_token: " << GetMatchedClosingToken(token).index; + else if (token_info.kind.IsClosingSymbol()) + output_stream << ", opening_token: " << GetMatchedOpeningToken(token).index; + + if (token_info.is_recovery) + output_stream << ", recovery: true"; + + output_stream << " }"; +} + +auto TokenizedBuffer::GetLineInfo(Line line) -> LineInfo& { + return line_infos[line.index]; +} + +auto TokenizedBuffer::GetLineInfo(Line line) const -> const LineInfo& { + return line_infos[line.index]; +} + +auto TokenizedBuffer::AddLine(LineInfo info) -> Line { + line_infos.push_back(info); + return Line(line_infos.size() - 1); +} + +auto TokenizedBuffer::GetTokenInfo(Token token) -> TokenInfo& { + return token_infos[token.index]; +} + +auto TokenizedBuffer::GetTokenInfo(Token token) const -> const TokenInfo& { + return token_infos[token.index]; +} + +auto TokenizedBuffer::AddToken(TokenInfo info) -> Token { + token_infos.push_back(info); + return Token(token_infos.size() - 1); +} + +} // namespace Carbon diff --git a/lexer/tokenized_buffer.h b/lexer/tokenized_buffer.h new file mode 100644 index 000000000000..3a7e9e0f9690 --- /dev/null +++ b/lexer/tokenized_buffer.h @@ -0,0 +1,343 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#ifndef LEXER_TOKENIZED_BUFFER_H_ +#define LEXER_TOKENIZED_BUFFER_H_ + +#include + +#include + +#include "diagnostics/diagnostic_emitter.h" +#include "lexer/token_kind.h" +#include "llvm/ADT/APInt.h" +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/Optional.h" +#include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/ADT/iterator.h" +#include "llvm/ADT/iterator_range.h" +#include "source/source_buffer.h" + +namespace Carbon { + +// A buffer of tokenized Carbon source code. +// +// This is constructed by lexing the source code text into a series of tokens. +// The buffer provides lightweight handles to tokens and other lexed entities, +// as well as iterations to walk the sequence of tokens found in the buffer. +// +// Lexing errors result in a potentially incomplete sequence of tokens and +// `HasError` returning true. +class TokenizedBuffer { + public: + // A lightweight handle to a lexed token in a `TokenizedBuffer`. + // + // `Token` objects are designed to be passed by value, not reference or + // pointer. They are also designed to be small and efficient to store in data + // structures. + // + // `Token` objects from the same `TokenizedBuffer` can be compared with each + // other, both for being the same token within the buffer, and to establish + // relative position within the token stream that has been lexed out of the + // buffer. + // + // All other APIs to query a `Token` are on the `TokenizedBuffer`. + class Token { + public: + Token() = default; + + bool operator==(const Token& rhs) const { return index == rhs.index; } + bool operator!=(const Token& rhs) const { return index != rhs.index; } + bool operator<(const Token& rhs) const { return index < rhs.index; } + bool operator<=(const Token& rhs) const { return index <= rhs.index; } + bool operator>(const Token& rhs) const { return index > rhs.index; } + bool operator>=(const Token& rhs) const { return index >= rhs.index; } + + private: + friend class TokenizedBuffer; + + explicit Token(int index) : index(index) {} + + int32_t index; + }; + + // A lightweight handle to a lexed line in a `TokenizedBuffer`. + // + // `Line` objects are designed to be passed by value, not reference or + // pointer. They are also designed to be small and efficient to store in data + // structures. + // + // Each `Line` object refers to a specific line in the source code that was + // lexed. They can be compared directly to establish that they refer to the + // same line or the relative position of different lines within the source. + // + // All other APIs to query a `Line` are on the `TokenizedBuffer`. + class Line { + public: + Line() = default; + + bool operator==(const Line& rhs) const { return index == rhs.index; } + bool operator!=(const Line& rhs) const { return index != rhs.index; } + bool operator<(const Line& rhs) const { return index < rhs.index; } + bool operator<=(const Line& rhs) const { return index <= rhs.index; } + bool operator>(const Line& rhs) const { return index > rhs.index; } + bool operator>=(const Line& rhs) const { return index >= rhs.index; } + + private: + friend class TokenizedBuffer; + + explicit Line(int index) : index(index) {} + + int32_t index; + }; + + // A lightweight handle to a lexed identifier in a `TokenizedBuffer`. + // + // `Identifier` objects are designed to be passed by value, not reference or + // pointer. They are also designed to be small and efficient to store in data + // structures. + // + // Each identifier lexed is canonicalized to a single entry in the identifier + // table. `Identifier` objects will compare equal if they refer to the same + // identifier spelling. Where the identifier was written is not preserved. + // + // All other APIs to query a `Identifier` are on the `TokenizedBuffer`. + class Identifier { + public: + Identifier() = default; + + // Most normal APIs are provided by the `TokenizedBuffer`, we just support + // basic comparison operations. + bool operator==(const Identifier& rhs) const { return index == rhs.index; } + bool operator!=(const Identifier& rhs) const { return index != rhs.index; } + + private: + friend class TokenizedBuffer; + + explicit Identifier(int index) : index(index) {} + + int32_t index; + }; + + // Random-access iterator over tokens within the buffer. + class TokenIterator + : public llvm::iterator_facade_base< + TokenIterator, std::random_access_iterator_tag, Token, int> { + public: + TokenIterator() = default; + + explicit TokenIterator(Token token) : token(token) {} + + bool operator==(const TokenIterator& rhs) const { + return token == rhs.token; + } + bool operator<(const TokenIterator& rhs) const { return token < rhs.token; } + + const Token& operator*() const { return token; } + Token& operator*() { return token; } + + int operator-(const TokenIterator& rhs) const { + return token.index - rhs.token.index; + } + + TokenIterator& operator+=(int n) { + token.index += n; + return *this; + } + TokenIterator& operator-=(int n) { + token.index -= n; + return *this; + } + + private: + friend class TokenizedBuffer; + + Token token; + }; + + // Lexes a buffer of source code into a tokenized buffer. + // + // The provided source buffer must outlive any returned `TokenizedBuffer` + // which will refer into the source. + // + // FIXME: Need to pass in some diagnostic machinery to report the details of + // the error! Right now it prints to stderr. + static TokenizedBuffer Lex(SourceBuffer& source, DiagnosticEmitter& emitter); + + // Returns true if the buffer has errors that are detectable at lexing time. + auto HasErrors() const -> bool { return has_errors; } + + llvm::iterator_range Tokens() const { + return llvm::make_range(TokenIterator(Token(0)), + TokenIterator(Token(token_infos.size()))); + } + + auto Size() const -> int { return token_infos.size(); } + + auto GetKind(Token token) const -> TokenKind; + auto GetLine(Token token) const -> Line; + + // Returns the 1-based line number. + auto GetLineNumber(Token token) const -> int; + + // Returns the 1-based column number. + auto GetColumnNumber(Token token) const -> int; + + // Returns the source text lexed into this token. + auto GetTokenText(Token token) const -> llvm::StringRef; + + // Returns the identifier associated with this token. The token kind must be + // an `Identifier`. + auto GetIdentifier(Token token) const -> Identifier; + + // Returns the value of an `IntegerLiteral()` token. + auto GetIntegerLiteral(Token token) const -> llvm::APInt; + + // Returns the closing token matched with the given opening token. + // + // The given token must be an opening token kind. + auto GetMatchedClosingToken(Token opening_token) const -> Token; + + // Returns the opening token matched with the given closing token. + // + // The given token must be a closing token kind. + auto GetMatchedOpeningToken(Token closing_token) const -> Token; + + // Returns whether the token was created as part of an error recovery effort. + // + // For example, a closing paren inserted to match an unmatched paren. + auto IsRecoveryToken(Token token) const -> bool; + + // Returns the 1-based line number. + auto GetLineNumber(Line line) const -> int; + + // Returns the 1-based indentation column number. + auto GetIndentColumnNumber(Line line) const -> int; + + // Returns the text for an identifier. + auto GetIdentifierText(Identifier id) const -> llvm::StringRef; + + // Prints a description of the tokenized stream to the provided `raw_ostream`. + // + // It prints one line of information for each token in the buffer, including + // the kind of token, where it occurs within the source file, indentation for + // the associated line, the spelling of the token in source, and any + // additional information tracked such as which unique identifier it is or any + // matched grouping token. + // + // Each line is formatted as a YAML record: + // + // clang-format off + // ``` + // token: { index: 0, kind: 'Semi', line: 1, column: 1, indent: 1, spelling: ';' } + // ``` + // clang-format on + // + // This can be parsed as YAML using tools like `python-yq` combined with `jq` + // on the command line. The format is also reasonably amenable to other + // line-oriented shell tools from `grep` to `awk`. + auto Print(llvm::raw_ostream& output_stream) const -> void; + + // Prints a description of a single token. See `print` for details on the + // format. + auto PrintToken(llvm::raw_ostream& output_stream, Token token) const -> void; + + private: + // Implementation detail struct implementing the actual lexer logic. + class Lexer; + friend Lexer; + + // Specifies minimum widths to use when printing a token's fields via + // `printToken`. + struct PrintWidths { + int index; + int kind; + int column; + int line; + int indent; + + // Widens `this` to the maximum of `this` and `new_width` for each + // dimension. + void Widen(const PrintWidths& new_width); + }; + + struct TokenInfo { + TokenKind kind; + + // Whether the token was injected artificially during error recovery. + bool is_recovery = false; + + // Line on which the Token starts. + Line token_line; + + // Zero-based byte offset of the token within its line. + int32_t column; + + // We may have up to 32 bits of payload, based on the kind of token. + union { + static_assert( + sizeof(Token) <= sizeof(int32_t), + "Unable to pack token and identifier index into the same space!"); + + Identifier id; + int32_t literal_index; + Token closing_token; + Token opening_token; + int32_t error_length; + }; + }; + + struct LineInfo { + // Zero-based byte offset of the start of the line within the source buffer + // provided. + int64_t start; + + // The byte length of the line. Does not include the newline character (or a + // null terminator or EOF). + int32_t length; + + // The byte offset from the start of the line of the first non-whitespace + // character. + int32_t indent; + }; + + struct IdentifierInfo { + llvm::StringRef text; + }; + + // The constructor is merely responsible for trivial initialization of + // members. A working object of this type is built with the `lex` function + // above so that its return can indicate if an error was encountered while + // lexing. + explicit TokenizedBuffer(SourceBuffer& source) : source(&source) {} + + auto GetLineInfo(Line line) -> LineInfo&; + auto GetLineInfo(Line line) const -> const LineInfo&; + auto AddLine(LineInfo info) -> Line; + auto GetTokenInfo(Token token) -> TokenInfo&; + auto GetTokenInfo(Token token) const -> const TokenInfo&; + auto AddToken(TokenInfo info) -> Token; + auto GetTokenPrintWidths(Token token) const -> PrintWidths; + auto PrintToken(llvm::raw_ostream& output_stream, Token token, + PrintWidths widths) const -> void; + + SourceBuffer* source; + + llvm::SmallVector token_infos; + + llvm::SmallVector line_infos; + + llvm::SmallVector identifier_infos; + + llvm::SmallVector int_literals; + + llvm::DenseMap identifier_map; + + bool has_errors = false; +}; + +} // namespace Carbon + +#endif // LEXER_TOKENIZED_BUFFER_H_ diff --git a/lexer/tokenized_buffer_fuzzer.cpp b/lexer/tokenized_buffer_fuzzer.cpp new file mode 100644 index 000000000000..9953b278af62 --- /dev/null +++ b/lexer/tokenized_buffer_fuzzer.cpp @@ -0,0 +1,60 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include + +#include "diagnostics/diagnostic_emitter.h" +#include "lexer/tokenized_buffer.h" +#include "llvm/ADT/StringRef.h" + +namespace Carbon { + +extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size) { + // We need two bytes of data to compute a file name length. + if (size < 2) + return 0; + unsigned short raw_filename_length; + std::memcpy(&raw_filename_length, data, 2); + data += 2; + size -= 2; + size_t filename_length = raw_filename_length; + + // We need enough data to populate this filename length. + if (size < filename_length) + return 0; + llvm::StringRef filename(reinterpret_cast(data), + filename_length); + data += filename_length; + size -= filename_length; + + // The rest of the data is the source text. + auto source = SourceBuffer::CreateFromText( + llvm::StringRef(reinterpret_cast(data), size), filename); + + // Use a real diagnostic emitter to get lazy codepaths to execute. + DiagnosticEmitter emitter = NullDiagnosticEmitter(); + + auto buffer = TokenizedBuffer::Lex(source, emitter); + if (buffer.HasErrors()) + return 0; + + // Walk the lexed and tokenized buffer to ensure it isn't corrupt in some way. + // + // TODO: We should enhance this to do more sanity checks on the resulting + // token stream. + for (TokenizedBuffer::Token token : buffer.Tokens()) { + int line_number = buffer.GetLineNumber(token); + (void)line_number; + assert(line_number > 0 && "Invalid line number!"); + assert(line_number < INT_MAX && "Invalid line number!"); + int column_number = buffer.GetColumnNumber(token); + (void)column_number; + assert(column_number > 0 && "Invalid line number!"); + assert(column_number < INT_MAX && "Invalid line number!"); + } + + return 0; +} + +} // namespace Carbon diff --git a/lexer/tokenized_buffer_test.cpp b/lexer/tokenized_buffer_test.cpp new file mode 100644 index 000000000000..4ff520a1162c --- /dev/null +++ b/lexer/tokenized_buffer_test.cpp @@ -0,0 +1,681 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include "lexer/tokenized_buffer.h" + +#include + +#include "diagnostics/diagnostic_emitter.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" +#include "lexer/tokenized_buffer_test_helpers.h" +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/None.h" +#include "llvm/ADT/Sequence.h" +#include "llvm/ADT/SmallString.h" +#include "llvm/ADT/Twine.h" +#include "llvm/Support/SourceMgr.h" +#include "llvm/Support/YAMLParser.h" +#include "llvm/Support/raw_ostream.h" + +namespace Carbon { +namespace { + +using ::Carbon::Testing::ExpectedToken; +using ::Carbon::Testing::HasTokens; +using ::Carbon::Testing::IsKeyValueScalars; +using ::testing::Eq; +using ::testing::NotNull; +using ::testing::StrEq; + +struct LexerTest : ::testing::Test { + llvm::SmallVector source_storage; + + auto GetSourceBuffer(llvm::Twine text) -> SourceBuffer& { + source_storage.push_back(SourceBuffer::CreateFromText(text.str())); + return source_storage.back(); + } + + auto Lex(llvm::Twine text) -> TokenizedBuffer { + // TODO: build a full mock for this. + return TokenizedBuffer::Lex(GetSourceBuffer(text), NullDiagnosticEmitter()); + } +}; + +TEST_F(LexerTest, HandlesEmptyBuffer) { + auto buffer = Lex(""); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_EQ(buffer.Tokens().begin(), buffer.Tokens().end()); +} + +TEST_F(LexerTest, TracksLinesAndColumns) { + auto buffer = Lex("\n ;;\n ;;;\n"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::Semi(), + .line = 2, + .column = 3, + .indent_column = 3}, + {.kind = TokenKind::Semi(), + .line = 2, + .column = 4, + .indent_column = 3}, + {.kind = TokenKind::Semi(), + .line = 3, + .column = 4, + .indent_column = 4}, + {.kind = TokenKind::Semi(), + .line = 3, + .column = 5, + .indent_column = 4}, + {.kind = TokenKind::Semi(), + .line = 3, + .column = 6, + .indent_column = 4}, + })); +} + +TEST_F(LexerTest, HandlesIntegerLiteral) { + auto buffer = Lex("12-578\n 1 2"); + EXPECT_FALSE(buffer.HasErrors()); + ASSERT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::IntegerLiteral(), + .line = 1, + .column = 1, + .indent_column = 1, + .text = "12"}, + {.kind = TokenKind::Minus(), + .line = 1, + .column = 3, + .indent_column = 1}, + {.kind = TokenKind::IntegerLiteral(), + .line = 1, + .column = 4, + .indent_column = 1, + .text = "578"}, + {.kind = TokenKind::IntegerLiteral(), + .line = 2, + .column = 3, + .indent_column = 3, + .text = "1"}, + {.kind = TokenKind::IntegerLiteral(), + .line = 2, + .column = 6, + .indent_column = 3, + .text = "2"}, + })); + auto token_12 = buffer.Tokens().begin(); + EXPECT_EQ(buffer.GetIntegerLiteral(*token_12), 12); + auto token_578 = buffer.Tokens().begin() + 2; + EXPECT_EQ(buffer.GetIntegerLiteral(*token_578), 578); + auto token_1 = buffer.Tokens().begin() + 3; + EXPECT_EQ(buffer.GetIntegerLiteral(*token_1), 1); + auto token_2 = buffer.Tokens().begin() + 4; + EXPECT_EQ(buffer.GetIntegerLiteral(*token_2), 2); +} + +TEST_F(LexerTest, HandlesGarbageCharacters) { + const char GarbageText[] = "$$💩-$\n$\0$12$"; + auto buffer = Lex(llvm::StringRef(GarbageText, sizeof(GarbageText) - 1)); + EXPECT_TRUE(buffer.HasErrors()); + EXPECT_THAT( + buffer, + HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::Error(), + .line = 1, + .column = 1, + .text = llvm::StringRef("$$💩", 6)}, + // 💩 takes 4 bytes, and we count column as bytes offset. + {.kind = TokenKind::Minus(), .line = 1, .column = 7}, + {.kind = TokenKind::Error(), .line = 1, .column = 8, .text = "$"}, + // newline + {.kind = TokenKind::Error(), + .line = 2, + .column = 1, + .text = llvm::StringRef("$\0$", 3)}, + {.kind = TokenKind::IntegerLiteral(), + .line = 2, + .column = 4, + .text = "12"}, + {.kind = TokenKind::Error(), .line = 2, .column = 6, .text = "$"}, + })); +} + +TEST_F(LexerTest, Symbols) { + // We don't need to exhaustively test symbols here as they're handled with + // common code, but we want to check specific patterns to verify things like + // max-munch rule and handling of interesting symbols. + auto buffer = Lex("<<<"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {TokenKind::LessLess()}, + {TokenKind::Less()}, + })); + + buffer = Lex("<<=>>"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {TokenKind::LessLessEqual()}, + {TokenKind::GreaterGreater()}, + })); + + buffer = Lex("< <=> >"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {TokenKind::Less()}, + {TokenKind::LessEqualGreater()}, + {TokenKind::Greater()}, + })); + + buffer = Lex("\\/?#@&^!"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {TokenKind::Backslash()}, + {TokenKind::Slash()}, + {TokenKind::Question()}, + {TokenKind::Hash()}, + {TokenKind::At()}, + {TokenKind::Amp()}, + {TokenKind::Caret()}, + {TokenKind::Exclaim()}, + })); +} + +TEST_F(LexerTest, Parens) { + auto buffer = Lex("()"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {TokenKind::OpenParen()}, + {TokenKind::CloseParen()}, + })); + + buffer = Lex("((()()))"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {TokenKind::OpenParen()}, + {TokenKind::OpenParen()}, + {TokenKind::OpenParen()}, + {TokenKind::CloseParen()}, + {TokenKind::OpenParen()}, + {TokenKind::CloseParen()}, + {TokenKind::CloseParen()}, + {TokenKind::CloseParen()}, + })); +} + +TEST_F(LexerTest, CurlyBraces) { + auto buffer = Lex("{}"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {TokenKind::OpenCurlyBrace()}, + {TokenKind::CloseCurlyBrace()}, + })); + + buffer = Lex("{{{}{}}}"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {TokenKind::OpenCurlyBrace()}, + {TokenKind::OpenCurlyBrace()}, + {TokenKind::OpenCurlyBrace()}, + {TokenKind::CloseCurlyBrace()}, + {TokenKind::OpenCurlyBrace()}, + {TokenKind::CloseCurlyBrace()}, + {TokenKind::CloseCurlyBrace()}, + {TokenKind::CloseCurlyBrace()}, + })); +} + +TEST_F(LexerTest, MatchingGroups) { + { + TokenizedBuffer buffer = Lex("(){}"); + ASSERT_FALSE(buffer.HasErrors()); + auto it = buffer.Tokens().begin(); + auto open_paren_token = *it++; + auto close_paren_token = *it++; + EXPECT_EQ(close_paren_token, + buffer.GetMatchedClosingToken(open_paren_token)); + EXPECT_EQ(open_paren_token, + buffer.GetMatchedOpeningToken(close_paren_token)); + auto open_curly_token = *it++; + auto close_curly_token = *it++; + EXPECT_EQ(close_curly_token, + buffer.GetMatchedClosingToken(open_curly_token)); + EXPECT_EQ(open_curly_token, + buffer.GetMatchedOpeningToken(close_curly_token)); + EXPECT_EQ(buffer.Tokens().end(), it); + } + + { + TokenizedBuffer buffer = Lex("({x}){(y)} {{((z))}}"); + ASSERT_FALSE(buffer.HasErrors()); + auto it = buffer.Tokens().begin(); + auto open_paren_token = *it++; + auto open_curly_token = *it++; + ASSERT_EQ("x", buffer.GetIdentifierText(buffer.GetIdentifier(*it++))); + auto close_curly_token = *it++; + auto close_paren_token = *it++; + EXPECT_EQ(close_paren_token, + buffer.GetMatchedClosingToken(open_paren_token)); + EXPECT_EQ(open_paren_token, + buffer.GetMatchedOpeningToken(close_paren_token)); + EXPECT_EQ(close_curly_token, + buffer.GetMatchedClosingToken(open_curly_token)); + EXPECT_EQ(open_curly_token, + buffer.GetMatchedOpeningToken(close_curly_token)); + + open_curly_token = *it++; + open_paren_token = *it++; + ASSERT_EQ("y", buffer.GetIdentifierText(buffer.GetIdentifier(*it++))); + close_paren_token = *it++; + close_curly_token = *it++; + EXPECT_EQ(close_curly_token, + buffer.GetMatchedClosingToken(open_curly_token)); + EXPECT_EQ(open_curly_token, + buffer.GetMatchedOpeningToken(close_curly_token)); + EXPECT_EQ(close_paren_token, + buffer.GetMatchedClosingToken(open_paren_token)); + EXPECT_EQ(open_paren_token, + buffer.GetMatchedOpeningToken(close_paren_token)); + + open_curly_token = *it++; + auto inner_open_curly_token = *it++; + open_paren_token = *it++; + auto inner_open_paren_token = *it++; + ASSERT_EQ("z", buffer.GetIdentifierText(buffer.GetIdentifier(*it++))); + auto inner_close_paren_token = *it++; + close_paren_token = *it++; + auto inner_close_curly_token = *it++; + close_curly_token = *it++; + EXPECT_EQ(close_curly_token, + buffer.GetMatchedClosingToken(open_curly_token)); + EXPECT_EQ(open_curly_token, + buffer.GetMatchedOpeningToken(close_curly_token)); + EXPECT_EQ(inner_close_curly_token, + buffer.GetMatchedClosingToken(inner_open_curly_token)); + EXPECT_EQ(inner_open_curly_token, + buffer.GetMatchedOpeningToken(inner_close_curly_token)); + EXPECT_EQ(close_paren_token, + buffer.GetMatchedClosingToken(open_paren_token)); + EXPECT_EQ(open_paren_token, + buffer.GetMatchedOpeningToken(close_paren_token)); + EXPECT_EQ(inner_close_paren_token, + buffer.GetMatchedClosingToken(inner_open_paren_token)); + EXPECT_EQ(inner_open_paren_token, + buffer.GetMatchedOpeningToken(inner_close_paren_token)); + + EXPECT_EQ(buffer.Tokens().end(), it); + } +} + +TEST_F(LexerTest, MismatchedGroups) { + auto buffer = Lex("{"); + EXPECT_TRUE(buffer.HasErrors()); + EXPECT_THAT(buffer, + HasTokens(llvm::ArrayRef{ + {TokenKind::OpenCurlyBrace()}, + {.kind = TokenKind::CloseCurlyBrace(), .recovery = true}, + })); + + buffer = Lex("}"); + EXPECT_TRUE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::Error(), .text = "}"}, + })); + + buffer = Lex("{(}"); + EXPECT_TRUE(buffer.HasErrors()); + EXPECT_THAT( + buffer, + HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::OpenCurlyBrace(), .column = 1}, + {.kind = TokenKind::OpenParen(), .column = 2}, + {.kind = TokenKind::CloseParen(), .column = 3, .recovery = true}, + {.kind = TokenKind::CloseCurlyBrace(), .column = 3}, + })); + + buffer = Lex(")({)"); + EXPECT_TRUE(buffer.HasErrors()); + EXPECT_THAT( + buffer, + HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::Error(), .column = 1, .text = ")"}, + {.kind = TokenKind::OpenParen(), .column = 2}, + {.kind = TokenKind::OpenCurlyBrace(), .column = 3}, + {.kind = TokenKind::CloseCurlyBrace(), .column = 4, .recovery = true}, + {.kind = TokenKind::CloseParen(), .column = 4}, + })); +} + +TEST_F(LexerTest, Keywords) { + auto buffer = Lex(" fn"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT( + buffer, + HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::FnKeyword(), .column = 4, .indent_column = 4}, + })); + + buffer = Lex("and or not if else for loop return var break continue _"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {TokenKind::AndKeyword()}, + {TokenKind::OrKeyword()}, + {TokenKind::NotKeyword()}, + {TokenKind::IfKeyword()}, + {TokenKind::ElseKeyword()}, + {TokenKind::ForKeyword()}, + {TokenKind::LoopKeyword()}, + {TokenKind::ReturnKeyword()}, + {TokenKind::VarKeyword()}, + {TokenKind::BreakKeyword()}, + {TokenKind::ContinueKeyword()}, + {TokenKind::UnderscoreKeyword()}, + })); +} + +TEST_F(LexerTest, Comments) { + auto buffer = Lex(" ;\n // foo\n ;"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::Semi(), + .line = 1, + .column = 2, + .indent_column = 2}, + {.kind = TokenKind::Semi(), + .line = 3, + .column = 3, + .indent_column = 3}, + })); + + buffer = Lex("// foo\n//\n// bar"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{})); + + // Make sure weird characters aren't a problem. + buffer = Lex(" //foo#$!^?@-_💩🍫⃠ [̲̅$̲̅(̲̅ ͡° ͜ʖ ͡°̲̅)̲̅$̲̅]"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{})); +} + +TEST_F(LexerTest, DocComments) { + auto buffer = Lex(" /// foo"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::DocComment(), + .line = 1, + .column = 3, + .indent_column = 3, + .text = "/// foo"}, + })); + + buffer = Lex("/// foo\n//\n/// bar"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::DocComment(), + .line = 1, + .column = 1, + .indent_column = 1, + .text = "/// foo"}, + {.kind = TokenKind::DocComment(), + .line = 3, + .column = 1, + .indent_column = 1, + .text = "/// bar"}, + })); + + buffer = Lex("/// foo\n///\n/// bar"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::DocComment(), + .line = 1, + .column = 1, + .indent_column = 1, + .text = "/// foo"}, + {.kind = TokenKind::DocComment(), + .line = 2, + .column = 1, + .indent_column = 1, + .text = "///"}, + {.kind = TokenKind::DocComment(), + .line = 3, + .column = 1, + .indent_column = 1, + .text = "/// bar"}, + })); + + // Make sure weird characters aren't a problem. + buffer = Lex(" ///foo#$!^?@-_💩🍫⃠ [̲̅$̲̅(̲̅ ͡° ͜ʖ ͡°̲̅)̲̅$̲̅]"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::DocComment(), + .line = 1, + .column = 3, + .indent_column = 3, + .text = "///foo#$!^?@-_💩🍫⃠ [̲̅$̲̅(̲̅ ͡° ͜ʖ ͡°̲̅)̲̅$̲̅]"}, + })); +} + +TEST_F(LexerTest, Identifiers) { + auto buffer = Lex(" foobar"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::Identifier(), + .column = 4, + .indent_column = 4, + .text = "foobar"}, + })); + + // Check different kinds of identifier character sequences. + buffer = Lex("_foo_bar"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::Identifier(), .text = "_foo_bar"}, + })); + + buffer = Lex("foo2bar00"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, + HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::Identifier(), .text = "foo2bar00"}, + })); + + // Check that we can parse identifiers that start with a keyword. + buffer = Lex("fnord"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::Identifier(), .text = "fnord"}, + })); + + // Check multiple identifiers with indent and interning. + buffer = Lex(" foo;bar\nbar \n foo\tfoo"); + EXPECT_FALSE(buffer.HasErrors()); + EXPECT_THAT(buffer, HasTokens(llvm::ArrayRef{ + {.kind = TokenKind::Identifier(), + .line = 1, + .column = 4, + .indent_column = 4, + .text = "foo"}, + {.kind = TokenKind::Semi()}, + {.kind = TokenKind::Identifier(), + .line = 1, + .column = 8, + .indent_column = 4, + .text = "bar"}, + {.kind = TokenKind::Identifier(), + .line = 2, + .column = 1, + .indent_column = 1, + .text = "bar"}, + {.kind = TokenKind::Identifier(), + .line = 3, + .column = 3, + .indent_column = 3, + .text = "foo"}, + {.kind = TokenKind::Identifier(), + .line = 3, + .column = 7, + .indent_column = 3, + .text = "foo"}, + })); +} + +auto GetAndDropLine(llvm::StringRef& text) -> std::string { + auto newline_offset = text.find_first_of('\n'); + llvm::StringRef line = text.slice(0, newline_offset); + + if (newline_offset != llvm::StringRef::npos) + text = text.substr(newline_offset + 1); + else + text = ""; + + return line.str(); +} + +TEST_F(LexerTest, Printing) { + auto buffer = Lex(";"); + ASSERT_FALSE(buffer.HasErrors()); + std::string print_storage; + llvm::raw_string_ostream print_stream(print_storage); + buffer.Print(print_stream); + llvm::StringRef print = print_stream.str(); + EXPECT_THAT(GetAndDropLine(print), + StrEq("token: { index: 0, kind: 'Semi', line: 1, column: 1, " + "indent: 1, spelling: ';' }")); + EXPECT_TRUE(print.empty()) << print; + + // Test kind padding. + buffer = Lex("(;foo;)"); + ASSERT_FALSE(buffer.HasErrors()); + print_storage.clear(); + buffer.Print(print_stream); + print = print_stream.str(); + EXPECT_THAT(GetAndDropLine(print), + StrEq("token: { index: 0, kind: 'OpenParen', line: 1, column: " + "1, indent: 1, spelling: '(', closing_token: 4 }")); + EXPECT_THAT(GetAndDropLine(print), + StrEq("token: { index: 1, kind: 'Semi', line: 1, column: " + "2, indent: 1, spelling: ';' }")); + EXPECT_THAT(GetAndDropLine(print), + StrEq("token: { index: 2, kind: 'Identifier', line: 1, column: " + "3, indent: 1, spelling: 'foo', identifier: 0 }")); + EXPECT_THAT(GetAndDropLine(print), + StrEq("token: { index: 3, kind: 'Semi', line: 1, column: " + "6, indent: 1, spelling: ';' }")); + EXPECT_THAT(GetAndDropLine(print), + StrEq("token: { index: 4, kind: 'CloseParen', line: 1, column: " + "7, indent: 1, spelling: ')', opening_token: 0 }")); + EXPECT_TRUE(print.empty()) << print; + + // Test digit padding with max values of 9, 10, and 11. + buffer = Lex(";\n\n\n\n\n\n\n\n\n\n ;;"); + ASSERT_FALSE(buffer.HasErrors()); + print_storage.clear(); + buffer.Print(print_stream); + print = print_stream.str(); + EXPECT_THAT(GetAndDropLine(print), + StrEq("token: { index: 0, kind: 'Semi', line: 1, column: 1, " + "indent: 1, spelling: ';' }")); + EXPECT_THAT(GetAndDropLine(print), + StrEq("token: { index: 1, kind: 'Semi', line: 11, column: 9, " + "indent: 9, spelling: ';' }")); + EXPECT_THAT(GetAndDropLine(print), + StrEq("token: { index: 2, kind: 'Semi', line: 11, column: 10, " + "indent: 9, spelling: ';' }")); + EXPECT_TRUE(print.empty()) << print; +} + +TEST_F(LexerTest, PrintingAsYaml) { + // Test that we can parse this into YAML and verify line and indent data. + auto buffer = Lex("\n ;\n\n\n; ;\n\n\n\n\n\n\n\n\n\n\n"); + ASSERT_FALSE(buffer.HasErrors()); + std::string print_output; + llvm::raw_string_ostream print_stream(print_output); + buffer.Print(print_stream); + print_stream.flush(); + + // Parse the output into a YAML stream. This will print errors to stderr. + llvm::SourceMgr source_manager; + llvm::yaml::Stream yaml_stream(print_output, source_manager); + auto yaml_it = yaml_stream.begin(); + auto* root_node = llvm::dyn_cast(yaml_it->getRoot()); + ASSERT_THAT(root_node, NotNull()); + + // Walk the top-level mapping of tokens, dig out the sub-mapping of data for + // each taken, and then verify those entries. + auto mapping_it = llvm::cast(root_node)->begin(); + auto* token_node = llvm::dyn_cast(&*mapping_it); + ASSERT_THAT(token_node, NotNull()); + auto* token_key_node = + llvm::dyn_cast(token_node->getKey()); + ASSERT_THAT(token_key_node, NotNull()); + EXPECT_THAT(token_key_node->getRawValue(), StrEq("token")); + auto* token_value_node = + llvm::dyn_cast(token_node->getValue()); + ASSERT_THAT(token_value_node, NotNull()); + auto token_it = token_value_node->begin(); + EXPECT_THAT(&*token_it, IsKeyValueScalars("index", "0")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("kind", "Semi")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("line", "2")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("column", "2")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("indent", "2")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("spelling", ";")); + EXPECT_THAT(++token_it, Eq(token_value_node->end())); + + ++mapping_it; + token_node = llvm::dyn_cast(&*mapping_it); + ASSERT_THAT(token_node, NotNull()); + token_key_node = llvm::dyn_cast(token_node->getKey()); + ASSERT_THAT(token_key_node, NotNull()); + EXPECT_THAT(token_key_node->getRawValue(), StrEq("token")); + token_value_node = + llvm::dyn_cast(token_node->getValue()); + ASSERT_THAT(token_value_node, NotNull()); + token_it = token_value_node->begin(); + EXPECT_THAT(&*token_it, IsKeyValueScalars("index", "1")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("kind", "Semi")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("line", "5")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("column", "1")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("indent", "1")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("spelling", ";")); + EXPECT_THAT(++token_it, Eq(token_value_node->end())); + + ++mapping_it; + token_node = llvm::dyn_cast(&*mapping_it); + ASSERT_THAT(token_node, NotNull()); + token_key_node = llvm::dyn_cast(token_node->getKey()); + ASSERT_THAT(token_key_node, NotNull()); + EXPECT_THAT(token_key_node->getRawValue(), StrEq("token")); + token_value_node = + llvm::dyn_cast(token_node->getValue()); + ASSERT_THAT(token_value_node, NotNull()); + token_it = token_value_node->begin(); + EXPECT_THAT(&*token_it, IsKeyValueScalars("index", "2")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("kind", "Semi")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("line", "5")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("column", "3")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("indent", "1")); + ++token_it; + EXPECT_THAT(&*token_it, IsKeyValueScalars("spelling", ";")); + EXPECT_THAT(++token_it, Eq(token_value_node->end())); + + ASSERT_THAT(++mapping_it, Eq(root_node->end())); + ASSERT_THAT(++yaml_it, Eq(yaml_stream.end())); +} + +} // namespace +} // namespace Carbon diff --git a/lexer/tokenized_buffer_test_helpers.h b/lexer/tokenized_buffer_test_helpers.h new file mode 100644 index 000000000000..807ad9f8f514 --- /dev/null +++ b/lexer/tokenized_buffer_test_helpers.h @@ -0,0 +1,172 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#ifndef LEXER_TOKENIZED_BUFFER_TEST_HELPERS_H_ +#define LEXER_TOKENIZED_BUFFER_TEST_HELPERS_H_ + +#include "gmock/gmock.h" +#include "lexer/tokenized_buffer.h" +#include "llvm/ADT/SmallString.h" +#include "llvm/Support/Casting.h" +#include "llvm/Support/YAMLParser.h" + +namespace Carbon { + +inline void PrintTo(const TokenizedBuffer& buffer, std::ostream* output) { + std::string message; + llvm::raw_string_ostream message_stream(message); + message_stream << "\n"; + buffer.Print(message_stream); + *output << message_stream.str(); +} + +namespace Testing { + +struct ExpectedToken { + TokenKind kind; + int line = -1; + int column = -1; + int indent_column = -1; + bool recovery = false; + llvm::StringRef text = ""; + + friend std::ostream& operator<<(std::ostream& output, + const ExpectedToken& expected) { + output << "\ntoken: { kind: '" << expected.kind.Name().str(); + if (expected.line != -1) + output << "', line: " << expected.line; + if (expected.column != -1) + output << ", column " << expected.column; + if (expected.indent_column != -1) + output << ", indent: " << expected.indent_column; + if (!expected.text.empty()) + output << ", spelling: '" << expected.text.str() << "'"; + if (expected.recovery) + output << ", recovery: true"; + output << " }"; + return output; + } +}; + +// TODO: Consider rewriting this into a `TokenEq` matcher which is used inside +// `ElementsAre`. If that isn't easily done, potentially worth checking for size +// mismatches first. +MATCHER_P(HasTokens, raw_all_expected, "") { + const TokenizedBuffer& buffer = arg; + llvm::ArrayRef all_expected = raw_all_expected; + + bool matches = true; + auto buffer_it = buffer.Tokens().begin(); + for (const ExpectedToken& expected : all_expected) { + if (buffer_it == buffer.Tokens().end()) { + // The size check outside the loop will fail and print useful info. + break; + } + + int index = buffer_it - buffer.Tokens().begin(); + auto token = *buffer_it++; + + TokenKind actual_kind = buffer.GetKind(token); + if (actual_kind != expected.kind) { + *result_listener << "\nToken " << index << " is a " + << actual_kind.Name().str() << ", expected a " + << expected.kind.Name().str() << "."; + matches = false; + } + + int actual_line = buffer.GetLineNumber(token); + if (expected.line != -1 && actual_line != expected.line) { + *result_listener << "\nToken " << index << " is at line " << actual_line + << ", expected " << expected.line << "."; + matches = false; + } + + int actual_column = buffer.GetColumnNumber(token); + if (expected.column != -1 && actual_column != expected.column) { + *result_listener << "\nToken " << index << " is at column " + << actual_column << ", expected " << expected.column + << "."; + matches = false; + } + + int actual_indent_column = + buffer.GetIndentColumnNumber(buffer.GetLine(token)); + if (expected.indent_column != -1 && + actual_indent_column != expected.indent_column) { + *result_listener << "\nToken " << index << " has column indent " + << actual_indent_column << ", expected " + << expected.indent_column << "."; + matches = false; + } + + int actual_recovery = buffer.IsRecoveryToken(token); + if (expected.recovery != actual_recovery) { + *result_listener << "\nToken " << index << " is " + << (actual_recovery ? "recovery" : "non-recovery") + << ", expected " + << (expected.recovery ? "recovery" : "non-recovery") + << "."; + matches = false; + } + + llvm::StringRef actual_text = buffer.GetTokenText(token); + if (!expected.text.empty() && actual_text != expected.text) { + *result_listener << "\nToken " << index << " has spelling `" + << actual_text.str() << "`, expected `" + << expected.text.str() << "`."; + matches = false; + } + } + + int actual_size = buffer.Tokens().end() - buffer.Tokens().begin(); + if (static_cast(all_expected.size()) != actual_size) { + *result_listener << "\nExpected " << all_expected.size() + << " tokens but found " << actual_size << "."; + matches = false; + } + return matches; +} + +MATCHER_P2(IsKeyValueScalars, key, value, "") { + auto* kv_node = llvm::dyn_cast(arg); + if (!kv_node) { + *result_listener << "this is a `" << arg->getType() + << "` node, not a `KeyValueNode`."; + return false; + } + + llvm::SmallString<128> storage; + + auto* key_node = llvm::dyn_cast(kv_node->getKey()); + if (!key_node) { + *result_listener << "the key is a `" << arg->getType() + << "` node, not a `ScalarNode`."; + return false; + } + if (key != key_node->getValue(storage)) { + *result_listener << "the key is `" << key_node->getValue(storage).str() + << "`, expected `" << key << "`."; + return false; + } + + auto* value_node = + llvm::dyn_cast(kv_node->getValue()); + if (!value_node) { + *result_listener << "the value is a `" << arg->getType() + << "` node, not a `ScalarNode`."; + return false; + } + if (value != value_node->getValue(storage)) { + *result_listener << "the value is `" << value_node->getValue(storage).str() + << "`, expected `" << value << "`."; + return false; + } + + return true; +} + +} // namespace testing +} // namespace Carbon + +#endif // LEXER_TOKENIZED_BUFFER_TEST_HELPERS_H_