block as statement
This commit is contained in:
parent
6041ec5102
commit
c52b7ab8de
|
|
@ -591,8 +591,17 @@ parse_statement:
|
|||
call expect_token
|
||||
test rax, rax
|
||||
jnz .let
|
||||
mov dil, TOKEN_LBRACE
|
||||
call peek_expect_token ; parse_block expects lbrace to still be there
|
||||
jnz .block
|
||||
jmp .panic
|
||||
|
||||
.block:
|
||||
mov rdi, [rsp] ; Ast
|
||||
call parse_block
|
||||
; Blocks don't require a trailing semicolon
|
||||
jmp .epilogue
|
||||
|
||||
.let:
|
||||
mov rdi, [rsp] ; Ast
|
||||
call ast_parse_let
|
||||
|
|
@ -617,6 +626,7 @@ parse_statement:
|
|||
mov dil, TOKEN_SEMI
|
||||
call unwrap_token
|
||||
mov rax, [rsp] ; expression
|
||||
.epilogue:
|
||||
add rsp, 40
|
||||
pop rbp
|
||||
ret
|
||||
|
|
@ -652,7 +662,7 @@ parse_block:
|
|||
mov rdx, 0 ; drop = None
|
||||
mov rcx, 64 ; capacity
|
||||
call vec_init_with
|
||||
|
||||
nop
|
||||
.loop:
|
||||
mov dil, TOKEN_RBRACE
|
||||
call peek_expect_token
|
||||
|
|
@ -673,6 +683,10 @@ parse_block:
|
|||
call vec_push
|
||||
jmp .loop
|
||||
.done:
|
||||
; eat the closing brace
|
||||
mov dil, TOKEN_RBRACE
|
||||
call unwrap_token
|
||||
|
||||
mov rdi, [rsp + 56] ; Ast
|
||||
mov qword [rsp], AST_BLOCK ; AstNode.kind
|
||||
mov rsi, [rsp + 64] ; span
|
||||
|
|
|
|||
|
|
@ -82,6 +82,9 @@ fn main() {
|
|||
print_ast(
|
||||
b"fn main(a: u32) -> void {
|
||||
let y: u32 = a + 4;
|
||||
{
|
||||
let y: u32 = 10;
|
||||
}
|
||||
let y: *u32 = &y;
|
||||
return *y;
|
||||
}",
|
||||
|
|
|
|||
Loading…
Reference in a new issue