sort symkey by ident before span
This commit is contained in:
parent
adb30e983c
commit
928be75faf
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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) },
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue