digitalmars.D.bugs - [Issue 2451] New: Cannot add a Variant to associative array
- d-bugmail puremagic.com Nov 13 2008
- d-bugmail puremagic.com Feb 22 2009
- d-bugmail puremagic.com Oct 11 2009
- d-bugmail puremagic.com Jan 15 2010
- d-bugmail puremagic.com Jan 15 2010
- d-bugmail puremagic.com Feb 15 2010
- d-bugmail puremagic.com May 22 2010
- d-bugmail puremagic.com Jun 14 2010
- d-bugmail puremagic.com Jun 14 2010
- d-bugmail puremagic.com Jun 23 2010
- d-bugmail puremagic.com Aug 19 2010
- d-bugmail puremagic.com Oct 19 2010
- d-bugmail puremagic.com Oct 19 2010
- d-bugmail puremagic.com Oct 20 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 Summary: Cannot add a Variant to associative array Product: D Version: 2.020 Platform: PC OS/Version: Windows Status: NEW Severity: critical Priority: P2 Component: Phobos AssignedTo: bugzilla digitalmars.com ReportedBy: samukha voliacable.com import std.variant; void main() { Variant[string] a; Variant v = 1; a["wut?"] = v; } ---- core.exception.ArrayBoundsException Test(23): Array index out of bounds Key type is irrelevant. --
Nov 13 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2451 ------- Comment #1 from andrei metalanguage.com 2009-02-22 09:39 ------- (In reply to comment #0)import std.variant; void main() { Variant[string] a; Variant v = 1; a["wut?"] = v; } ---- core.exception.ArrayBoundsException Test(23): Array index out of bounds Key type is irrelevant.
I reduced this further: struct Wyda { void opAssign(Wyda) {assert(&this !is null);} } void main() { Wyda[int] a; a[4] = Wyda(); } The assert will fail! Hash tables for value types that define opAssign seem to have a problem. --
Feb 22 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2451 Andrei Alexandrescu <andrei metalanguage.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED CC| |andrei metalanguage.com AssignedTo|nobody puremagic.com |andrei metalanguage.com -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 11 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2451 David Simcha <dsimcha yahoo.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dsimcha yahoo.com --- Comment #2 from David Simcha <dsimcha yahoo.com> 2010-01-15 12:20:57 PST --- Adding structs that use opAssign or postblit to an AA is broken. The following also produces a range violation: struct Foo { this(this){} } void main() { Foo[string] stuff; stuff["foo"] = Foo.init; } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 15 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 --- Comment #3 from Andrei Alexandrescu <andrei metalanguage.com> 2010-01-15 13:16:14 PST --- Perfect timing, thanks. I just ran into that but had no time to investigate. The type Tuple!(uint, "count", float, "distance")[uint] does not work, but the type S[uint] (where struct S { uint count; float distance; }) does work. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 15 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 GG <ggcoding gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ggcoding gmail.com --- Comment #4 from GG <ggcoding gmail.com> 2010-02-15 12:14:09 PST --- import std.variant; Variant[char[]][int] aa; aa[0]["a"] = "bla0"; aa[0]["b"] = 100; aa[1]["a"] = "bla1"; aa[1]["b"] = 200; With 32-bit Linux and dmd2.039 or dmd2.040 Compile : success Running : core.exception.RangeError test(30): Range violation -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 15 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 --- Comment #5 from Don <clugdbug yahoo.com.au> 2010-05-22 07:15:10 PDT --- I don't have a patch for this, but the direct reason for the observed behaviour is in expression.c, line 9023. If the type being inserted has an opAssign overload, then it drops out of AssignExp::semantic() immediately and discards the rest of the expression. This isn't a real patch, since it still doesn't call postblit. /* If it is an assignment from a 'foreign' type, * check for operator overloading. */ if (t1->ty == Tstruct) { StructDeclaration *sd = ((TypeStruct *)t1)->sym; if (op == TOKassign) { Expression *e = op_overload(sc); + if (e1->op==TOKindex && + ((IndexExp *)e1)->e1->type->toBasetype()->ty == Taarray) + { + // If it is an AA, the assignment + // should be treated as a function call (Bugzilla 2451) + } + else if (e) return e; } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 22 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |cristian zerobugs.org --- Comment #6 from Don <clugdbug yahoo.com.au> 2010-06-14 01:32:05 PDT --- *** Issue 2938 has been marked as a duplicate of this issue. *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 14 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bearophile_hugs eml.cc --- Comment #7 from Don <clugdbug yahoo.com.au> 2010-06-14 06:46:04 PDT --- *** Issue 4121 has been marked as a duplicate of this issue. *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 14 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 23 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 --- Comment #8 from Don <clugdbug yahoo.com.au> 2010-08-19 07:23:47 PDT --- Bug 3705 (Can't add structs with alias this to an AA) is probably related. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 19 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch --- Comment #9 from Don <clugdbug yahoo.com.au> 2010-10-19 15:07:26 PDT --- Here's a patch. Do the opAssign onto a temporary variable, then blit the temporary into the AA as normal. TEST CASE: struct Foo { int z = 3; void opAssign(Foo x) { z= 2;} } struct Foo2 { int z = 3; this(this){ z = 17; } } void main() { Foo[string] stuff; stuff["foo"] = Foo.init; assert(stuff["foo"].z == 2); Foo2[string] stuff2; Foo2 q; stuff2["dog"] = q; assert(stuff2["dog"].z == 17); } PATCH: expression.c line 8966, AssignExp::semantic. --------------------- /* If it is an assignment from a 'foreign' type, * check for operator overloading. */ if (t1->ty == Tstruct) { StructDeclaration *sd = ((TypeStruct *)t1)->sym; if (op == TOKassign) { Expression *e = op_overload(sc); + if (e && e1->op==TOKindex && + ((IndexExp *)e1)->e1->type->toBasetype()->ty == Taarray) + { + // Deal with AAs (Bugzilla 2451) + // Rewrite as: + // e1 = (typeof(e2) tmp = void, tmp = e2, tmp); + Identifier *id = Lexer::uniqueId("__aatmp"); + VarDeclaration *v = new VarDeclaration(loc, e2->type, + id, new VoidInitializer(NULL)); + v->storage_class |= STCctfe; + Expression *de = new DeclarationExp(loc, v); + VarExp *ve = new VarExp(loc, v); + AssignExp *ae = new AssignExp(loc, ve, e2); + e = ae->op_overload(sc); + e2 = new CommaExp(loc, new CommaExp(loc, de, e), ve); + e2 = e2->semantic(sc); + } + else if (e) return e; -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 19 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 Don <clugdbug yahoo.com.au> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ludwig informatik.uni-luebe | |ck.de --- Comment #10 from Don <clugdbug yahoo.com.au> 2010-10-19 15:13:39 PDT --- *** Issue 1886 has been marked as a duplicate of this issue. *** -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 19 2010
http://d.puremagic.com/issues/show_bug.cgi?id=2451 Walter Bright <bugzilla digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |bugzilla digitalmars.com Resolution| |FIXED --- Comment #11 from Walter Bright <bugzilla digitalmars.com> 2010-10-20 00:16:30 PDT --- http://www.dsource.org/projects/dmd/changeset/723 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 20 2010









d-bugmail puremagic.com 