Repository: seaofvoices/darklua
Pull request #155 (2023-11-24 05:36:44)

Support floor division in binary expressions
Related to #153 

This PR adds support for the new floor division operator in binary expressions.

Right now, full-moon does not support this operator in the context of compound assignments ([full-moon#292](https://github.com/Kampfkarren/full-moon/issues/292)), so I'll leave the issue opened until darklua completely supports it.

- [x] add entry to the changelog


github-actions[bot]: Coverage after merging <b>binary-floor-division</b> into <b>main</b> will be<table><tbody><tr><th>87.01%</th></tr></tbody></table>

<details><summary>Coverage Report for Changed Files</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs'>ast_converter.rs</a></td><td><b>88.59%</b></td><td>100%</td><td><b>90%</b></td><td><b>88.53%</b></td><td><a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1003'>1003</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1027'>1027</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1039'>1039</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1071'>1071</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1088'>1088</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1092-L1095'>1092&ndash;1095</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1109'>1109</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1128'>1128</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1148'>1148</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1163'>1163</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1188'>1188</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1205'>1205</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1226'>1226</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1245-L1247'>1245&ndash;1247</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1264'>1264</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1292'>1292</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1326'>1326</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1341'>1341</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1357-L1359'>1357&ndash;1359</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1369'>1369</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1374-L1376'>1374&ndash;1376</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1391'>1391</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1411'>1411</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1542-L1544'>1542&ndash;1544</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1605-L1607'>1605&ndash;1607</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1658-L1660'>1658&ndash;1660</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1684-L1687'>1684&ndash;1687</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1722-L1724'>1722&ndash;1724</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1752-L1754'>1752&ndash;1754</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1758-L1760'>1758&ndash;1760</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1820-L1821'>1820&ndash;1821</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1847-L1849'>1847&ndash;1849</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1856-L1858'>1856&ndash;1858</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1876-L1878'>1876&ndash;1878</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1902-L1904'>1902&ndash;1904</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1970'>1970</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1975-L1977'>1975&ndash;1977</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L1997'>1997</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2003-L2005'>2003&ndash;2005</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2010-L2012'>2010&ndash;2012</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2040-L2042'>2040&ndash;2042</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2066'>2066</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2102'>2102</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L212'>212</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2120-L2122'>2120&ndash;2122</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L213-L214'>213&ndash;214</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2146-L2149'>2146&ndash;2149</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2179-L2181'>2179&ndash;2181</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2192-L2194'>2192&ndash;2194</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2256-L2258'>2256&ndash;2258</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2270-L2272'>2270&ndash;2272</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2276-L2278'>2276&ndash;2278</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L229-L231'>229&ndash;231</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2312'>2312</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2395-L2397'>2395&ndash;2397</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2425-L2427'>2425&ndash;2427</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2448-L2450'>2448&ndash;2450</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2480-L2482'>2480&ndash;2482</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2498'>2498</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2502'>2502</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2526-L2528'>2526&ndash;2528</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2540-L2542'>2540&ndash;2542</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2564-L2566'>2564&ndash;2566</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L259-L261'>259&ndash;261</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2621-L2623'>2621&ndash;2623</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2654'>2654</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2686-L2689'>2686&ndash;2689</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2729-L2733'>2729&ndash;2733</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2777'>2777</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L2970'>2970</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L3046-L3053'>3046&ndash;3053</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L3055-L3062'>3055&ndash;3062</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L3064-L3075'>3064&ndash;3075</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L3084'>3084</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L3086-L3091'>3086&ndash;3091</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L3094'>3094</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L3120-L3122'>3120&ndash;3122</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L3133-L3135'>3133&ndash;3135</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L3155-L3157'>3155&ndash;3157</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L478-L480'>478&ndash;480</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L484-L486'>484&ndash;486</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L594'>594</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L609-L611'>609&ndash;611</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L646-L648'>646&ndash;648</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L656'>656</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L670'>670</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L685-L687'>685&ndash;687</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L691-L693'>691&ndash;693</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L708-L710'>708&ndash;710</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L714'>714</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L723-L725'>723&ndash;725</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L766'>766</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L777-L779'>777&ndash;779</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L785-L787'>785&ndash;787</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L806'>806</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L830'>830</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L917'>917</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/ast_converter.rs#L921-L923'>921&ndash;923</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/parser.rs'>parser.rs</a></td><td><b>99.14%</b></td><td>100%</td><td><b>73.33%</b></td><td><b>99.38%</b></td><td><a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/parser.rs#L37'>37</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/parser.rs#L43'>43</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/parser.rs#L507-L513'>507&ndash;513</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/parser.rs#L55-L59'>55&ndash;59</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/parser.rs#L66'>66</a></td></tr><tr><td colspan='6'><b>src/nodes/expressions</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/nodes/expressions/binary.rs'>binary.rs</a></td><td><b>96.12%</b></td><td>100%</td><td>100%</td><td><b>95.57%</b></td><td><a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/nodes/expressions/binary.rs#L57-L59'>57&ndash;59</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/nodes/expressions/binary.rs#L67-L69'>67&ndash;69</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/nodes/expressions/binary.rs#L71-L73'>71&ndash;73</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/nodes/expressions/binary.rs#L77-L78'>77&ndash;78</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/nodes/expressions/binary.rs#L87'>87</a></td></tr><tr><td colspan='6'><b>src/nodes/statements</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/nodes/statements/compound_assign.rs'>compound_assign.rs</a></td><td><b>83.93%</b></td><td>100%</td><td><b>72%</b></td><td><b>87.36%</b></td><td><a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/nodes/statements/compound_assign.rs#L101-L103'>101&ndash;103</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/nodes/statements/compound_assign.rs#L22'>22</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/nodes/statements/compound_assign.rs#L35'>35</a></td></tr><tr><td colspan='6'><b>src/process/evaluator</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs'>mod.rs</a></td><td><b>93.32%</b></td><td>100%</td><td><b>95%</b></td><td><b>93.17%</b></td><td><a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L100-L101'>100&ndash;101</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L162'>162</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L174'>174</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L179'>179</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L185'>185</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L196'>196</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L205-L207'>205&ndash;207</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L213-L215'>213&ndash;215</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L217-L219'>217&ndash;219</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L221-L222'>221&ndash;222</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L225'>225</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L237-L239'>237&ndash;239</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L251-L255'>251&ndash;255</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L259-L260'>259&ndash;260</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L262-L264'>262&ndash;264</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L304'>304</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L325'>325</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L339'>339</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L363'>363</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L366'>366</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L399'>399</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L405-L406'>405&ndash;406</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L411'>411</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L425'>425</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L428'>428</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L446'>446</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L549'>549</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L58-L60'>58&ndash;60</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L71'>71</a>, <a href='https://github.com/seaofvoices/darklua/blob/4d76135e983e2847f9147e4f12b7d1ab770b65b6/src/process/evaluator/mod.rs#L810'>810</a></td></tr></tbody></table></details>
github-actions[bot]: Coverage after merging <b>binary-floor-division</b> into <b>main</b> will be<table><tbody><tr><th>87.00%</th></tr></tbody></table>

<details><summary>Coverage Report for Changed Files</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs'>ast_converter.rs</a></td><td><b>88.51%</b></td><td>100%</td><td><b>90%</b></td><td><b>88.44%</b></td><td><a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1003'>1003</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1027'>1027</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1039'>1039</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1071'>1071</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1088'>1088</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1092-L1095'>1092&ndash;1095</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1109'>1109</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1128'>1128</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1148'>1148</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1163'>1163</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1188'>1188</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1205'>1205</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1226'>1226</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1245-L1247'>1245&ndash;1247</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1264'>1264</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1292'>1292</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1326'>1326</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1341'>1341</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1357-L1359'>1357&ndash;1359</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1369'>1369</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1374-L1376'>1374&ndash;1376</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1391'>1391</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1411'>1411</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1542-L1544'>1542&ndash;1544</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1605-L1607'>1605&ndash;1607</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1658-L1660'>1658&ndash;1660</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1684-L1687'>1684&ndash;1687</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1722-L1724'>1722&ndash;1724</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1752-L1754'>1752&ndash;1754</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1758-L1760'>1758&ndash;1760</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1820-L1821'>1820&ndash;1821</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1847-L1849'>1847&ndash;1849</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1856-L1858'>1856&ndash;1858</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1876-L1878'>1876&ndash;1878</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1902-L1904'>1902&ndash;1904</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1970'>1970</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1975-L1977'>1975&ndash;1977</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L1997'>1997</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2003-L2005'>2003&ndash;2005</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2010-L2012'>2010&ndash;2012</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2040-L2042'>2040&ndash;2042</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2066'>2066</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2102'>2102</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L212'>212</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2120-L2122'>2120&ndash;2122</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L213-L214'>213&ndash;214</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2146-L2149'>2146&ndash;2149</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2179-L2181'>2179&ndash;2181</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2192-L2194'>2192&ndash;2194</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2256-L2258'>2256&ndash;2258</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2270-L2272'>2270&ndash;2272</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2276-L2278'>2276&ndash;2278</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L229-L231'>229&ndash;231</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2312'>2312</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2395-L2397'>2395&ndash;2397</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2425-L2427'>2425&ndash;2427</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2448-L2450'>2448&ndash;2450</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2480-L2482'>2480&ndash;2482</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2498'>2498</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2502'>2502</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2526-L2528'>2526&ndash;2528</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2540-L2542'>2540&ndash;2542</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2564-L2566'>2564&ndash;2566</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L259-L261'>259&ndash;261</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2621-L2623'>2621&ndash;2623</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2654'>2654</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2686-L2689'>2686&ndash;2689</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2729-L2733'>2729&ndash;2733</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2777'>2777</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L2970'>2970</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L3046-L3053'>3046&ndash;3053</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L3055-L3062'>3055&ndash;3062</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L3064-L3075'>3064&ndash;3075</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L3084'>3084</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L3086-L3091'>3086&ndash;3091</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L3094'>3094</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L3120-L3122'>3120&ndash;3122</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L3133-L3135'>3133&ndash;3135</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L3155-L3157'>3155&ndash;3157</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L478-L480'>478&ndash;480</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L484-L486'>484&ndash;486</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L594'>594</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L609-L611'>609&ndash;611</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L646-L648'>646&ndash;648</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L656'>656</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L670'>670</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L685-L687'>685&ndash;687</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L691-L693'>691&ndash;693</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L708-L710'>708&ndash;710</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L714'>714</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L723-L725'>723&ndash;725</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L766'>766</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L777-L779'>777&ndash;779</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L785-L787'>785&ndash;787</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L806'>806</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L830'>830</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L917'>917</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/ast_converter.rs#L921-L923'>921&ndash;923</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/parser.rs'>parser.rs</a></td><td><b>99.14%</b></td><td>100%</td><td><b>73.33%</b></td><td><b>99.38%</b></td><td><a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/parser.rs#L37'>37</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/parser.rs#L43'>43</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/parser.rs#L507-L513'>507&ndash;513</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/parser.rs#L55-L59'>55&ndash;59</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/parser.rs#L66'>66</a></td></tr><tr><td colspan='6'><b>src/nodes/expressions</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/nodes/expressions/binary.rs'>binary.rs</a></td><td><b>96.12%</b></td><td>100%</td><td>100%</td><td><b>95.57%</b></td><td><a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/nodes/expressions/binary.rs#L57-L59'>57&ndash;59</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/nodes/expressions/binary.rs#L67-L69'>67&ndash;69</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/nodes/expressions/binary.rs#L71-L73'>71&ndash;73</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/nodes/expressions/binary.rs#L77-L78'>77&ndash;78</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/nodes/expressions/binary.rs#L87'>87</a></td></tr><tr><td colspan='6'><b>src/nodes/statements</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/nodes/statements/compound_assign.rs'>compound_assign.rs</a></td><td><b>83.93%</b></td><td>100%</td><td><b>72%</b></td><td><b>87.36%</b></td><td><a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/nodes/statements/compound_assign.rs#L101-L103'>101&ndash;103</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/nodes/statements/compound_assign.rs#L22'>22</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/nodes/statements/compound_assign.rs#L35'>35</a></td></tr><tr><td colspan='6'><b>src/process/evaluator</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs'>mod.rs</a></td><td><b>93.32%</b></td><td>100%</td><td><b>95%</b></td><td><b>93.17%</b></td><td><a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L100-L101'>100&ndash;101</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L162'>162</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L174'>174</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L179'>179</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L185'>185</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L196'>196</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L205-L207'>205&ndash;207</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L213-L215'>213&ndash;215</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L217-L219'>217&ndash;219</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L221-L222'>221&ndash;222</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L225'>225</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L237-L239'>237&ndash;239</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L251-L255'>251&ndash;255</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L259-L260'>259&ndash;260</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L262-L264'>262&ndash;264</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L304'>304</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L325'>325</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L339'>339</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L363'>363</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L366'>366</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L399'>399</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L405-L406'>405&ndash;406</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L411'>411</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L425'>425</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L428'>428</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L446'>446</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L549'>549</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L58-L60'>58&ndash;60</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L71'>71</a>, <a href='https://github.com/seaofvoices/darklua/blob/8770b8422a21ecea1d649585351436ef55bcd71b/src/process/evaluator/mod.rs#L810'>810</a></td></tr></tbody></table></details>

Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7e32bbc..3140266 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
 
 ## Unreleased
 
+* add support for floor division (`//`) operator in binary expressions ([#155](https://github.com/seaofvoices/darklua/pull/155))
 * add support for Luau interpolated strings ([#94](https://github.com/seaofvoices/darklua/pull/94))
 * add rule to append text comments ([#141](https://github.com/seaofvoices/darklua/pull/141))
 
diff --git a/src/ast_converter.rs b/src/ast_converter.rs
index f57cc7a..74a6f1d 100644
--- a/src/ast_converter.rs
+++ b/src/ast_converter.rs
@@ -2517,6 +2517,7 @@ impl<'a> AstConverter<'a> {
             ast::BinOp::Percent(_) => BinaryOperator::Percent,
             ast::BinOp::Plus(_) => BinaryOperator::Plus,
             ast::BinOp::Slash(_) => BinaryOperator::Slash,
+            ast::BinOp::DoubleSlash(_) => BinaryOperator::DoubleSlash,
             ast::BinOp::Star(_) => BinaryOperator::Asterisk,
             ast::BinOp::TildeEqual(_) => BinaryOperator::NotEqual,
             ast::BinOp::TwoDots(_) => BinaryOperator::Concat,
@@ -2553,6 +2554,9 @@ impl<'a> AstConverter<'a> {
             ast::types::CompoundOp::MinusEqual(_) => CompoundOperator::Minus,
             ast::types::CompoundOp::StarEqual(_) => CompoundOperator::Asterisk,
             ast::types::CompoundOp::SlashEqual(_) => CompoundOperator::Slash,
+            // todo: once full-moon fixes this issue and the change is in a new release
+            // https://github.com/Kampfkarren/full-moon/issues/292
+            // ast::types::CompoundOp::DoubleSlashEqual(_) => CompoundOperator::DoubleSlash,
             ast::types::CompoundOp::PercentEqual(_) => CompoundOperator::Percent,
             ast::types::CompoundOp::CaretEqual(_) => CompoundOperator::Caret,
             ast::types::CompoundOp::TwoDotsEqual(_) => CompoundOperator::Concat,
@@ -3108,11 +3112,12 @@ fn get_binary_operator_token(
         | BinOp::Percent(token)
         | BinOp::Plus(token)
         | BinOp::Slash(token)
+        | BinOp::DoubleSlash(token)
         | BinOp::Star(token)
         | BinOp::TildeEqual(token)
         | BinOp::TwoDots(token)
         | BinOp::TwoEqual(token) => Ok(token),
-        _ => Err(ConvertError::CompoundOperator {
+        _ => Err(ConvertError::BinaryOperator {
             operator: operator.to_string(),
         }),
     }
@@ -3125,7 +3130,7 @@ fn get_unary_operator_token(
 
     match operator {
         UnOp::Minus(token) | UnOp::Not(token) | UnOp::Hash(token) => Ok(token),
-        _ => Err(ConvertError::CompoundOperator {
+        _ => Err(ConvertError::UnaryOperator {
             operator: operator.to_string(),
         }),
     }
@@ -3141,6 +3146,9 @@ fn get_compound_operator_token(
         | CompoundOp::MinusEqual(token)
         | CompoundOp::StarEqual(token)
         | CompoundOp::SlashEqual(token)
+        // todo: once full-moon fixes this issue and the change is in a new release
+        // https://github.com/Kampfkarren/full-moon/issues/292
+        // | CompoundOp::DoubleSlashEqual(token)
         | CompoundOp::PercentEqual(token)
         | CompoundOp::CaretEqual(token)
         | CompoundOp::TwoDotsEqual(token) => Ok(token),
diff --git a/src/nodes/expressions/binary.rs b/src/nodes/expressions/binary.rs
index cf17fbf..275bb9f 100644
--- a/src/nodes/expressions/binary.rs
+++ b/src/nodes/expressions/binary.rs
@@ -14,6 +14,7 @@ pub enum BinaryOperator {
     Minus,
     Asterisk,
     Slash,
+    DoubleSlash,
     Percent,
     Caret,
     Concat,
@@ -173,6 +174,7 @@ impl BinaryOperator {
             Self::Minus => "-",
             Self::Asterisk => "*",
             Self::Slash => "/",
+            Self::DoubleSlash => "//",
             Self::Percent => "%",
             Self::Caret => "^",
             Self::Concat => "..",
@@ -191,7 +193,7 @@ impl BinaryOperator {
             | Self::GreaterOrEqualThan => 2,
             Self::Concat => 3,
             Self::Plus | Self::Minus => 4,
-            Self::Asterisk | Self::Slash | Self::Percent => 5,
+            Self::Asterisk | Self::Slash | Self::DoubleSlash | Self::Percent => 5,
             Self::Caret => 7,
         }
     }
@@ -307,6 +309,7 @@ mod test {
             assert!(Caret.precedes(Minus));
             assert!(Caret.precedes(Asterisk));
             assert!(Caret.precedes(Slash));
+            assert!(Caret.precedes(DoubleSlash));
             assert!(Caret.precedes(Percent));
             assert!(Caret.precedes(Concat));
             assert!(!Caret.precedes(Caret));
@@ -327,6 +330,7 @@ mod test {
             assert!(Asterisk.precedes(Minus));
             assert!(!Asterisk.precedes(Asterisk));
             assert!(!Asterisk.precedes(Slash));
+            assert!(!Asterisk.precedes(DoubleSlash));
             assert!(!Asterisk.precedes(Percent));
             assert!(Asterisk.precedes(Concat));
             assert!(!Asterisk.precedes(Caret));
@@ -347,6 +351,7 @@ mod test {
             assert!(Slash.precedes(Minus));
             assert!(!Slash.precedes(Asterisk));
             assert!(!Slash.precedes(Slash));
+            assert!(!Slash.precedes(DoubleSlash));
             assert!(!Slash.precedes(Percent));
             assert!(Slash.precedes(Concat));
             assert!(!Slash.precedes(Caret));
@@ -367,6 +372,7 @@ mod test {
             assert!(Percent.precedes(Minus));
             assert!(!Percent.precedes(Asterisk));
             assert!(!Percent.precedes(Slash));
+            assert!(!Percent.precedes(DoubleSlash));
             assert!(!Percent.precedes(Percent));
             assert!(Percent.precedes(Concat));
             assert!(!Percent.precedes(Caret));
@@ -387,6 +393,7 @@ mod test {
             assert!(!Plus.precedes(Minus));
             assert!(!Plus.precedes(Asterisk));
             assert!(!Plus.precedes(Slash));
+            assert!(!Plus.precedes(DoubleSlash));
             assert!(!Plus.precedes(Percent));
             assert!(Plus.precedes(Concat));
             assert!(!Plus.precedes(Caret));
@@ -407,6 +414,7 @@ mod test {
             assert!(!Minus.precedes(Minus));
             assert!(!Minus.precedes(Asterisk));
             assert!(!Minus.precedes(Slash));
+            assert!(!Minus.precedes(DoubleSlash));
             assert!(!Minus.precedes(Percent));
             assert!(Minus.precedes(Concat));
             assert!(!Minus.precedes(Caret));
@@ -427,6 +435,7 @@ mod test {
             assert!(!Concat.precedes(Minus));
             assert!(!Concat.precedes(Asterisk));
             assert!(!Concat.precedes(Slash));
+            assert!(!Concat.precedes(DoubleSlash));
             assert!(!Concat.precedes(Percent));
             assert!(!Concat.precedes(Concat));
             assert!(!Concat.precedes(Caret));
@@ -447,6 +456,7 @@ mod test {
             assert!(!And.precedes(Minus));
             assert!(!And.precedes(Asterisk));
             assert!(!And.precedes(Slash));
+            assert!(!And.precedes(DoubleSlash));
             assert!(!And.precedes(Percent));
             assert!(!And.precedes(Concat));
             assert!(!And.precedes(Caret));
diff --git a/src/nodes/statements/compound_assign.rs b/src/nodes/statements/compound_assign.rs
index 2aee96d..249d417 100644
--- a/src/nodes/statements/compound_assign.rs
+++ b/src/nodes/statements/compound_assign.rs
@@ -6,6 +6,7 @@ pub enum CompoundOperator {
     Minus,
     Asterisk,
     Slash,
+    DoubleSlash,
     Percent,
     Caret,
     Concat,
@@ -18,6 +19,7 @@ impl CompoundOperator {
             Self::Minus => "-=",
             Self::Asterisk => "*=",
             Self::Slash => "/=",
+            Self::DoubleSlash => "//=",
             Self::Percent => "%=",
             Self::Caret => "^=",
             Self::Concat => "..=",
@@ -30,6 +32,7 @@ impl CompoundOperator {
             Self::Minus => BinaryOperator::Minus,
             Self::Asterisk => BinaryOperator::Asterisk,
             Self::Slash => BinaryOperator::Slash,
+            Self::DoubleSlash => BinaryOperator::DoubleSlash,
             Self::Percent => BinaryOperator::Percent,
             Self::Caret => BinaryOperator::Caret,
             Self::Concat => BinaryOperator::Concat,
diff --git a/src/parser.rs b/src/parser.rs
index fc6abb7..2de39f0 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -189,6 +189,9 @@ mod test {
         return_binary_and("return true and false") => ReturnStatement::one(
             BinaryExpression::new(BinaryOperator::And, true, false),
         ),
+        return_binary_floor_division("return 10 // 3") => ReturnStatement::one(
+            BinaryExpression::new(BinaryOperator::DoubleSlash, 10, 3),
+        ),
         return_zero("return 0") => ReturnStatement::one(
             NumberExpression::from_str("0").unwrap(),
         ),
@@ -481,6 +484,13 @@ mod test {
             Variable::new("var"),
             Expression::identifier("amount"),
         ),
+        // todo: once full-moon fixes this issue and the change is in a new release
+        // https://github.com/Kampfkarren/full-moon/issues/292
+        // compound_floor_division("var //= divider") => CompoundAssignStatement::new(
+        //     CompoundOperator::Plus,
+        //     Variable::new("var"),
+        //     Expression::identifier("divider"),
+        // ),
     );
 
     mod parse_with_tokens {
diff --git a/src/process/evaluator/mod.rs b/src/process/evaluator/mod.rs
index 810d723..c87ba95 100644
--- a/src/process/evaluator/mod.rs
+++ b/src/process/evaluator/mod.rs
@@ -308,6 +308,7 @@ impl Evaluator {
             BinaryOperator::Minus => self.evaluate_math(expression, |a, b| a - b),
             BinaryOperator::Asterisk => self.evaluate_math(expression, |a, b| a * b),
             BinaryOperator::Slash => self.evaluate_math(expression, |a, b| a / b),
+            BinaryOperator::DoubleSlash => self.evaluate_math(expression, |a, b| (a / b).floor()),
             BinaryOperator::Caret => self.evaluate_math(expression, |a, b| a.powf(b)),
             BinaryOperator::Percent => {
                 self.evaluate_math(expression, |a, b| a - b * (a / b).floor())
@@ -669,6 +670,31 @@ mod test {
                 Expression::from(0.0),
                 Expression::from(0.0)
             ) => LuaValue::Number(std::f64::NAN),
+            twelve_floor_division_by_four(
+                BinaryOperator::DoubleSlash,
+                Expression::from(12.0),
+                Expression::from(4.0)
+            ) => LuaValue::Number(3.0),
+            eleven_floor_division_by_three(
+                BinaryOperator::DoubleSlash,
+                Expression::from(11.0),
+                Expression::from(3.0)
+            ) => LuaValue::Number(3.0),
+            one_floor_division_by_zero(
+                BinaryOperator::DoubleSlash,
+                Expression::from(1.0),
+                Expression::from(0.0)
+            ) => LuaValue::Number(std::f64::INFINITY),
+            minus_one_floor_division_by_zero(
+                BinaryOperator::DoubleSlash,
+                Expression::from(-1.0),
+                Expression::from(0.0)
+            ) => LuaValue::Number(std::f64::NEG_INFINITY),
+            zero_floor_division_by_zero(
+                BinaryOperator::DoubleSlash,
+                Expression::from(0.0),
+                Expression::from(0.0)
+            ) => LuaValue::Number(std::f64::NAN),
             five_mod_two(
                 BinaryOperator::Percent,
                 Expression::from(5.0),


Test patch:
diff --git a/tests/ast_fuzzer/combination.rs b/tests/ast_fuzzer/combination.rs
index 083bf9b..b787706 100644
--- a/tests/ast_fuzzer/combination.rs
+++ b/tests/ast_fuzzer/combination.rs
@@ -15,6 +15,7 @@ pub fn binary_operators() -> impl Iterator<Item = BinaryOperator> {
         BinaryOperator::Minus,
         BinaryOperator::Asterisk,
         BinaryOperator::Slash,
+        BinaryOperator::DoubleSlash,
         BinaryOperator::Percent,
         BinaryOperator::Caret,
         BinaryOperator::Concat,
diff --git a/tests/ast_fuzzer/random.rs b/tests/ast_fuzzer/random.rs
index edabe75..c09cf27 100644
--- a/tests/ast_fuzzer/random.rs
+++ b/tests/ast_fuzzer/random.rs
@@ -183,7 +183,7 @@ impl RandomAst {
     }
 
     pub fn binary_operator(&self) -> BinaryOperator {
-        match self.range(14) {
+        match self.range(15) {
             0 => BinaryOperator::And,
             1 => BinaryOperator::Or,
             2 => BinaryOperator::Equal,
@@ -196,8 +196,9 @@ impl RandomAst {
             9 => BinaryOperator::Minus,
             10 => BinaryOperator::Asterisk,
             11 => BinaryOperator::Slash,
-            12 => BinaryOperator::Percent,
-            13 => BinaryOperator::Caret,
+            12 => BinaryOperator::DoubleSlash,
+            13 => BinaryOperator::Percent,
+            14 => BinaryOperator::Caret,
             _ => BinaryOperator::Concat,
         }
     }
@@ -211,13 +212,16 @@ impl RandomAst {
     }
 
     pub fn compound_operator(&self) -> CompoundOperator {
-        match self.range(6) {
+        match self.range(7) {
             0 => CompoundOperator::Plus,
             1 => CompoundOperator::Minus,
             2 => CompoundOperator::Asterisk,
             3 => CompoundOperator::Slash,
-            4 => CompoundOperator::Percent,
-            5 => CompoundOperator::Caret,
+            // todo: once full-moon fixes this issue and the change is in a new release
+            // https://github.com/Kampfkarren/full-moon/issues/292
+            // 4 => CompoundOperator::DoubleSlash,
+            5 => CompoundOperator::Percent,
+            6 => CompoundOperator::Caret,
             _ => CompoundOperator::Concat,
         }
     }