sort symkey by ident before span

This commit is contained in:
janis 2025-10-30 23:00:36 +01:00
parent adb30e983c
commit 928be75faf
Signed by: janis
SSH key fingerprint: SHA256:bB1qbbqmDXZNT0KKD5c2Dfjg53JGhj7B3CFcLIzSqq8
2 changed files with 44 additions and 23 deletions

View file

@ -1043,21 +1043,21 @@ symkey_cmp:
mov rbp, rsp mov rbp, rsp
push rbx push rbx
sub rsp, 16
mov [rsp], rsi
mov [rsp + 8], rdx
mov al, byte [rsi] ; a.kind mov al, byte [rsi] ; a.kind
mov bl, byte [rdx] ; b.kind mov bl, byte [rdx] ; b.kind
cmp al, bl cmp al, bl
jl .a_less jl .a_less
jg .a_greater jg .a_greater
mov rax, [rsi + 8] ; a.scope_index mov rax, [rsi + 8] ; a.scope_index
mov rbx, [rdx + 8] ; b.scope_index mov rbx, [rdx + 8] ; b.scope_index
cmp rax, rbx cmp rax, rbx
jl .a_less jl .a_less
jg .a_greater jg .a_greater
mov rax, [rsi + 16] ; a.span
mov rbx, [rdx + 16] ; b.span
cmp rax, rbx
jl .a_less
jg .a_greater
mov rdi, [rsi + 24] ; a.ident mov rdi, [rsi + 24] ; a.ident
mov rsi, [rsi + 32] ; a.ident_len mov rsi, [rsi + 32] ; a.ident_len
@ -1067,6 +1067,15 @@ symkey_cmp:
cmp rax, 0 cmp rax, 0
jl .a_less jl .a_less
jg .a_greater jg .a_greater
mov rsi, [rsp]
mov rdx, [rsp + 8]
mov rax, [rsi + 16] ; a.span
mov rbx, [rdx + 16] ; b.span
cmp rax, rbx
jl .a_less
jg .a_greater
xor rax, rax xor rax, rax
jmp .epilogue jmp .epilogue
.a_less: .a_less:
@ -1075,6 +1084,7 @@ symkey_cmp:
.a_greater: .a_greater:
mov rax, 1 mov rax, 1
.epilogue: .epilogue:
add rsp, 16
pop rbx pop rbx
pop rbp pop rbp
ret ret
@ -1468,6 +1478,17 @@ ast_walk_for_each:
pop rbp pop rbp
ret ret
;; rdi: Ctx
;; rsi: Ast
;; rdx: node_index
ast_resolve_var_refs_for_each:
push rbp
mov rbp, rsp
.epilogue:
pop rbp
ret
;; rdi: Ast ;; rdi: Ast
;; define-fn: fn ast_resolve_var_refs(ast: *mut Ast) ;; define-fn: fn ast_resolve_var_refs(ast: *mut Ast)
ast_resolve_var_refs: ast_resolve_var_refs:

View file

@ -49,31 +49,31 @@ fn main() {
} }
print_ast(b"3 + 4", |ast| unsafe { parse_expr(ast) }); print_ast(b"3 + 4", |ast| unsafe { parse_expr(ast) });
// print_ast(b"fn main() -> void { return 1 + 2; }", |ast| unsafe { print_ast(b"fn main() -> void { return 1 + 2; }", |ast| unsafe {
// parse_func(ast) parse_func(ast)
// }); });
// print_ast(b"fn main() -> void { return (1 + (2)); }", |ast| unsafe { print_ast(b"fn main() -> void { return (1 + (2)); }", |ast| unsafe {
// parse_func(ast) parse_func(ast)
// }); });
// print_ast( print_ast(
// b"fn main() -> void { return (1 + (2 * 3)) / 4; }", b"fn main() -> void { return (1 + (2 * 3)) / 4; }",
// |ast| unsafe { parse_func(ast) }, |ast| unsafe { parse_func(ast) },
// ); );
// print_ast(b"fn main() -> void { return 1 + 2 * 3; }", |ast| unsafe { print_ast(b"fn main() -> void { return 1 + 2 * 3; }", |ast| unsafe {
// parse_func(ast) parse_func(ast)
// }); });
// print_ast(b"fn main() -> void { let x: u32 = 4; }", |ast| unsafe { print_ast(b"fn main() -> void { let x: u32 = 4; }", |ast| unsafe {
// parse_func(ast) parse_func(ast)
// }); });
print_ast( print_ast(
b"fn main(a: u32) -> void { let x: u32 = a + 4; }", b"fn main(a: u32) -> void { let x: u32 = a + 4; }",
|ast| unsafe { parse_func(ast) }, |ast| unsafe { parse_func(ast) },
); );
print_ast( print_ast(
b"fn main(a: u32) -> void { b"fn main(a: u32) -> void {
let x: u32 = a + 4; let y: u32 = a + 4;
let y: *u32 = &x; let y: *u32 = &y;
return *y; return *y;
}", }",
|ast| unsafe { parse_func(ast) }, |ast| unsafe { parse_func(ast) },