From a4c9aeab14a8d03d1d942fbe0c97f2309de144fd Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Sat, 24 Jul 2021 10:22:51 +0300 Subject: [PATCH] v.ast.walker: pass nodes by reference --- vlib/v/ast/walker/walker.v | 10 +++++----- vlib/v/ast/walker/walker_test.v | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/vlib/v/ast/walker/walker.v b/vlib/v/ast/walker/walker.v index 36f7ded502..75e6c17799 100644 --- a/vlib/v/ast/walker/walker.v +++ b/vlib/v/ast/walker/walker.v @@ -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 { diff --git a/vlib/v/ast/walker/walker_test.v b/vlib/v/ast/walker/walker_test.v index 1730339503..6d90fe9e5c 100644 --- a/vlib/v/ast/walker/walker_test.v +++ b/vlib/v/ast/walker/walker_test.v @@ -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 {