feat: support compound updates and bitwise operators
This commit is contained in:
@@ -94,8 +94,17 @@ render_block proc(renderer @mut Renderer, tree @ast.Tree, block ast.NodeId, dept
|
||||
assignment :: ast.assignment_stmt(tree, statement)
|
||||
try append_text(renderer, "assignment ")
|
||||
try append_text(renderer, ast.source_text(tree, ast.node_span(tree, assignment.target)))
|
||||
try append_text(renderer, " = ")
|
||||
try append_text(renderer, ast.source_text(tree, ast.node_span(tree, assignment.value)))
|
||||
value := assignment.value
|
||||
if (assignment.compound) {
|
||||
binary :: ast.binary_expr(tree, value)
|
||||
try append_text(renderer, " ")
|
||||
try append_text(renderer, assignment_operator_text(binary.operator))
|
||||
try append_text(renderer, "= ")
|
||||
value = binary.right
|
||||
} else {
|
||||
try append_text(renderer, " = ")
|
||||
}
|
||||
try append_text(renderer, ast.source_text(tree, ast.node_span(tree, value)))
|
||||
try append_text(renderer, "\n")
|
||||
}
|
||||
.while_stmt: {
|
||||
@@ -151,3 +160,20 @@ render_statement proc(
|
||||
append_text proc(renderer @mut Renderer, text []u8) void ! mem.AllocError {
|
||||
for (text) |byte| try arraylist.append(&renderer.bytes, byte)
|
||||
}
|
||||
|
||||
@hide:file
|
||||
assignment_operator_text proc(operator ast.BinaryOperator) []u8 {
|
||||
return match operator {
|
||||
.add: "+"
|
||||
.subtract: "-"
|
||||
.multiply: "*"
|
||||
.divide: "/"
|
||||
.bit_and: "&"
|
||||
.bit_or: "|"
|
||||
.bit_xor: "xor"
|
||||
.shift_left: "<<"
|
||||
.shift_right: ">>"
|
||||
.shift_left_saturating: "<<|"
|
||||
else: unreachable
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user