fix: ast.lasttoken() does not handle addrspace section

This commit is contained in:
ikrima 2022-02-28 16:08:56 -06:00
parent f3aabd6b7c
commit 90195a6695

View File

@ -744,7 +744,7 @@ pub fn lastToken(tree: Ast, node: Ast.Node.Index) Ast.TokenIndex {
}, },
.fn_proto_one => { .fn_proto_one => {
const extra = tree.extraData(datas[n].lhs, Node.FnProtoOne); const extra = tree.extraData(datas[n].lhs, Node.FnProtoOne);
// linksection, callconv, align can appear in any order, so we // addrspace, linksection, callconv, align can appear in any order, so we
// find the last one here. // find the last one here.
// rhs can be zero if no return type is provided // rhs can be zero if no return type is provided
var max_node: Node.Index = 0; var max_node: Node.Index = 0;
@ -763,6 +763,14 @@ pub fn lastToken(tree: Ast, node: Ast.Node.Index) Ast.TokenIndex {
max_offset = 1; // for the rparen max_offset = 1; // for the rparen
} }
} }
if (extra.addrspace_expr != 0) {
const start = token_starts[main_tokens[extra.addrspace_expr]];
if (start > max_start) {
max_node = extra.addrspace_expr;
max_start = start;
max_offset = 1; // for the rparen
}
}
if (extra.section_expr != 0) { if (extra.section_expr != 0) {
const start = token_starts[main_tokens[extra.section_expr]]; const start = token_starts[main_tokens[extra.section_expr]];
if (start > max_start) { if (start > max_start) {
@ -797,7 +805,7 @@ pub fn lastToken(tree: Ast, node: Ast.Node.Index) Ast.TokenIndex {
}, },
.fn_proto => { .fn_proto => {
const extra = tree.extraData(datas[n].lhs, Node.FnProto); const extra = tree.extraData(datas[n].lhs, Node.FnProto);
// linksection, callconv, align can appear in any order, so we // addrspace, linksection, callconv, align can appear in any order, so we
// find the last one here. // find the last one here.
// rhs can be zero if no return type is provided // rhs can be zero if no return type is provided
var max_node: Node.Index = 0; var max_node: Node.Index = 0;
@ -816,6 +824,14 @@ pub fn lastToken(tree: Ast, node: Ast.Node.Index) Ast.TokenIndex {
max_offset = 1; // for the rparen max_offset = 1; // for the rparen
} }
} }
if (extra.addrspace_expr != 0) {
const start = token_starts[main_tokens[extra.addrspace_expr]];
if (start > max_start) {
max_node = extra.addrspace_expr;
max_start = start;
max_offset = 1; // for the rparen
}
}
if (extra.section_expr != 0) { if (extra.section_expr != 0) {
const start = token_starts[main_tokens[extra.section_expr]]; const start = token_starts[main_tokens[extra.section_expr]];
if (start > max_start) { if (start > max_start) {