1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

v.ast.walker: pass nodes by reference

This commit is contained in:
Delyan Angelov 2021-07-24 10:22:51 +03:00
parent 9ffbda3833
commit a4c9aeab14
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
2 changed files with 7 additions and 7 deletions

View File

@ -4,10 +4,10 @@ import v.ast
// Visitor defines a visit method which is invoked by the walker in each node it encounters.
pub interface Visitor {
visit(node ast.Node) ?
visit(node &ast.Node) ?
}
pub type InspectorFn = fn (node ast.Node, data voidptr) bool
pub type InspectorFn = fn (node &ast.Node, data voidptr) bool
struct Inspector {
inspector_callback InspectorFn
@ -15,7 +15,7 @@ mut:
data voidptr
}
pub fn (i &Inspector) visit(node ast.Node) ? {
pub fn (i &Inspector) visit(node &ast.Node) ? {
if i.inspector_callback(node, i.data) {
return
}
@ -23,12 +23,12 @@ pub fn (i &Inspector) visit(node ast.Node) ? {
}
// inspect traverses and checks the AST node on a depth-first order and based on the data given
pub fn inspect(node ast.Node, data voidptr, inspector_callback InspectorFn) {
pub fn inspect(node &ast.Node, data voidptr, inspector_callback InspectorFn) {
walk(Inspector{inspector_callback, data}, node)
}
// walk traverses the AST using the given visitor
pub fn walk(visitor Visitor, node ast.Node) {
pub fn walk(visitor Visitor, node &ast.Node) {
visitor.visit(node) or { return }
children := node.children()
for child_node in children {

View File

@ -15,7 +15,7 @@ mut:
node ast.Node
}
fn (mut n NodeByOffset) visit(node ast.Node) ? {
fn (mut n NodeByOffset) visit(node &ast.Node) ? {
node_pos := node.position()
if n.pos >= node_pos.pos && n.pos <= node_pos.pos + node_pos.len && node !is ast.File {
n.node = node
@ -46,7 +46,7 @@ fn test_inspect() {
module main
'
file := parse_text(source)
walker.inspect(file, voidptr(0), fn (node ast.Node, data voidptr) bool {
walker.inspect(file, voidptr(0), fn (node &ast.Node, data voidptr) bool {
// Second visit must be ast.Stmt
if node is ast.Stmt {
if node !is ast.Module {