@@ -103,10 +103,10 @@ function tree_mapreduce(
103103 if sharing && RT != Undefined
104104 id_map = allocate_id_map (tree, RT)
105105 reducer = TreeMapreducer (Val (2 ), id_map, f_leaf, f_branch, op, f_on_shared)
106- return reducer ( tree)
106+ return call_mapreducer (reducer, tree)
107107 else
108108 reducer = TreeMapreducer (Val (2 ), nothing , f_leaf, f_branch, op, f_on_shared)
109- return reducer ( tree)
109+ return call_mapreducer (reducer, tree)
110110 end
111111end
112112
@@ -121,29 +121,36 @@ struct TreeMapreducer{
121121 f_on_shared:: H
122122end
123123
124- function (mapreducer:: TreeMapreducer{2,Nothing} )( tree:: AbstractNode )
124+ function call_mapreducer (mapreducer:: TreeMapreducer{2,Nothing} , tree:: AbstractNode )
125125 if tree. degree == 0
126126 return mapreducer. f_leaf (tree)
127127 elseif tree. degree == 1
128- return mapreducer. op (mapreducer. f_branch (tree), mapreducer ( tree. l))
128+ return mapreducer. op (mapreducer. f_branch (tree), call_mapreducer (mapreducer, tree. l))
129129 else
130130 return mapreducer. op (
131- mapreducer. f_branch (tree), mapreducer (tree. l), mapreducer (tree. r)
131+ mapreducer. f_branch (tree),
132+ call_mapreducer (mapreducer, tree. l),
133+ call_mapreducer (mapreducer, tree. r),
132134 )
133135 end
134136end
135- function (mapreducer:: TreeMapreducer{2,Dict} )( tree:: AbstractNode )
137+ function call_mapreducer (mapreducer:: TreeMapreducer{2,<: Dict} , tree:: AbstractNode )
136138 key = objectid (tree)
137139 is_cached = haskey (mapreducer. id_map, key)
138140 if is_cached
139- return mapreducer. f_on_shared (@inbounds (mapreducer. id_map[key]), true )
141+ result = @inbounds (mapreducer. id_map[key])
142+ return mapreducer. f_on_shared (result, true )
140143 else
141144 result = if tree. degree == 0
142145 mapreducer. f_leaf (tree)
143146 elseif tree. degree == 1
144- mapreducer. op (mapreducer. f_branch (tree), mapreducer ( tree. l))
147+ mapreducer. op (mapreducer. f_branch (tree), call_mapreducer (mapreducer, tree. l))
145148 else
146- mapreducer. op (mapreducer. f_branch (tree), mapreducer (tree. l), mapreducer (tree. r))
149+ mapreducer. op (
150+ mapreducer. f_branch (tree),
151+ call_mapreducer (mapreducer, tree. l),
152+ call_mapreducer (mapreducer, tree. r),
153+ )
147154 end
148155 mapreducer. id_map[key] = result
149156 return mapreducer. f_on_shared (result, false )
0 commit comments