When parsing manifests, we merge the main hostclass' code. Each merge creates a new BlockExpression containing the children from the old and new codes. This means we're copying the children from the already merged code N times and the array gets bigger each time. This accounts for about 11MB when running the many_modules benchmark with 100 iterations.
It seems like we should be appending the new code with the already merged code.