Thread overview |
---|
March 22, 2006 [Bug 66] New: Bad length in value of T[a..b] = scalar | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/bugzilla/show_bug.cgi?id=66 Summary: Bad length in value of T[a..b] = scalar Product: D Version: 0.150 Platform: PC URL: http://www.digitalmars.com/drn- bin/wwwnews?digitalmars.D.bugs/1725 OS/Version: Windows Status: NEW Keywords: wrong-code Severity: critical Priority: P2 Component: DMD AssignedTo: bugzilla@digitalmars.com ReportedBy: smjg@iname.com When a slice is assigned by a scalar, the value of the assignment expression has the length of the whole array, not that of the slice. ---------- import std.stdio; void show(int[] s) { foreach (int i; s) { writef("%d ", i); } writefln(); } void main() { int[] qwert = new int[6]; int[] yuiop; yuiop = qwert[2..5] = 3; show(yuiop); show(qwert[2..5] = 4); show(qwert[2..5]); show(qwert); show(yuiop[2..5] = qwert[1..4]); yuiop = qwert[2..5]; show(yuiop[1..3] = 6); writefln((yuiop[1..3] = 7).length); } ---------- Output: 3 3 3 0 0 0 4 4 4 0 0 0 4 4 4 0 0 4 4 4 0 0 4 4 6 6 4 3 Expected output: 3 3 3 4 4 4 4 4 4 0 0 4 4 4 0 0 4 4 6 6 2 A testcase (array_chain.d) is also included in my DStress contribution apparently still waiting to be added (see bug 63). -- |
April 03, 2006 [Bug 66] Bad length in value of T[a..b] = scalar | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/bugzilla/show_bug.cgi?id=66 deewiant@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED ------- Comment #1 from deewiant@gmail.com 2006-04-03 06:00 ------- Fixed in 0.151. Also, unless I'm mistaken, there is a bug in that test code: you have "show(yuiop[2..5] = qwert[1..4]);" at a point where yuiop's length is 3. Shouldn't that read "show(yuiop = qwert[1..4]);"? I get your expected output after that change. -- |
April 04, 2006 [Bug 66] Bad length in value of T[a..b] = scalar | ||||
---|---|---|---|---|
| ||||
Posted in reply to d-bugmail | http://d.puremagic.com/bugzilla/show_bug.cgi?id=66 ------- Comment #2 from smjg@iname.com 2006-04-04 06:22 ------- You're right that the testcase is buggy. However, the point was to compare the behaviour when copying a slice to a slice, whereas your proposed change turns it into a reference assignment. A better corretion is simply to add yuiop.length = 6; before that line. -- |
Copyright © 1999-2021 by the D Language Foundation