Mercurial > projects > ldc
annotate lphobos/std/format.d @ 1650:40bd4a0d4870
Update to work with LLVM 2.7.
Removed use of dyn_cast, llvm no compiles
without exceptions and rtti by
default. We do need exceptions for the libconfig stuff, but rtti isn't
necessary (anymore).
Debug info needs to be rewritten, as in LLVM 2.7 the format has
completely changed. To have something to look at while rewriting, the
old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means
that you have to define this to compile at the moment.
Updated tango 0.99.9 patch to include updated EH runtime code, which is
needed for LLVM 2.7 as well.
author | Tomas Lindquist Olsen |
---|---|
date | Wed, 19 May 2010 12:42:32 +0200 |
parents | eef8ac26c66c |
children |
rev | line source |
---|---|
662
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
2 // Written in the D programming language. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
3 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
4 /** |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
5 * This module implements the workhorse functionality for string and I/O formatting. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
6 * It's comparable to C99's vsprintf(). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
7 * |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
8 * Macros: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
9 * WIKI = Phobos/StdFormat |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
10 */ |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
11 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
12 /* |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
13 * Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
14 * Written by Walter Bright |
664
eef8ac26c66c
Some missed LLVMDC -> LDC.
Christian Kamm <kamm incasoftware de>
parents:
662
diff
changeset
|
15 * Modified for LDC by Tomas Lindquist Olsen |
662
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
16 * |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
17 * This software is provided 'as-is', without any express or implied |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
18 * warranty. In no event will the authors be held liable for any damages |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
19 * arising from the use of this software. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
20 * |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
21 * Permission is granted to anyone to use this software for any purpose, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
22 * including commercial applications, and to alter it and redistribute it |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
23 * freely, subject to the following restrictions: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
24 * |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
25 * o The origin of this software must not be misrepresented; you must not |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
26 * claim that you wrote the original software. If you use this software |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
27 * in a product, an acknowledgment in the product documentation would be |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
28 * appreciated but is not required. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
29 * o Altered source versions must be plainly marked as such, and must not |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
30 * be misrepresented as being the original software. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
31 * o This notice may not be removed or altered from any source |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
32 * distribution. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
33 */ |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
34 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
35 module std.format; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
36 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
37 //debug=format; // uncomment to turn on debugging printf's |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
38 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
39 import std.stdarg; // caller will need va_list |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
40 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
41 private import std.utf; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
42 private import std.c.stdlib; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
43 private import std.c.string; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
44 private import std.string; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
45 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
46 version (Windows) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
47 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
48 version (DigitalMars) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
49 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
50 version = DigitalMarsC; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
51 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
52 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
53 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
54 version (DigitalMarsC) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
55 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
56 // This is DMC's internal floating point formatting function |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
57 extern (C) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
58 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
59 extern char* function(int c, int flags, int precision, real* pdval, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
60 char* buf, int* psl, int width) __pfloatfmt; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
61 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
62 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
63 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
64 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
65 // Use C99 snprintf |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
66 extern (C) int snprintf(char* s, size_t n, char* format, ...); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
67 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
68 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
69 /********************************************************************** |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
70 * Signals a mismatch between a format and its corresponding argument. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
71 */ |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
72 class FormatError : Error |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
73 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
74 private: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
75 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
76 this() |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
77 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
78 super("std.format"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
79 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
80 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
81 this(char[] msg) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
82 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
83 super("std.format " ~ msg); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
84 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
85 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
86 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
87 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
88 enum Mangle : char |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
89 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
90 Tvoid = 'v', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
91 Tbool = 'b', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
92 Tbyte = 'g', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
93 Tubyte = 'h', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
94 Tshort = 's', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
95 Tushort = 't', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
96 Tint = 'i', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
97 Tuint = 'k', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
98 Tlong = 'l', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
99 Tulong = 'm', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
100 Tfloat = 'f', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
101 Tdouble = 'd', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
102 Treal = 'e', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
103 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
104 Tifloat = 'o', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
105 Tidouble = 'p', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
106 Tireal = 'j', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
107 Tcfloat = 'q', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
108 Tcdouble = 'r', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
109 Tcreal = 'c', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
110 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
111 Tchar = 'a', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
112 Twchar = 'u', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
113 Tdchar = 'w', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
114 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
115 Tarray = 'A', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
116 Tsarray = 'G', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
117 Taarray = 'H', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
118 Tpointer = 'P', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
119 Tfunction = 'F', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
120 Tident = 'I', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
121 Tclass = 'C', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
122 Tstruct = 'S', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
123 Tenum = 'E', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
124 Ttypedef = 'T', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
125 Tdelegate = 'D', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
126 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
127 Tconst = 'x', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
128 Tinvariant = 'y', |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
129 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
130 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
131 // return the TypeInfo for a primitive type and null otherwise. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
132 // This is required since for arrays of ints we only have the mangled |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
133 // char to work from. If arrays always subclassed TypeInfo_Array this |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
134 // routine could go away. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
135 private TypeInfo primitiveTypeInfo(Mangle m) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
136 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
137 TypeInfo ti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
138 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
139 switch (m) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
140 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
141 case Mangle.Tvoid: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
142 ti = typeid(void);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
143 case Mangle.Tbool: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
144 ti = typeid(bool);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
145 case Mangle.Tbyte: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
146 ti = typeid(byte);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
147 case Mangle.Tubyte: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
148 ti = typeid(ubyte);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
149 case Mangle.Tshort: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
150 ti = typeid(short);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
151 case Mangle.Tushort: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
152 ti = typeid(ushort);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
153 case Mangle.Tint: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
154 ti = typeid(int);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
155 case Mangle.Tuint: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
156 ti = typeid(uint);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
157 case Mangle.Tlong: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
158 ti = typeid(long);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
159 case Mangle.Tulong: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
160 ti = typeid(ulong);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
161 case Mangle.Tfloat: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
162 ti = typeid(float);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
163 case Mangle.Tdouble: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
164 ti = typeid(double);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
165 case Mangle.Treal: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
166 ti = typeid(real);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
167 case Mangle.Tifloat: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
168 ti = typeid(ifloat);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
169 case Mangle.Tidouble: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
170 ti = typeid(idouble);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
171 case Mangle.Tireal: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
172 ti = typeid(ireal);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
173 case Mangle.Tcfloat: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
174 ti = typeid(cfloat);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
175 case Mangle.Tcdouble: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
176 ti = typeid(cdouble);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
177 case Mangle.Tcreal: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
178 ti = typeid(creal);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
179 case Mangle.Tchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
180 ti = typeid(char);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
181 case Mangle.Twchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
182 ti = typeid(wchar);break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
183 case Mangle.Tdchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
184 ti = typeid(dchar); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
185 default: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
186 ti = null; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
187 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
188 return ti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
189 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
190 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
191 /************************************ |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
192 * Interprets variadic argument list pointed to by argptr whose types are given |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
193 * by arguments[], formats them according to embedded format strings in the |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
194 * variadic argument list, and sends the resulting characters to putc. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
195 * |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
196 * The variadic arguments are consumed in order. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
197 * Each is formatted into a sequence of chars, using the default format |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
198 * specification for its type, and the |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
199 * characters are sequentially passed to putc. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
200 * If a char[], wchar[], or dchar[] |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
201 * argument is encountered, it is interpreted as a format string. As many |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
202 * arguments as specified in the format string are consumed and formatted |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
203 * according to the format specifications in that string and passed to putc. If |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
204 * there are too few remaining arguments, a FormatError is thrown. If there are |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
205 * more remaining arguments than needed by the format specification, the default |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
206 * processing of arguments resumes until they are all consumed. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
207 * |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
208 * Params: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
209 * putc = Output is sent do this delegate, character by character. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
210 * arguments = Array of TypeInfo's, one for each argument to be formatted. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
211 * argptr = Points to variadic argument list. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
212 * |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
213 * Throws: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
214 * Mismatched arguments and formats result in a FormatError being thrown. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
215 * |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
216 * Format_String: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
217 * <a name="format-string">$(I Format strings)</a> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
218 * consist of characters interspersed with |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
219 * $(I format specifications). Characters are simply copied |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
220 * to the output (such as putc) after any necessary conversion |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
221 * to the corresponding UTF-8 sequence. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
222 * |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
223 * A $(I format specification) starts with a '%' character, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
224 * and has the following grammar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
225 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
226 <pre> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
227 $(I FormatSpecification): |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
228 $(B '%%') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
229 $(B '%') $(I Flags) $(I Width) $(I Precision) $(I FormatChar) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
230 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
231 $(I Flags): |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
232 $(I empty) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
233 $(B '-') $(I Flags) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
234 $(B '+') $(I Flags) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
235 $(B '#') $(I Flags) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
236 $(B '0') $(I Flags) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
237 $(B ' ') $(I Flags) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
238 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
239 $(I Width): |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
240 $(I empty) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
241 $(I Integer) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
242 $(B '*') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
243 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
244 $(I Precision): |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
245 $(I empty) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
246 $(B '.') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
247 $(B '.') $(I Integer) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
248 $(B '.*') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
249 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
250 $(I Integer): |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
251 $(I Digit) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
252 $(I Digit) $(I Integer) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
253 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
254 $(I Digit): |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
255 $(B '0') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
256 $(B '1') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
257 $(B '2') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
258 $(B '3') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
259 $(B '4') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
260 $(B '5') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
261 $(B '6') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
262 $(B '7') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
263 $(B '8') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
264 $(B '9') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
265 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
266 $(I FormatChar): |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
267 $(B 's') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
268 $(B 'b') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
269 $(B 'd') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
270 $(B 'o') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
271 $(B 'x') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
272 $(B 'X') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
273 $(B 'e') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
274 $(B 'E') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
275 $(B 'f') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
276 $(B 'F') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
277 $(B 'g') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
278 $(B 'G') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
279 $(B 'a') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
280 $(B 'A') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
281 </pre> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
282 <dl> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
283 <dt>$(I Flags) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
284 <dl> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
285 <dt>$(B '-') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
286 <dd> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
287 Left justify the result in the field. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
288 It overrides any $(B 0) flag. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
289 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
290 <dt>$(B '+') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
291 <dd>Prefix positive numbers in a signed conversion with a $(B +). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
292 It overrides any $(I space) flag. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
293 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
294 <dt>$(B '#') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
295 <dd>Use alternative formatting: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
296 <dl> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
297 <dt>For $(B 'o'): |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
298 <dd> Add to precision as necessary so that the first digit |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
299 of the octal formatting is a '0', even if both the argument |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
300 and the $(I Precision) are zero. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
301 <dt> For $(B 'x') ($(B 'X')): |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
302 <dd> If non-zero, prefix result with $(B 0x) ($(B 0X)). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
303 <dt> For floating point formatting: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
304 <dd> Always insert the decimal point. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
305 <dt> For $(B 'g') ($(B 'G')): |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
306 <dd> Do not elide trailing zeros. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
307 </dl> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
308 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
309 <dt>$(B '0') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
310 <dd> For integer and floating point formatting when not nan or |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
311 infinity, use leading zeros |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
312 to pad rather than spaces. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
313 Ignore if there's a $(I Precision). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
314 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
315 <dt>$(B ' ') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
316 <dd>Prefix positive numbers in a signed conversion with a space. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
317 </dl> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
318 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
319 <dt>$(I Width) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
320 <dd> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
321 Specifies the minimum field width. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
322 If the width is a $(B *), the next argument, which must be |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
323 of type $(B int), is taken as the width. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
324 If the width is negative, it is as if the $(B -) was given |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
325 as a $(I Flags) character. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
326 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
327 <dt>$(I Precision) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
328 <dd> Gives the precision for numeric conversions. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
329 If the precision is a $(B *), the next argument, which must be |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
330 of type $(B int), is taken as the precision. If it is negative, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
331 it is as if there was no $(I Precision). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
332 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
333 <dt>$(I FormatChar) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
334 <dd> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
335 <dl> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
336 <dt>$(B 's') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
337 <dd>The corresponding argument is formatted in a manner consistent |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
338 with its type: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
339 <dl> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
340 <dt>$(B bool) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
341 <dd>The result is <tt>'true'</tt> or <tt>'false'</tt>. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
342 <dt>integral types |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
343 <dd>The $(B %d) format is used. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
344 <dt>floating point types |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
345 <dd>The $(B %g) format is used. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
346 <dt>string types |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
347 <dd>The result is the string converted to UTF-8. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
348 A $(I Precision) specifies the maximum number of characters |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
349 to use in the result. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
350 <dt>classes derived from $(B Object) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
351 <dd>The result is the string returned from the class instance's |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
352 $(B .toString()) method. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
353 A $(I Precision) specifies the maximum number of characters |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
354 to use in the result. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
355 <dt>non-string static and dynamic arrays |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
356 <dd>The result is [s<sub>0</sub>, s<sub>1</sub>, ...] |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
357 where s<sub>k</sub> is the kth element |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
358 formatted with the default format. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
359 </dl> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
360 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
361 <dt>$(B 'b','d','o','x','X') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
362 <dd> The corresponding argument must be an integral type |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
363 and is formatted as an integer. If the argument is a signed type |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
364 and the $(I FormatChar) is $(B d) it is converted to |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
365 a signed string of characters, otherwise it is treated as |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
366 unsigned. An argument of type $(B bool) is formatted as '1' |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
367 or '0'. The base used is binary for $(B b), octal for $(B o), |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
368 decimal |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
369 for $(B d), and hexadecimal for $(B x) or $(B X). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
370 $(B x) formats using lower case letters, $(B X) uppercase. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
371 If there are fewer resulting digits than the $(I Precision), |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
372 leading zeros are used as necessary. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
373 If the $(I Precision) is 0 and the number is 0, no digits |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
374 result. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
375 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
376 <dt>$(B 'e','E') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
377 <dd> A floating point number is formatted as one digit before |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
378 the decimal point, $(I Precision) digits after, the $(I FormatChar), |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
379 ±, followed by at least a two digit exponent: $(I d.dddddd)e$(I ±dd). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
380 If there is no $(I Precision), six |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
381 digits are generated after the decimal point. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
382 If the $(I Precision) is 0, no decimal point is generated. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
383 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
384 <dt>$(B 'f','F') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
385 <dd> A floating point number is formatted in decimal notation. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
386 The $(I Precision) specifies the number of digits generated |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
387 after the decimal point. It defaults to six. At least one digit |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
388 is generated before the decimal point. If the $(I Precision) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
389 is zero, no decimal point is generated. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
390 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
391 <dt>$(B 'g','G') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
392 <dd> A floating point number is formatted in either $(B e) or |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
393 $(B f) format for $(B g); $(B E) or $(B F) format for |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
394 $(B G). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
395 The $(B f) format is used if the exponent for an $(B e) format |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
396 is greater than -5 and less than the $(I Precision). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
397 The $(I Precision) specifies the number of significant |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
398 digits, and defaults to six. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
399 Trailing zeros are elided after the decimal point, if the fractional |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
400 part is zero then no decimal point is generated. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
401 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
402 <dt>$(B 'a','A') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
403 <dd> A floating point number is formatted in hexadecimal |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
404 exponential notation 0x$(I h.hhhhhh)p$(I ±d). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
405 There is one hexadecimal digit before the decimal point, and as |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
406 many after as specified by the $(I Precision). |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
407 If the $(I Precision) is zero, no decimal point is generated. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
408 If there is no $(I Precision), as many hexadecimal digits as |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
409 necessary to exactly represent the mantissa are generated. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
410 The exponent is written in as few digits as possible, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
411 but at least one, is in decimal, and represents a power of 2 as in |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
412 $(I h.hhhhhh)*2<sup>$(I ±d)</sup>. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
413 The exponent for zero is zero. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
414 The hexadecimal digits, x and p are in upper case if the |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
415 $(I FormatChar) is upper case. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
416 </dl> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
417 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
418 Floating point NaN's are formatted as $(B nan) if the |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
419 $(I FormatChar) is lower case, or $(B NAN) if upper. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
420 Floating point infinities are formatted as $(B inf) or |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
421 $(B infinity) if the |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
422 $(I FormatChar) is lower case, or $(B INF) or $(B INFINITY) if upper. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
423 </dl> |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
424 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
425 Example: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
426 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
427 ------------------------- |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
428 import std.c.stdio; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
429 import std.format; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
430 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
431 void formattedPrint(...) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
432 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
433 void putc(char c) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
434 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
435 fputc(c, stdout); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
436 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
437 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
438 std.format.doFormat(&putc, _arguments, _argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
439 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
440 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
441 ... |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
442 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
443 int x = 27; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
444 // prints 'The answer is 27:6' |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
445 formattedPrint("The answer is %s:", x, 6); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
446 ------------------------ |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
447 */ |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
448 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
449 void doFormat(void delegate(dchar) putc, TypeInfo[] arguments, void* argptr) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
450 { //printf("doFormat(...)\n"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
451 int j; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
452 TypeInfo ti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
453 Mangle m; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
454 uint flags; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
455 int field_width; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
456 int precision; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
457 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
458 enum : uint |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
459 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
460 FLdash = 1, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
461 FLplus = 2, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
462 FLspace = 4, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
463 FLhash = 8, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
464 FLlngdbl = 0x20, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
465 FL0pad = 0x40, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
466 FLprecision = 0x80, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
467 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
468 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
469 static TypeInfo skipCI(TypeInfo valti) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
470 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
471 while (1) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
472 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
473 if (valti.classinfo.name.length == 18 && |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
474 valti.classinfo.name[9..18] == "Invariant") |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
475 valti = (cast(TypeInfo_Invariant)valti).next; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
476 else if (valti.classinfo.name.length == 14 && |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
477 valti.classinfo.name[9..14] == "Const") |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
478 valti = (cast(TypeInfo_Const)valti).next; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
479 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
480 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
481 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
482 return valti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
483 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
484 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
485 void formatArg(char fc) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
486 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
487 bool vbit; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
488 ulong vnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
489 char vchar; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
490 dchar vdchar; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
491 Object vobject; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
492 real vreal; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
493 creal vcreal; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
494 Mangle m2; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
495 int signed = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
496 uint base = 10; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
497 int uc; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
498 char[ulong.sizeof * 8] tmpbuf; // long enough to print long in binary |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
499 char* prefix = ""; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
500 string s; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
501 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
502 void putstr(char[] s) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
503 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
504 //printf("flags = 0x%x\n", flags); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
505 int prepad = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
506 int postpad = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
507 int padding = field_width - (strlen(prefix) + s.length); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
508 if (padding > 0) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
509 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
510 if (flags & FLdash) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
511 postpad = padding; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
512 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
513 prepad = padding; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
514 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
515 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
516 if (flags & FL0pad) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
517 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
518 while (*prefix) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
519 putc(*prefix++); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
520 while (prepad--) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
521 putc('0'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
522 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
523 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
524 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
525 while (prepad--) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
526 putc(' '); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
527 while (*prefix) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
528 putc(*prefix++); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
529 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
530 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
531 foreach (dchar c; s) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
532 putc(c); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
533 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
534 while (postpad--) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
535 putc(' '); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
536 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
537 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
538 void putreal(real v) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
539 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
540 //printf("putreal %Lg\n", vreal); // no 80 bit float |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
541 //printf("putreal %g\n", vreal); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
542 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
543 switch (fc) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
544 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
545 case 's': |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
546 fc = 'g'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
547 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
548 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
549 case 'f', 'F', 'e', 'E', 'g', 'G', 'a', 'A': |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
550 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
551 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
552 default: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
553 //printf("fc = '%c'\n", fc); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
554 Lerror: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
555 throw new FormatError("floating"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
556 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
557 version (DigitalMarsC) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
558 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
559 int sl; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
560 char[] fbuf = tmpbuf; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
561 if (!(flags & FLprecision)) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
562 precision = 6; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
563 while (1) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
564 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
565 sl = fbuf.length; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
566 prefix = (*__pfloatfmt)(fc, flags | FLlngdbl, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
567 precision, &v, cast(char*)fbuf, &sl, field_width); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
568 if (sl != -1) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
569 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
570 sl = fbuf.length * 2; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
571 fbuf = (cast(char*)/*alloca*/malloc(sl * char.sizeof))[0 .. sl]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
572 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
573 putstr(fbuf[0 .. sl]); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
574 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
575 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
576 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
577 int sl; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
578 char[] fbuf = tmpbuf; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
579 char[12] format; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
580 format[0] = '%'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
581 int i = 1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
582 if (flags & FLdash) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
583 format[i++] = '-'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
584 if (flags & FLplus) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
585 format[i++] = '+'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
586 if (flags & FLspace) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
587 format[i++] = ' '; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
588 if (flags & FLhash) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
589 format[i++] = '#'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
590 if (flags & FL0pad) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
591 format[i++] = '0'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
592 format[i + 0] = '*'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
593 format[i + 1] = '.'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
594 format[i + 2] = '*'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
595 format[i + 3] = fc; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
596 format[i + 4] = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
597 //format[i + 3] = 'L'; // no 80 bit yet |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
598 //format[i + 4] = fc; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
599 //format[i + 5] = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
600 if (!(flags & FLprecision)) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
601 precision = -1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
602 while (1) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
603 { int n; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
604 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
605 sl = fbuf.length; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
606 n = snprintf(fbuf.ptr, sl, format.ptr, field_width, precision, v); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
607 //printf("format = '%s', n = %d\n", cast(char*)format, n); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
608 if (n >= 0 && n < sl) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
609 { sl = n; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
610 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
611 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
612 if (n < 0) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
613 sl = sl * 2; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
614 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
615 sl = n + 1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
616 fbuf = (cast(char*)/*alloca*/malloc(sl * char.sizeof))[0 .. sl]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
617 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
618 putstr(fbuf[0 .. sl]); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
619 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
620 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
621 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
622 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
623 static Mangle getMan(TypeInfo ti) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
624 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
625 auto m = cast(Mangle)ti.classinfo.name[9]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
626 if (ti.classinfo.name.length == 20 && |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
627 ti.classinfo.name[9..20] == "StaticArray") |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
628 m = cast(Mangle)'G'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
629 return m; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
630 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
631 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
632 void putArray(void* p, size_t len, TypeInfo valti) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
633 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
634 //printf("\nputArray(len = %u), tsize = %u\n", len, valti.tsize()); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
635 putc('['); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
636 valti = skipCI(valti); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
637 size_t tsize = valti.tsize(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
638 auto argptrSave = argptr; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
639 auto tiSave = ti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
640 auto mSave = m; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
641 ti = valti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
642 auto className = valti.classinfo.name; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
643 printf("\n%.*s\n", className.length, className.ptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
644 m = getMan(valti); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
645 while (len--) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
646 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
647 //doFormat(putc, (&valti)[0 .. 1], p); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
648 argptr = p; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
649 formatArg('s'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
650 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
651 p += tsize; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
652 if (len > 0) putc(','); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
653 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
654 m = mSave; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
655 ti = tiSave; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
656 argptr = argptrSave; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
657 putc(']'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
658 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
659 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
660 void putAArray(ubyte[long] vaa, TypeInfo valti, TypeInfo keyti) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
661 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
662 putc('['); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
663 bool comma=false; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
664 auto argptrSave = argptr; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
665 auto tiSave = ti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
666 auto mSave = m; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
667 valti = skipCI(valti); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
668 keyti = skipCI(keyti); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
669 foreach(inout fakevalue; vaa) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
670 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
671 if (comma) putc(','); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
672 comma = true; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
673 // the key comes before the value |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
674 ubyte* key = &fakevalue - long.sizeof; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
675 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
676 //doFormat(putc, (&keyti)[0..1], key); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
677 argptr = key; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
678 ti = keyti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
679 m = getMan(keyti); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
680 formatArg('s'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
681 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
682 putc(':'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
683 auto keysize = keyti.tsize; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
684 keysize = (keysize + 3) & ~3; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
685 ubyte* value = key + keysize; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
686 //doFormat(putc, (&valti)[0..1], value); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
687 argptr = value; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
688 ti = valti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
689 m = getMan(valti); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
690 formatArg('s'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
691 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
692 m = mSave; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
693 ti = tiSave; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
694 argptr = argptrSave; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
695 putc(']'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
696 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
697 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
698 //printf("formatArg(fc = '%c', m = '%c')\n", fc, m); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
699 switch (m) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
700 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
701 case Mangle.Tbool: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
702 vbit = va_arg!(bool)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
703 if (fc != 's') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
704 { vnumber = vbit; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
705 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
706 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
707 putstr(vbit ? "true" : "false"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
708 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
709 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
710 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
711 case Mangle.Tchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
712 vchar = va_arg!(char)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
713 if (fc != 's') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
714 { vnumber = vchar; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
715 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
716 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
717 L2: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
718 putstr((&vchar)[0 .. 1]); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
719 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
720 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
721 case Mangle.Twchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
722 vdchar = va_arg!(wchar)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
723 goto L1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
724 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
725 case Mangle.Tdchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
726 vdchar = va_arg!(dchar)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
727 L1: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
728 if (fc != 's') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
729 { vnumber = vdchar; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
730 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
731 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
732 if (vdchar <= 0x7F) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
733 { vchar = cast(char)vdchar; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
734 goto L2; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
735 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
736 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
737 { if (!isValidDchar(vdchar)) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
738 throw new UtfException("invalid dchar in format", 0); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
739 char[4] vbuf; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
740 putstr(toUTF8(vbuf, vdchar)); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
741 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
742 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
743 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
744 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
745 case Mangle.Tbyte: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
746 signed = 1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
747 vnumber = va_arg!(byte)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
748 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
749 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
750 case Mangle.Tubyte: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
751 vnumber = va_arg!(ubyte)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
752 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
753 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
754 case Mangle.Tshort: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
755 signed = 1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
756 vnumber = va_arg!(short)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
757 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
758 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
759 case Mangle.Tushort: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
760 vnumber = va_arg!(ushort)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
761 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
762 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
763 case Mangle.Tint: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
764 signed = 1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
765 vnumber = va_arg!(int)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
766 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
767 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
768 case Mangle.Tuint: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
769 Luint: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
770 vnumber = va_arg!(uint)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
771 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
772 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
773 case Mangle.Tlong: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
774 signed = 1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
775 vnumber = cast(ulong)va_arg!(long)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
776 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
777 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
778 case Mangle.Tulong: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
779 Lulong: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
780 vnumber = va_arg!(ulong)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
781 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
782 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
783 case Mangle.Tclass: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
784 vobject = va_arg!(Object)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
785 if (vobject is null) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
786 s = "null"; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
787 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
788 s = vobject.toString(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
789 goto Lputstr; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
790 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
791 case Mangle.Tpointer: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
792 vnumber = cast(ulong)va_arg!(void*)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
793 uc = 1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
794 flags |= FL0pad; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
795 if (!(flags & FLprecision)) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
796 { flags |= FLprecision; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
797 precision = (void*).sizeof; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
798 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
799 base = 16; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
800 goto Lnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
801 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
802 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
803 case Mangle.Tfloat: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
804 case Mangle.Tifloat: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
805 if (fc == 'x' || fc == 'X') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
806 goto Luint; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
807 vreal = va_arg!(float)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
808 goto Lreal; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
809 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
810 case Mangle.Tdouble: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
811 case Mangle.Tidouble: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
812 if (fc == 'x' || fc == 'X') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
813 goto Lulong; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
814 vreal = va_arg!(double)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
815 goto Lreal; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
816 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
817 case Mangle.Treal: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
818 case Mangle.Tireal: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
819 vreal = va_arg!(real)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
820 goto Lreal; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
821 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
822 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
823 case Mangle.Tcfloat: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
824 vcreal = va_arg!(cfloat)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
825 goto Lcomplex; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
826 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
827 case Mangle.Tcdouble: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
828 vcreal = va_arg!(cdouble)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
829 goto Lcomplex; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
830 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
831 case Mangle.Tcreal: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
832 vcreal = va_arg!(creal)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
833 goto Lcomplex; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
834 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
835 case Mangle.Tsarray: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
836 //printf("static array\n"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
837 putArray(argptr, (cast(TypeInfo_StaticArray)ti).len, (cast(TypeInfo_StaticArray)ti).next); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
838 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
839 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
840 case Mangle.Tarray: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
841 //printf("dynamic array\n"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
842 int mi = 10; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
843 if (ti.classinfo.name.length == 14 && |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
844 ti.classinfo.name[9..14] == "Array") |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
845 { // array of non-primitive types |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
846 TypeInfo tn = (cast(TypeInfo_Array)ti).next; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
847 tn = skipCI(tn); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
848 switch (cast(Mangle)tn.classinfo.name[9]) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
849 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
850 case Mangle.Tchar: goto LarrayChar; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
851 case Mangle.Twchar: goto LarrayWchar; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
852 case Mangle.Tdchar: goto LarrayDchar; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
853 default: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
854 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
855 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
856 void[] va = va_arg!(void[])(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
857 putArray(va.ptr, va.length, tn); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
858 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
859 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
860 if (ti.classinfo.name.length == 25 && |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
861 ti.classinfo.name[9..25] == "AssociativeArray") |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
862 { // associative array |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
863 ubyte[long] vaa = va_arg!(ubyte[long])(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
864 putAArray(vaa, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
865 (cast(TypeInfo_AssociativeArray)ti).next, |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
866 (cast(TypeInfo_AssociativeArray)ti).key); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
867 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
868 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
869 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
870 //printf("primitive type\n"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
871 while (1) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
872 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
873 m2 = cast(Mangle)ti.classinfo.name[mi]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
874 switch (m2) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
875 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
876 case Mangle.Tchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
877 LarrayChar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
878 s = va_arg!(char[])(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
879 goto Lputstr; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
880 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
881 case Mangle.Twchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
882 LarrayWchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
883 wchar[] sw = va_arg!(wchar[])(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
884 s = toUTF8(sw); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
885 goto Lputstr; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
886 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
887 case Mangle.Tdchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
888 LarrayDchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
889 dchar[] sd = va_arg!(dchar[])(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
890 s = toUTF8(sd); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
891 Lputstr: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
892 if (fc != 's') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
893 throw new FormatError("string"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
894 if (flags & FLprecision && precision < s.length) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
895 s = s[0 .. precision]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
896 putstr(s); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
897 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
898 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
899 case Mangle.Tconst: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
900 case Mangle.Tinvariant: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
901 mi++; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
902 continue; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
903 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
904 default: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
905 //printf("primitive type default handling\n"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
906 TypeInfo ti2 = primitiveTypeInfo(m2); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
907 if (!ti2) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
908 goto Lerror; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
909 void[] va = va_arg!(void[])(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
910 putArray(va.ptr, va.length, ti2); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
911 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
912 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
913 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
914 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
915 case Mangle.Ttypedef: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
916 ti = (cast(TypeInfo_Typedef)ti).base; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
917 m = cast(Mangle)ti.classinfo.name[9]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
918 formatArg(fc); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
919 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
920 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
921 case Mangle.Tenum: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
922 ti = (cast(TypeInfo_Enum)ti).base; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
923 m = cast(Mangle)ti.classinfo.name[9]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
924 formatArg(fc); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
925 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
926 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
927 case Mangle.Tstruct: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
928 { TypeInfo_Struct tis = cast(TypeInfo_Struct)ti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
929 if (tis.xtoString is null) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
930 throw new FormatError("Can't convert " ~ tis.toString() ~ " to string: \"string toString()\" not defined"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
931 s = tis.xtoString(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
932 argptr += (tis.tsize() + 3) & ~3; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
933 goto Lputstr; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
934 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
935 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
936 default: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
937 goto Lerror; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
938 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
939 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
940 Lnumber: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
941 switch (fc) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
942 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
943 case 's': |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
944 case 'd': |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
945 if (signed) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
946 { if (cast(long)vnumber < 0) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
947 { prefix = "-"; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
948 vnumber = -vnumber; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
949 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
950 else if (flags & FLplus) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
951 prefix = "+"; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
952 else if (flags & FLspace) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
953 prefix = " "; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
954 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
955 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
956 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
957 case 'b': |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
958 signed = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
959 base = 2; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
960 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
961 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
962 case 'o': |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
963 signed = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
964 base = 8; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
965 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
966 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
967 case 'X': |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
968 uc = 1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
969 if (flags & FLhash && vnumber) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
970 prefix = "0X"; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
971 signed = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
972 base = 16; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
973 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
974 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
975 case 'x': |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
976 if (flags & FLhash && vnumber) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
977 prefix = "0x"; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
978 signed = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
979 base = 16; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
980 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
981 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
982 default: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
983 goto Lerror; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
984 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
985 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
986 if (!signed) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
987 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
988 switch (m) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
989 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
990 case Mangle.Tbyte: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
991 vnumber &= 0xFF; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
992 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
993 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
994 case Mangle.Tshort: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
995 vnumber &= 0xFFFF; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
996 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
997 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
998 case Mangle.Tint: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
999 vnumber &= 0xFFFFFFFF; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1000 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1001 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1002 default: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1003 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1004 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1005 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1006 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1007 if (flags & FLprecision && fc != 'p') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1008 flags &= ~FL0pad; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1009 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1010 if (vnumber < base) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1011 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1012 if (vnumber == 0 && precision == 0 && flags & FLprecision && |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1013 !(fc == 'o' && flags & FLhash)) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1014 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1015 putstr(null); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1016 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1017 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1018 if (precision == 0 || !(flags & FLprecision)) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1019 { vchar = cast(char)('0' + vnumber); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1020 if (vnumber < 10) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1021 vchar = cast(char)('0' + vnumber); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1022 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1023 vchar = cast(char)((uc ? 'A' - 10 : 'a' - 10) + vnumber); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1024 goto L2; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1025 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1026 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1027 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1028 int n = tmpbuf.length; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1029 char c; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1030 int hexoffset = uc ? ('A' - ('9' + 1)) : ('a' - ('9' + 1)); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1031 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1032 while (vnumber) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1033 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1034 c = cast(char)((vnumber % base) + '0'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1035 if (c > '9') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1036 c += hexoffset; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1037 vnumber /= base; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1038 tmpbuf[--n] = c; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1039 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1040 if (tmpbuf.length - n < precision && precision < tmpbuf.length) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1041 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1042 int m = tmpbuf.length - precision; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1043 tmpbuf[m .. n] = '0'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1044 n = m; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1045 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1046 else if (flags & FLhash && fc == 'o') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1047 prefix = "0"; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1048 putstr(tmpbuf[n .. tmpbuf.length]); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1049 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1050 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1051 Lreal: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1052 putreal(vreal); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1053 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1054 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1055 Lcomplex: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1056 putreal(vcreal.re); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1057 putc('+'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1058 putreal(vcreal.im); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1059 putc('i'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1060 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1061 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1062 Lerror: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1063 throw new FormatError("formatArg"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1064 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1065 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1066 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1067 //printf("arguments length: %u\n", arguments.length); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1068 for (j = 0; j < arguments.length; ) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1069 { ti = arguments[j++]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1070 //printf("test1: '%.*s' %d\n", ti.classinfo.name.length, ti.classinfo.name.ptr, ti.classinfo.name.length); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1071 //ti.print(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1072 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1073 flags = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1074 precision = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1075 field_width = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1076 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1077 ti = skipCI(ti); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1078 int mi = 9; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1079 do |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1080 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1081 if (ti.classinfo.name.length <= mi) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1082 goto Lerror; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1083 m = cast(Mangle)ti.classinfo.name[mi++]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1084 } while (m == Mangle.Tconst || m == Mangle.Tinvariant); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1085 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1086 if (m == Mangle.Tarray) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1087 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1088 if (ti.classinfo.name.length == 14 && |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1089 ti.classinfo.name[9..14] == "Array") |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1090 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1091 TypeInfo tn = (cast(TypeInfo_Array)ti).next; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1092 tn = skipCI(tn); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1093 switch (cast(Mangle)tn.classinfo.name[9]) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1094 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1095 case Mangle.Tchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1096 case Mangle.Twchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1097 case Mangle.Tdchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1098 ti = tn; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1099 mi = 9; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1100 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1101 default: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1102 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1103 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1104 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1105 L1: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1106 Mangle m2 = cast(Mangle)ti.classinfo.name[mi]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1107 string fmt; // format string |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1108 wstring wfmt; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1109 dstring dfmt; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1110 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1111 /* For performance reasons, this code takes advantage of the |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1112 * fact that most format strings will be ASCII, and that the |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1113 * format specifiers are always ASCII. This means we only need |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1114 * to deal with UTF in a couple of isolated spots. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1115 */ |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1116 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1117 switch (m2) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1118 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1119 case Mangle.Tchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1120 fmt = va_arg!(char[])(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1121 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1122 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1123 case Mangle.Twchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1124 wfmt = va_arg!(wchar[])(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1125 fmt = toUTF8(wfmt); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1126 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1127 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1128 case Mangle.Tdchar: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1129 dfmt = va_arg!(dchar[])(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1130 fmt = toUTF8(dfmt); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1131 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1132 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1133 case Mangle.Tconst: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1134 case Mangle.Tinvariant: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1135 mi++; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1136 goto L1; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1137 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1138 default: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1139 formatArg('s'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1140 continue; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1141 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1142 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1143 for (size_t i = 0; i < fmt.length; ) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1144 { dchar c = fmt[i++]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1145 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1146 dchar getFmtChar() |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1147 { // Valid format specifier characters will never be UTF |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1148 if (i == fmt.length) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1149 throw new FormatError("invalid specifier"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1150 return fmt[i++]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1151 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1152 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1153 int getFmtInt() |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1154 { int n; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1155 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1156 while (1) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1157 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1158 n = n * 10 + (c - '0'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1159 if (n < 0) // overflow |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1160 throw new FormatError("int overflow"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1161 c = getFmtChar(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1162 if (c < '0' || c > '9') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1163 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1164 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1165 return n; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1166 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1167 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1168 int getFmtStar() |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1169 { Mangle m; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1170 TypeInfo ti; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1171 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1172 if (j == arguments.length) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1173 throw new FormatError("too few arguments"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1174 ti = arguments[j++]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1175 m = cast(Mangle)ti.classinfo.name[9]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1176 if (m != Mangle.Tint) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1177 throw new FormatError("int argument expected"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1178 return va_arg!(int)(argptr); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1179 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1180 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1181 if (c != '%') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1182 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1183 if (c > 0x7F) // if UTF sequence |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1184 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1185 i--; // back up and decode UTF sequence |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1186 c = std.utf.decode(fmt, i); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1187 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1188 Lputc: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1189 putc(c); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1190 continue; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1191 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1192 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1193 // Get flags {-+ #} |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1194 flags = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1195 while (1) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1196 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1197 c = getFmtChar(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1198 switch (c) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1199 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1200 case '-': flags |= FLdash; continue; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1201 case '+': flags |= FLplus; continue; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1202 case ' ': flags |= FLspace; continue; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1203 case '#': flags |= FLhash; continue; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1204 case '0': flags |= FL0pad; continue; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1205 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1206 case '%': if (flags == 0) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1207 goto Lputc; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1208 default: break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1209 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1210 break; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1211 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1212 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1213 // Get field width |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1214 field_width = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1215 if (c == '*') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1216 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1217 field_width = getFmtStar(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1218 if (field_width < 0) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1219 { flags |= FLdash; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1220 field_width = -field_width; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1221 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1222 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1223 c = getFmtChar(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1224 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1225 else if (c >= '0' && c <= '9') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1226 field_width = getFmtInt(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1227 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1228 if (flags & FLplus) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1229 flags &= ~FLspace; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1230 if (flags & FLdash) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1231 flags &= ~FL0pad; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1232 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1233 // Get precision |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1234 precision = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1235 if (c == '.') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1236 { flags |= FLprecision; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1237 //flags &= ~FL0pad; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1238 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1239 c = getFmtChar(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1240 if (c == '*') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1241 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1242 precision = getFmtStar(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1243 if (precision < 0) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1244 { precision = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1245 flags &= ~FLprecision; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1246 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1247 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1248 c = getFmtChar(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1249 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1250 else if (c >= '0' && c <= '9') |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1251 precision = getFmtInt(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1252 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1253 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1254 if (j == arguments.length) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1255 goto Lerror; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1256 ti = arguments[j++]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1257 ti = skipCI(ti); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1258 mi = 9; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1259 do |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1260 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1261 m = cast(Mangle)ti.classinfo.name[mi++]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1262 } while (m == Mangle.Tconst || m == Mangle.Tinvariant); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1263 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1264 if (c > 0x7F) // if UTF sequence |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1265 goto Lerror; // format specifiers can't be UTF |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1266 formatArg(cast(char)c); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1267 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1268 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1269 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1270 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1271 formatArg('s'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1272 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1273 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1274 return; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1275 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1276 Lerror: |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1277 throw new FormatError(); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1278 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1279 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1280 /* ======================== Unit Tests ====================================== */ |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1281 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1282 unittest |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1283 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1284 int i; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1285 string s; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1286 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1287 debug(format) printf("std.format.format.unittest\n"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1288 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1289 s = std.string.format("hello world! %s %s ", true, 57, 1_000_000_000, 'x', " foo"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1290 assert(s == "hello world! true 57 1000000000x foo"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1291 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1292 s = std.string.format(1.67, " %A ", -1.28, float.nan); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1293 /* The host C library is used to format floats. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1294 * C99 doesn't specify what the hex digit before the decimal point |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1295 * is for %A. |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1296 */ |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1297 version (linux) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1298 assert(s == "1.67 -0XA.3D70A3D70A3D8P-3 nan"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1299 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1300 assert(s == "1.67 -0X1.47AE147AE147BP+0 nan"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1301 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1302 s = std.string.format("%x %X", 0x1234AF, 0xAFAFAFAF); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1303 assert(s == "1234af AFAFAFAF"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1304 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1305 s = std.string.format("%b %o", 0x1234AF, 0xAFAFAFAF); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1306 assert(s == "100100011010010101111 25753727657"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1307 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1308 s = std.string.format("%d %s", 0x1234AF, 0xAFAFAFAF); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1309 assert(s == "1193135 2947526575"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1310 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1311 s = std.string.format("%s", 1.2 + 3.4i); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1312 assert(s == "1.2+3.4i"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1313 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1314 s = std.string.format("%x %X", 1.32, 6.78f); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1315 assert(s == "3ff51eb851eb851f 40D8F5C3"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1316 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1317 s = std.string.format("%#06.*f",2,12.345); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1318 assert(s == "012.35"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1319 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1320 s = std.string.format("%#0*.*f",6,2,12.345); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1321 assert(s == "012.35"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1322 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1323 s = std.string.format("%7.4g:", 12.678); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1324 assert(s == " 12.68:"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1325 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1326 s = std.string.format("%7.4g:", 12.678L); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1327 assert(s == " 12.68:"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1328 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1329 s = std.string.format("%04f|%05d|%#05x|%#5x",-4.,-10,1,1); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1330 assert(s == "-4.000000|-0010|0x001| 0x1"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1331 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1332 i = -10; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1333 s = std.string.format("%d|%3d|%03d|%1d|%01.4f",i,i,i,i,cast(double) i); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1334 assert(s == "-10|-10|-10|-10|-10.0000"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1335 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1336 i = -5; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1337 s = std.string.format("%d|%3d|%03d|%1d|%01.4f",i,i,i,i,cast(double) i); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1338 assert(s == "-5| -5|-05|-5|-5.0000"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1339 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1340 i = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1341 s = std.string.format("%d|%3d|%03d|%1d|%01.4f",i,i,i,i,cast(double) i); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1342 assert(s == "0| 0|000|0|0.0000"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1343 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1344 i = 5; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1345 s = std.string.format("%d|%3d|%03d|%1d|%01.4f",i,i,i,i,cast(double) i); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1346 assert(s == "5| 5|005|5|5.0000"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1347 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1348 i = 10; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1349 s = std.string.format("%d|%3d|%03d|%1d|%01.4f",i,i,i,i,cast(double) i); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1350 assert(s == "10| 10|010|10|10.0000"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1351 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1352 s = std.string.format("%.0d", 0); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1353 assert(s == ""); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1354 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1355 s = std.string.format("%.g", .34); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1356 assert(s == "0.3"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1357 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1358 s = std.string.format("%.0g", .34); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1359 assert(s == "0.3"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1360 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1361 s = std.string.format("%.2g", .34); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1362 assert(s == "0.34"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1363 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1364 s = std.string.format("%0.0008f", 1e-08); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1365 assert(s == "0.00000001"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1366 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1367 s = std.string.format("%0.0008f", 1e-05); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1368 assert(s == "0.00001000"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1369 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1370 s = "helloworld"; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1371 string r; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1372 r = std.string.format("%.2s", s[0..5]); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1373 assert(r == "he"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1374 r = std.string.format("%.20s", s[0..5]); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1375 assert(r == "hello"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1376 r = std.string.format("%8s", s[0..5]); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1377 assert(r == " hello"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1378 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1379 byte[] arrbyte = new byte[4]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1380 arrbyte[0] = 100; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1381 arrbyte[1] = -99; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1382 arrbyte[3] = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1383 r = std.string.format(arrbyte); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1384 assert(r == "[100,-99,0,0]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1385 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1386 ubyte[] arrubyte = new ubyte[4]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1387 arrubyte[0] = 100; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1388 arrubyte[1] = 200; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1389 arrubyte[3] = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1390 r = std.string.format(arrubyte); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1391 assert(r == "[100,200,0,0]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1392 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1393 short[] arrshort = new short[4]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1394 arrshort[0] = 100; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1395 arrshort[1] = -999; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1396 arrshort[3] = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1397 r = std.string.format(arrshort); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1398 assert(r == "[100,-999,0,0]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1399 r = std.string.format("%s",arrshort); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1400 assert(r == "[100,-999,0,0]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1401 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1402 ushort[] arrushort = new ushort[4]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1403 arrushort[0] = 100; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1404 arrushort[1] = 20_000; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1405 arrushort[3] = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1406 r = std.string.format(arrushort); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1407 assert(r == "[100,20000,0,0]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1408 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1409 int[] arrint = new int[4]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1410 arrint[0] = 100; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1411 arrint[1] = -999; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1412 arrint[3] = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1413 r = std.string.format(arrint); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1414 assert(r == "[100,-999,0,0]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1415 r = std.string.format("%s",arrint); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1416 assert(r == "[100,-999,0,0]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1417 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1418 long[] arrlong = new long[4]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1419 arrlong[0] = 100; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1420 arrlong[1] = -999; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1421 arrlong[3] = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1422 r = std.string.format(arrlong); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1423 assert(r == "[100,-999,0,0]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1424 r = std.string.format("%s",arrlong); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1425 assert(r == "[100,-999,0,0]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1426 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1427 ulong[] arrulong = new ulong[4]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1428 arrulong[0] = 100; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1429 arrulong[1] = 999; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1430 arrulong[3] = 0; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1431 r = std.string.format(arrulong); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1432 assert(r == "[100,999,0,0]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1433 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1434 string[] arr2 = new string[4]; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1435 arr2[0] = "hello"; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1436 arr2[1] = "world"; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1437 arr2[3] = "foo"; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1438 r = std.string.format(arr2); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1439 assert(r == "[hello,world,,foo]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1440 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1441 r = std.string.format("%.8d", 7); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1442 assert(r == "00000007"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1443 r = std.string.format("%.8x", 10); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1444 assert(r == "0000000a"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1445 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1446 r = std.string.format("%-3d", 7); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1447 assert(r == "7 "); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1448 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1449 r = std.string.format("%*d", -3, 7); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1450 assert(r == "7 "); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1451 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1452 r = std.string.format("%.*d", -3, 7); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1453 assert(r == "7"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1454 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1455 typedef int myint; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1456 myint m = -7; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1457 r = std.string.format(m); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1458 assert(r == "-7"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1459 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1460 r = std.string.format("abc"c); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1461 assert(r == "abc"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1462 r = std.string.format("def"w); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1463 assert(r == "def"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1464 r = std.string.format("ghi"d); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1465 assert(r == "ghi"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1466 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1467 void* p = cast(void*)0xDEADBEEF; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1468 r = std.string.format(p); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1469 assert(r == "DEADBEEF"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1470 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1471 r = std.string.format("%#x", 0xabcd); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1472 assert(r == "0xabcd"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1473 r = std.string.format("%#X", 0xABCD); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1474 assert(r == "0XABCD"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1475 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1476 r = std.string.format("%#o", 012345); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1477 assert(r == "012345"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1478 r = std.string.format("%o", 9); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1479 assert(r == "11"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1480 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1481 r = std.string.format("%+d", 123); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1482 assert(r == "+123"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1483 r = std.string.format("%+d", -123); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1484 assert(r == "-123"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1485 r = std.string.format("% d", 123); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1486 assert(r == " 123"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1487 r = std.string.format("% d", -123); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1488 assert(r == "-123"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1489 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1490 r = std.string.format("%%"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1491 assert(r == "%"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1492 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1493 r = std.string.format("%d", true); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1494 assert(r == "1"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1495 r = std.string.format("%d", false); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1496 assert(r == "0"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1497 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1498 r = std.string.format("%d", 'a'); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1499 assert(r == "97"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1500 wchar wc = 'a'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1501 r = std.string.format("%d", wc); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1502 assert(r == "97"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1503 dchar dc = 'a'; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1504 r = std.string.format("%d", dc); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1505 assert(r == "97"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1506 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1507 byte b = byte.max; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1508 r = std.string.format("%x", b); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1509 assert(r == "7f"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1510 r = std.string.format("%x", ++b); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1511 assert(r == "80"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1512 r = std.string.format("%x", ++b); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1513 assert(r == "81"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1514 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1515 short sh = short.max; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1516 r = std.string.format("%x", sh); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1517 assert(r == "7fff"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1518 r = std.string.format("%x", ++sh); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1519 assert(r == "8000"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1520 r = std.string.format("%x", ++sh); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1521 assert(r == "8001"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1522 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1523 i = int.max; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1524 r = std.string.format("%x", i); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1525 assert(r == "7fffffff"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1526 r = std.string.format("%x", ++i); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1527 assert(r == "80000000"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1528 r = std.string.format("%x", ++i); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1529 assert(r == "80000001"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1530 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1531 r = std.string.format("%x", 10); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1532 assert(r == "a"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1533 r = std.string.format("%X", 10); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1534 assert(r == "A"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1535 r = std.string.format("%x", 15); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1536 assert(r == "f"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1537 r = std.string.format("%X", 15); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1538 assert(r == "F"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1539 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1540 Object c = null; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1541 r = std.string.format(c); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1542 assert(r == "null"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1543 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1544 enum TestEnum |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1545 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1546 Value1, Value2 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1547 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1548 r = std.string.format("%s", TestEnum.Value2); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1549 assert(r == "1"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1550 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1551 char[5][int] aa = ([3:"hello", 4:"betty"]); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1552 r = std.string.format("%s", aa.values); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1553 assert(r == "[[h,e,l,l,o],[b,e,t,t,y]]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1554 r = std.string.format("%s", aa); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1555 assert(r == "[3:[h,e,l,l,o],4:[b,e,t,t,y]]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1556 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1557 static const dchar[] ds = ['a','b']; |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1558 for (int j = 0; j < ds.length; ++j) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1559 { |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1560 r = std.string.format(" %d", ds[j]); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1561 if (j == 0) |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1562 assert(r == " 97"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1563 else |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1564 assert(r == " 98"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1565 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1566 |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1567 r = std.string.format(">%14d<, ", 15, [1,2,3]); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1568 assert(r == "> 15<, [1,2,3]"); |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1569 } |
88e23f8c2354
Applied downs' latest Phobos patch
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents:
131
diff
changeset
|
1570 |