The Anh Tran wrote: > Hi, > > When porting from c++ to D, i encounter this strange discrimination: > 1. Built-in AA: > int[int] arr; > arr[123] += 12345; > arr[321]++; > > 2. Tango HashMap: > auto hm = new HashMap!(int, int)(); > hm[123] += 12345; // error not lvalue > hm[123]++; // error > > D document says current opIndexAssign does not work as lvalue. But why > can builtin AA can that? How can i copy builtin AA behaviour?
You can't. This is a hole in the language at the moment, hopefully solved by the introduction of ref returns (but that's in D 2.0 which you don't want to use at the moment.) > Forgive my noob, where is the place to ask question, report bug for Tango? You could try the Tango IRC channel: irc://irc.freenode.org/#d.tango That, or the Tango forums: http://dsource.org/projects/tango/forums You can report problems with Tango via the ticket system: http://dsource.org/projects/tango/report ("New Ticket" is down the bottom of the page.) > 1. I can't compile D code using tango hashmap in debug mode: > > import tango.util.container.HashMap; > void main() > { > auto hm = new HashMap!(uint, uint)(); > } > >> dmd -w -g -debug hello.d // error When posting problems with compiling something, it helps to mention the version of the compiler you're using, your platform, the version of Tango (in this case) and what the error actually is. > 2. Compile D code using Tango Regex by GDC emit lots of link errors. > > 3. Bug in Tango atomicIncrement, atomicDecrement: > > int task_done = 0; > atomicIncrement(task_done); > > That function is compiled in asm: > lock inc byte ptr[task_done]; > Which is wrong. It'll wrap to 0 at 255. > It should be: lock inc dword ptr[task_done]; > > 4. There is no atomicAdd(ref original, int newvalue) family. GCC > equivalence is __syn_fetch_and_add ... -- Daniel