Mercurial > projects > ldc
view runtime/internal/util/console.d @ 1418:f5f8c21ce6ef
Make "`aa[key]`" use the same runtime call as "`key in aa`". The runtime calls
these were using were different, but with equivalent definitions.
With `ldc -O3`, the following functions now all compile to the exact same code:
{{{
int[int] y;
void foo(int x) {
if (x in y) {
auto z = x in y;
sink(*z);
}
}
void bar(int x) {
if (x in y) {
sink(y[x]);
}
}
void baz(int x) {
if (auto p = x in y) {
sink(*p);
}
}
}}}
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Mon, 25 May 2009 12:50:40 +0200 |
parents | 44f08170f4ef |
children |
line wrap: on
line source
/******************************************************************************* copyright: Copyright (c) 2004 Tango group. All rights reserved license: BSD style: $(LICENSE) version: Initial release: July 2006 Various low-level console oriented utilities *******************************************************************************/ module util.console; private import util.string; version (Win32) { private extern (Windows) int GetStdHandle (int); private extern (Windows) int WriteFile (int, char*, int, int*, void*); } else version (Posix) { private extern (C) ptrdiff_t write (int, void*, size_t); } /+ // emit a char[] to the console. Note that Win32 does not handle utf8, but // then neither does fprintf (stderr). This will handle redirection though. // May need to remedy the utf8 issue int console (char[] s) { version (Win32) { int count; if (WriteFile (GetStdHandle(0xfffffff5), s.ptr, s.length, &count, null)) return count; return -1; } else version (Posix) { return write (2, s.ptr, s.length); } } // emit an integer to the console int console (uint i) { char[10] tmp = void; return console (intToUtf8 (tmp, i)); } +/ struct Console { Console opCall (char[] s) { version (Win32) { int count; WriteFile (GetStdHandle(0xfffffff5), s.ptr, s.length, &count, null); } else version (Posix) { write (2, s.ptr, s.length); } return *this; } // emit an integer to the console Console opCall (size_t i) { char[25] tmp = void; return console (intToUtf8 (tmp, i)); } } Console console;