http://d.puremagic.com/issues/show_bug.cgi?id=8011
Ary Borenszweig <a...@esperanto.org.ar> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |a...@esperanto.org.ar --- Comment #3 from Ary Borenszweig <a...@esperanto.org.ar> 2012-05-01 23:57:53 PDT --- (In reply to comment #1) > The root cause is in bigint.d, in the opUnary() function. BigInt uses an > underlying BigUint and maps the ++ and -- operators directly through to the > BigUint as addition and subtraction, respectively, disregarding the BigInt's > sign. However, this is wrong. Signed ++ and -- must be passed through as > subtraction and addition, respectively. > > I modified the function by commenting out the two errant lines and replacing > them each with a correct one. This is a proof-of-concept fix for the bug. > > // non-const unary operations > BigInt opUnary(string op)() if (op=="++" || op=="--") > { > static if (op=="++") > { > //data = BigUint.addOrSubInt(data, 1UL, false, sign); > data = BigUint.addOrSubInt(data, 1UL, sign ? true : false, sign); > return this; > } > else static if (op=="--") > { > //data = BigUint.addOrSubInt(data, 1UL, true, sign); > data = BigUint.addOrSubInt(data, 1UL, sign ? false : true, sign); > return this; > } > } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------