Skip to content

Commit edd1f65

Browse files
committed
InstructionTree: Make generation methods static
These methods don't use any state, so there's no reason to allocate an InstructionTree object. This likely cleans some memory leaks as the allocated objects weren't being freed in NodeBlockCanvas.
1 parent 8a12028 commit edd1f65

File tree

3 files changed

+9
-22
lines changed

3 files changed

+9
-22
lines changed

addons/block_code/instruction_tree/instruction_tree.gd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ class IDHandler:
4242
return unique_string
4343

4444

45-
func generate_text(root_node: TreeNode, start_depth: int = 0) -> String:
45+
static func generate_text(root_node: TreeNode, start_depth: int = 0) -> String:
4646
var out = PackedStringArray()
4747
generate_text_recursive(root_node, start_depth, out)
4848
return "".join(out)
4949

5050

51-
func generate_text_recursive(node: TreeNode, depth: int, out: PackedStringArray):
51+
static func generate_text_recursive(node: TreeNode, depth: int, out: PackedStringArray):
5252
if node.data != "":
5353
out.append("\t".repeat(depth) + node.data + "\n")
5454

addons/block_code/ui/block_canvas/node_block_canvas/node_block_canvas.gd

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func generate_script_from_current_window(bsd: BlockScriptData):
3636
script += _generate_script_from_entry_blocks(entry_statement, entry_blocks, init_func)
3737

3838
if init_func.children:
39-
script += InstructionTree.new().generate_text(init_func)
39+
script += InstructionTree.generate_text(init_func)
4040

4141
return script
4242

@@ -52,9 +52,8 @@ func _generate_script_from_entry_blocks(entry_statement: String, entry_blocks: A
5252
var next_block := entry_block.bottom_snap.get_snapped_block()
5353

5454
if next_block != null:
55-
var generator: InstructionTree = InstructionTree.new()
5655
var instruction_node: InstructionTree.TreeNode = next_block.get_instruction_node()
57-
var to_append := generator.generate_text(instruction_node, 1)
56+
var to_append := InstructionTree.generate_text(instruction_node, 1)
5857
script += to_append
5958
script += "\n"
6059
is_empty = false

tests/test_instruction_tree.gd

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,18 @@
11
extends GutTest
22
## Tests for InstructionTree
33

4-
var tree: InstructionTree = null
5-
6-
7-
func before_each():
8-
tree = InstructionTree.new()
9-
10-
11-
func after_each():
12-
if tree != null:
13-
tree.free()
14-
tree = null
15-
164

175
func test_single_node_text():
186
var node = InstructionTree.TreeNode.new("blah")
19-
var text: String = tree.generate_text(node, 0)
7+
var text: String = InstructionTree.generate_text(node, 0)
208
assert_eq(text, "blah\n")
219

2210

2311
func test_root_depth_text():
2412
var node = InstructionTree.TreeNode.new("blah")
2513
var text: String
2614
for depth in range(5):
27-
text = tree.generate_text(node, depth)
15+
text = InstructionTree.generate_text(node, depth)
2816
assert_eq(text, "\t".repeat(depth) + "blah\n")
2917

3018

@@ -34,7 +22,7 @@ func test_child_node_text():
3422
var grandchild = InstructionTree.TreeNode.new("grandchild")
3523
parent.add_child(child)
3624
child.add_child(grandchild)
37-
var text: String = tree.generate_text(parent, 0)
25+
var text: String = InstructionTree.generate_text(parent, 0)
3826
assert_eq(text, "parent\n\tchild\n\t\tgrandchild\n")
3927

4028

@@ -44,7 +32,7 @@ func test_sibling_node_text():
4432
var sister = InstructionTree.TreeNode.new("sister")
4533
node.next = brother
4634
brother.next = sister
47-
var text: String = tree.generate_text(node, 0)
35+
var text: String = InstructionTree.generate_text(node, 0)
4836
assert_eq(text, "node\nbrother\nsister\n")
4937

5038

@@ -63,5 +51,5 @@ func test_tree_node_text():
6351
root.next = sibling
6452
sibling.add_child(nephew)
6553

66-
var text: String = tree.generate_text(root, 0)
54+
var text: String = InstructionTree.generate_text(root, 0)
6755
assert_eq(text, "root\n\tchild1\n\t\tgrandchild\n\tchild2\nsibling\n\tnephew\n")

0 commit comments

Comments
 (0)