From 8ede799402f454b896447822aa0de95c3de05bea Mon Sep 17 00:00:00 2001 From: Miles Lubin Date: Mon, 10 Jun 2013 00:41:15 -0400 Subject: [PATCH] counting for preallocation in sum was broken with dependent iterates --- src/macros.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/macros.jl b/src/macros.jl index 83c826bde92..eaacbb3e6b5 100644 --- a/src/macros.jl +++ b/src/macros.jl @@ -118,13 +118,13 @@ function parseCurly(x::Expr, aff::Symbol, constantCoef) len = gensym() # precompute the number of elements to add # this is unncessary if we're just summing constants - preblock = quote $len = 1 end - for level in length(x.args):-1:3 - push!(preblock.args,:($len *= length($(x.args[level].args[2])))) + preblock = :($len += length($(x.args[length(x.args)].args[2]))) + for level in (length(x.args)-1):-1:3 + preblock = Expr(:for, x.args[level],preblock) end - push!(preblock.args,:( + preblock = :($len = 1; $preblock; sizehint($aff.vars,length($aff.vars)+$len); - sizehint($aff.coeffs,length($aff.coeffs)+$len))) + sizehint($aff.coeffs,length($aff.coeffs)+$len)) code = :($preblock;$code) end