This optimize multiple Parser allocation, for instance nitunit or nitdoc that need to deal with each nitunit in the documentation.
usertime for `./nitdoc ../lib/core/`:
* before: 0m2.184s
* after: 0m1.788s (-18.1%)
Pull-Request: #1770
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>
redef fun build_reduce_table
do
var reduce_table = new Array[ReduceAction].with_capacity(1091)
- self.reduce_table = reduce_table
reduce_table.add new ReduceAction0(0)
reduce_table.add new ReduceAction1(0)
reduce_table.add new ReduceAction2(0)
reduce_table.add new ReduceAction1088(220)
reduce_table.add new ReduceAction473(221)
reduce_table.add new ReduceAction492(221)
+ return reduce_table
end
end
init
do
- build_reduce_table
+ self.reduce_table = once build_reduce_table
end
# Do a transition in the automata
end
private var reduce_table: Array[ReduceAction] is noinit
- private fun build_reduce_table is abstract
+ private fun build_reduce_table: Array[ReduceAction] is abstract
end
redef class Prod
redef fun build_reduce_table
do
var reduce_table = new Array[ReduceAction].with_capacity(${count(rules/rule)})
- self.reduce_table = reduce_table
$ foreach {rules/rule}
reduce_table.add new ReduceAction@index(@leftside)
$ end foreach
+ return reduce_table
end
end