Skip to content

Commit c682cd6

Browse files
committed
Memoize Visitor.visit_methods
1 parent 71c496f commit c682cd6

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

lib/syntax_tree/visitor.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ def visit_method(method_name)
4848

4949
# This is the list of all of the valid visit methods.
5050
def visit_methods
51-
Visitor.instance_methods.grep(/^visit_(?!child_nodes)/)
51+
@visit_methods ||=
52+
Visitor.instance_methods.grep(/^visit_(?!child_nodes)/)
5253
end
5354
end
5455

test/visitor_test.rb

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,21 @@
33
require_relative "test_helper"
44

55
class VisitorTest < Minitest::Test
6-
def test_visit_all_nodes
7-
visitor = SyntaxTree::Visitor.new
6+
unless ENV["FAST"]
7+
def test_visit_all_nodes
8+
visitor = SyntaxTree::Visitor.new
89

9-
filepath = File.expand_path("../lib/syntax_tree/node.rb", __dir__)
10-
program = SyntaxTree.parse(SyntaxTree.read(filepath))
10+
filepath = File.expand_path("../lib/syntax_tree/node.rb", __dir__)
11+
program = SyntaxTree.parse(SyntaxTree.read(filepath))
1112

12-
program.statements.body.last.bodystmt.statements.body.each do |node|
13-
next unless node in SyntaxTree::ClassDeclaration[superclass: { value: { value: "Node" } }]
13+
program.statements.body.last.bodystmt.statements.body.each do |node|
14+
next unless node in SyntaxTree::ClassDeclaration[superclass: { value: { value: "Node" } }]
1415

15-
accept = node.bodystmt.statements.body.detect { |defm| defm in SyntaxTree::Def[name: { value: "accept" }] }
16-
accept => { bodystmt: { statements: { body: [SyntaxTree::Call[message: { value: visit_method }]] } } }
16+
accept = node.bodystmt.statements.body.detect { |defm| defm in SyntaxTree::Def[name: { value: "accept" }] }
17+
accept => { bodystmt: { statements: { body: [SyntaxTree::Call[message: { value: visit_method }]] } } }
1718

18-
assert_respond_to(visitor, visit_method)
19+
assert_respond_to(visitor, visit_method)
20+
end
1921
end
2022
end
2123

0 commit comments

Comments
 (0)