 |
|
File Layout.patch, 4.6 kB
(added by mariusmuja, 1 year ago)
|
|
-
tango-0.99.3-src/tango/text/convert/Layout.d
| old |
new |
|
| 28 | 28 | |
|---|
| 29 | 29 | private import tango.core.Exception; |
|---|
| 30 | 30 | |
|---|
| | 31 | private import tango.core.Vararg; |
|---|
| | 32 | |
|---|
| 31 | 33 | private import Unicode = tango.text.convert.Utf; |
|---|
| 32 | 34 | |
|---|
| 33 | 35 | private import Float = tango.text.convert.Float, |
| … | … | |
| 187 | 189 | assert (formatStr, "null format specifier"); |
|---|
| 188 | 190 | assert (arguments.length < 64, "too many args in Layout.convert"); |
|---|
| 189 | 191 | |
|---|
| 190 | | version (X86_64) |
|---|
| 191 | | { |
|---|
| 192 | 192 | Arg[64] arglist = void; |
|---|
| 193 | 193 | int[64] intargs = void; |
|---|
| 194 | 194 | byte[64] byteargs = void; |
| … | … | |
| 201 | 201 | |
|---|
| 202 | 202 | foreach (i, arg; arguments) |
|---|
| 203 | 203 | { |
|---|
| 204 | | arglist[i] = args.ptr; |
|---|
| | 204 | version (X86_64) |
|---|
| | 205 | arglist[i] = args.ptr; |
|---|
| | 206 | else |
|---|
| | 207 | arglist[i] = args; |
|---|
| | 208 | |
|---|
| 205 | 209 | /* Since floating point types don't live on |
|---|
| 206 | 210 | * the stack, they must be accessed by the |
|---|
| 207 | 211 | * correct type. */ |
| … | … | |
| 210 | 214 | { |
|---|
| 211 | 215 | case TypeCode.FLOAT: |
|---|
| 212 | 216 | floatargs[i] = va_arg!(float)(args); |
|---|
| 213 | | arglist[i] = &floatargs[i]; |
|---|
| | 217 | arglist[i] = cast(Arg) &floatargs[i]; |
|---|
| 214 | 218 | converted = true; |
|---|
| 215 | 219 | break; |
|---|
| 216 | 220 | |
|---|
| 217 | 221 | case TypeCode.DOUBLE: |
|---|
| 218 | 222 | doubleargs[i] = va_arg!(double)(args); |
|---|
| 219 | | arglist[i] = &doubleargs[i]; |
|---|
| | 223 | arglist[i] = cast(Arg) &doubleargs[i]; |
|---|
| 220 | 224 | converted = true; |
|---|
| 221 | 225 | break; |
|---|
| 222 | 226 | |
|---|
| 223 | 227 | case TypeCode.REAL: |
|---|
| 224 | 228 | realargs[i] = va_arg!(real)(args); |
|---|
| 225 | | arglist[i] = &realargs[i]; |
|---|
| | 229 | arglist[i] = cast(Arg) &realargs[i]; |
|---|
| 226 | 230 | converted = true; |
|---|
| 227 | 231 | break; |
|---|
| 228 | 232 | |
| … | … | |
| 235 | 239 | { |
|---|
| 236 | 240 | case 1: |
|---|
| 237 | 241 | byteargs[i] = va_arg!(byte)(args); |
|---|
| 238 | | arglist[i] = &byteargs[i]; |
|---|
| | 242 | arglist[i] = cast(Arg) &byteargs[i]; |
|---|
| 239 | 243 | break; |
|---|
| 240 | 244 | case 2: |
|---|
| 241 | 245 | shortargs[i] = va_arg!(short)(args); |
|---|
| 242 | | arglist[i] = &shortargs[i]; |
|---|
| | 246 | arglist[i] = cast(Arg) &shortargs[i]; |
|---|
| 243 | 247 | break; |
|---|
| 244 | 248 | case 4: |
|---|
| 245 | 249 | intargs[i] = va_arg!(int)(args); |
|---|
| 246 | | arglist[i] = &intargs[i]; |
|---|
| | 250 | arglist[i] = cast(Arg) &intargs[i]; |
|---|
| 247 | 251 | break; |
|---|
| 248 | 252 | case 8: |
|---|
| 249 | 253 | longargs[i] = va_arg!(long)(args); |
|---|
| 250 | | arglist[i] = &longargs[i]; |
|---|
| | 254 | arglist[i] = cast(Arg) &longargs[i]; |
|---|
| 251 | 255 | break; |
|---|
| 252 | 256 | case 16: |
|---|
| 253 | 257 | voidargs[i] = va_arg!(void[])(args); |
|---|
| 254 | | arglist[i] = &voidargs[i]; |
|---|
| | 258 | arglist[i] = cast(Arg) &voidargs[i]; |
|---|
| 255 | 259 | break; |
|---|
| 256 | 260 | default: |
|---|
| 257 | 261 | assert (false, "Unknown size: " ~ Integer.toUtf8 (arg.tsize)); |
|---|
| 258 | 262 | } |
|---|
| 259 | 263 | } |
|---|
| 260 | 264 | } |
|---|
| 261 | | } |
|---|
| 262 | | else |
|---|
| 263 | | { |
|---|
| 264 | | Arg[64] arglist = void; |
|---|
| 265 | | foreach (i, arg; arguments) |
|---|
| 266 | | { |
|---|
| 267 | | arglist[i] = args; |
|---|
| 268 | | args += (arg.tsize + int.sizeof - 1) & ~ (int.sizeof - 1); |
|---|
| 269 | | } |
|---|
| 270 | | } |
|---|
| 271 | 265 | return parse (formatStr, arguments, arglist, sink); |
|---|
| 272 | 266 | } |
|---|
| 273 | 267 | |
Download in other formats:
|
 |
 |
|
 |
Copyright © 2006-2008 Tango. All Rights Reserved. | Page Width:
Static or
Dynamic