Merge pull request #2785 from DanielGavin/odin-core-reverse

Add #reverse to `odin/parser`.
This commit is contained in:
gingerBill
2023-09-05 18:57:08 +01:00
committed by GitHub
2 changed files with 13 additions and 0 deletions
+1
View File
@@ -419,6 +419,7 @@ Range_Stmt :: struct {
in_pos: tokenizer.Pos,
expr: ^Expr,
body: ^Stmt,
reverse: bool,
}
Inline_Range_Stmt :: struct {
+12
View File
@@ -1431,6 +1431,18 @@ parse_stmt :: proc(p: ^Parser) -> ^ast.Stmt {
return es
case "unroll":
return parse_unrolled_for_loop(p, tag)
case "reverse":
stmt := parse_for_stmt(p)
if range, is_range := stmt.derived.(^ast.Range_Stmt); is_range {
if range.reverse {
error(p, range.pos, "#reverse already applied to a 'for in' statement")
}
range.reverse = true
} else {
error(p, range.pos, "#reverse can only be applied to a 'for in' statement")
}
return stmt
case "include":
error(p, tag.pos, "#include is not a valid import declaration kind. Did you meant 'import'?")
return ast.new(ast.Bad_Stmt, tok.pos, end_pos(tag))