digitalmars.D - Weird writeln behavior with associative arrays
- Jens Mueller <jens.k.mueller gmx.de> Oct 15 2010
- Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> Oct 15 2010
- Peter Alexander <peter.alexander.au gmail.com> Oct 15 2010
- "Denis Koroskin" <2korden gmail.com> Oct 15 2010
- "Masahiro Nakagawa" <repeatedly gmail.com> Oct 15 2010
Hi,
this program
import std.stdio;
void main() {
double[string] foo;
foo["test"] = 10;
foo["atadfest"] = 10;
// fails if foo.length > 1
writeln(foo);
}
fails with:
phobos/std/format.d(1088): Enforcement failed
Am I not allowed to to this? If I have only one element, then it works
as expected. If I change double to int, then I get "test:10 a:10". So
somehow only the first character is displayed. Maybe a phobos bug? Any
ideas?
I'm using Linux and latest dmd.
$ dmd | head -n1
Digital Mars D Compiler v2.049
Jens
Oct 15 2010
On 10/15/2010 10:04 AM, Jens Mueller wrote:Hi, this program import std.stdio; void main() { double[string] foo; foo["test"] = 10; foo["atadfest"] = 10; // fails if foo.length> 1 writeln(foo); } fails with: phobos/std/format.d(1088): Enforcement failed Am I not allowed to to this? If I have only one element, then it works as expected. If I change double to int, then I get "test:10 a:10". So somehow only the first character is displayed. Maybe a phobos bug? Any ideas? I'm using Linux and latest dmd. $ dmd | head -n1 Digital Mars D Compiler v2.049 Jens
This is odd. I can't reproduce your bug. Line 1088 is: enforce(f.spec == 's'); because indeed the default formatting specifier is "%s". Could there be a lack of sync between the compiled library and the import files? For example, if the layout of the internal format structure has changed, then f.spec will have the wrong offset. Andrei
Oct 15 2010
On 15/10/10 4:30 PM, Denis Koroskin wrote:On Fri, 15 Oct 2010 19:22:08 +0400, Andrei AlexandrescuThis is odd. I can't reproduce your bug. Line 1088 is: Andrei
I can reproduce it on Windows.
And I can reproduce on Mac OS X.
Oct 15 2010
On Fri, 15 Oct 2010 19:22:08 +0400, Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> wrote:On 10/15/2010 10:04 AM, Jens Mueller wrote:Hi, this program import std.stdio; void main() { double[string] foo; foo["test"] = 10; foo["atadfest"] = 10; // fails if foo.length> 1 writeln(foo); } fails with: phobos/std/format.d(1088): Enforcement failed Am I not allowed to to this? If I have only one element, then it works as expected. If I change double to int, then I get "test:10 a:10". So somehow only the first character is displayed. Maybe a phobos bug? Any ideas? I'm using Linux and latest dmd. $ dmd | head -n1 Digital Mars D Compiler v2.049 Jens
This is odd. I can't reproduce your bug. Line 1088 is: enforce(f.spec == 's'); because indeed the default formatting specifier is "%s". Could there be a lack of sync between the compiled library and the import files? For example, if the layout of the internal format structure has changed, then f.spec will have the wrong offset. Andrei
I can reproduce it on Windows.
Oct 15 2010
On Sat, 16 Oct 2010 00:04:22 +0900, Jens Mueller <jens.k.mueller gmx.de> wrote:Hi, this program import std.stdio; void main() { double[string] foo; foo["test"] = 10; foo["atadfest"] = 10; // fails if foo.length > 1 writeln(foo); } fails with: phobos/std/format.d(1088): Enforcement failed Am I not allowed to to this? If I have only one element, then it works as expected. If I change double to int, then I get "test:10 a:10". So somehow only the first character is displayed. Maybe a phobos bug? Any ideas? I'm using Linux and latest dmd. $ dmd | head -n1 Digital Mars D Compiler v2.049 Jens
SHOO has already fixed this problem. http://www.dsource.org/projects/phobos/changeset/2030
Oct 15 2010
On 10/15/10 14:21 CDT, Masahiro Nakagawa wrote:SHOO has already fixed this problem. http://www.dsource.org/projects/phobos/changeset/2030
Great, thanks Shoo and Masahiro. One thing - now firstTime is not needed anymore so it could go away. Andrei
Oct 15 2010









Peter Alexander <peter.alexander.au gmail.com> 