implement iterateChildren
on asm
This commit is contained in:
parent
5457cec8da
commit
92eaa22c30
21
src/ast.zig
21
src/ast.zig
@ -1176,6 +1176,8 @@ pub fn iterateChildren(
|
|||||||
) Error!void {
|
) Error!void {
|
||||||
const node_tags = tree.nodes.items(.tag);
|
const node_tags = tree.nodes.items(.tag);
|
||||||
const node_data = tree.nodes.items(.data);
|
const node_data = tree.nodes.items(.data);
|
||||||
|
const main_tokens = tree.nodes.items(.main_token);
|
||||||
|
const token_tags = tree.tokens.items(.tag);
|
||||||
|
|
||||||
if (node > tree.nodes.len) return;
|
if (node > tree.nodes.len) return;
|
||||||
|
|
||||||
@ -1494,16 +1496,25 @@ pub fn iterateChildren(
|
|||||||
},
|
},
|
||||||
|
|
||||||
.@"asm" => {
|
.@"asm" => {
|
||||||
const asm_ast = tree.asmFull(node).ast;
|
const asm_node = tree.asmFull(node);
|
||||||
try callback(context, tree, asm_ast.template);
|
|
||||||
for (asm_ast.items) |child| {
|
try callback(context, tree, asm_node.ast.template);
|
||||||
try callback(context, tree, child);
|
|
||||||
|
for (asm_node.outputs) |output_node| {
|
||||||
|
const has_arrow = token_tags[main_tokens[output_node] + 4] == .arrow;
|
||||||
|
if (has_arrow) {
|
||||||
|
try callback(context, tree, node_data[output_node].lhs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (asm_node.inputs) |input_node| {
|
||||||
|
try callback(context, tree, node_data[input_node].lhs);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
.asm_output,
|
.asm_output,
|
||||||
.asm_input,
|
.asm_input,
|
||||||
=> {}, // TODO
|
=> unreachable,
|
||||||
|
|
||||||
.@"continue",
|
.@"continue",
|
||||||
.anyframe_literal,
|
.anyframe_literal,
|
||||||
|
@ -120,6 +120,24 @@ test "references - label" {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test "references - asm" {
|
||||||
|
try testReferences(
|
||||||
|
\\fn foo(<0>: u32) void {
|
||||||
|
\\ asm ("bogus"
|
||||||
|
\\ : [ret] "={rax}" (-> void),
|
||||||
|
\\ : [bar] "{rax}" (<0>),
|
||||||
|
\\ );
|
||||||
|
\\}
|
||||||
|
);
|
||||||
|
try testReferences(
|
||||||
|
\\fn foo(comptime <0>: type) void {
|
||||||
|
\\ asm ("bogus"
|
||||||
|
\\ : [ret] "={rax}" (-> <0>),
|
||||||
|
\\ );
|
||||||
|
\\}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
test "references - cross-file reference" {
|
test "references - cross-file reference" {
|
||||||
if (true) return error.SkipZigTest; // TODO
|
if (true) return error.SkipZigTest; // TODO
|
||||||
try testMFReferences(&.{
|
try testMFReferences(&.{
|
||||||
|
Loading…
Reference in New Issue
Block a user