On Sat, 14 Mar 2009 06:41:52 +0300, The Anh Tran <trthe...@gmail.com> 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?

--------------

Forgive my noob, where is the place to ask question, report bug for Tango?

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

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];


This one is fixed long ago, try updating your Tango installation.

4. There is no atomicAdd(ref original, int newvalue) family. GCC equivalence is __syn_fetch_and_add ...



Reply via email to