diff --git a/src/object.di b/src/object.di index 4215abee922..7c106843113 100644 --- a/src/object.di +++ b/src/object.di @@ -375,13 +375,25 @@ extern (C) alias AssociativeArray(Key, Value) = Value[Key]; -Value[Key] rehash(T : Value[Key], Value, Key)(auto ref T aa) +T rehash(T : Value[Key], Value, Key)(T aa) { _aaRehash(cast(void**)&aa, typeid(Value[Key])); return aa; } -Value[Key] rehash(T : Value[Key], Value, Key)(T* aa) +T rehash(T : Value[Key], Value, Key)(T* aa) +{ + _aaRehash(cast(void**)aa, typeid(Value[Key])); + return *aa; +} + +T rehash(T : shared Value[Key], Value, Key)(T aa) +{ + _aaRehash(cast(void**)&aa, typeid(Value[Key])); + return aa; +} + +T rehash(T : shared Value[Key], Value, Key)(T* aa) { _aaRehash(cast(void**)aa, typeid(Value[Key])); return *aa; diff --git a/src/object_.d b/src/object_.d index 426f1502295..25467a9434c 100644 --- a/src/object_.d +++ b/src/object_.d @@ -1963,13 +1963,25 @@ extern (C) alias AssociativeArray(Key, Value) = Value[Key]; -Value[Key] rehash(T : Value[Key], Value, Key)(auto ref T aa) +T rehash(T : Value[Key], Value, Key)(T aa) { _aaRehash(cast(void**)&aa, typeid(Value[Key])); return aa; } -Value[Key] rehash(T : Value[Key], Value, Key)(T* aa) +T rehash(T : Value[Key], Value, Key)(T* aa) +{ + _aaRehash(cast(void**)aa, typeid(Value[Key])); + return *aa; +} + +T rehash(T : shared Value[Key], Value, Key)(T aa) +{ + _aaRehash(cast(void**)&aa, typeid(Value[Key])); + return aa; +} + +T rehash(T : shared Value[Key], Value, Key)(T* aa) { _aaRehash(cast(void**)aa, typeid(Value[Key])); return *aa; @@ -2263,6 +2275,13 @@ pure nothrow unittest aa[1] = 1; } +pure nothrow unittest +{ + // bug 13078 + shared string[][string] map; + map.rehash; +} + deprecated("Please use destroy instead of clear.") alias destroy clear;