Add #reverse to odin/parser.

This commit is contained in:
DanielGavin
2023-09-03 16:15:03 +02:00
parent 4aa4317c28
commit 64a63b3879
2 changed files with 13 additions and 0 deletions

View File

@@ -419,6 +419,7 @@ Range_Stmt :: struct {
in_pos: tokenizer.Pos,
expr: ^Expr,
body: ^Stmt,
reverse: bool,
}
Inline_Range_Stmt :: struct {

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))