Download Reference Manual
The Developer's Library for D
About Wiki Forums Source Search Contact

Ticket #465: Layout.patch

File Layout.patch, 4.6 kB (added by mariusmuja, 1 year ago)
  • tango-0.99.3-src/tango/text/convert/Layout.d

    old new  
    2828 
    2929private import  tango.core.Exception; 
    3030 
     31private import  tango.core.Vararg; 
     32 
    3133private import  Unicode = tango.text.convert.Utf; 
    3234 
    3335private import  Float   = tango.text.convert.Float, 
     
    187189                assert (formatStr, "null format specifier"); 
    188190                assert (arguments.length < 64, "too many args in Layout.convert"); 
    189191 
    190         version (X86_64) 
    191                 { 
    192192                Arg[64] arglist = void; 
    193193                int[64] intargs = void; 
    194194                byte[64] byteargs = void; 
     
    201201 
    202202                foreach (i, arg; arguments) 
    203203                        { 
    204                         arglist[i] = args.ptr; 
     204                        version (X86_64) 
     205                            arglist[i] = args.ptr; 
     206                        else 
     207                            arglist[i] = args; 
     208                         
    205209                        /* Since floating point types don't live on 
    206210                         * the stack, they must be accessed by the 
    207211                         * correct type. */ 
     
    210214                               { 
    211215                               case TypeCode.FLOAT: 
    212216                                    floatargs[i] = va_arg!(float)(args); 
    213                                     arglist[i] = &floatargs[i]; 
     217                                    arglist[i] = cast(Arg) &floatargs[i]; 
    214218                                    converted = true; 
    215219                                    break; 
    216220 
    217221                               case TypeCode.DOUBLE: 
    218222                                    doubleargs[i] = va_arg!(double)(args); 
    219                                     arglist[i] = &doubleargs[i]; 
     223                                    arglist[i] = cast(Arg) &doubleargs[i]; 
    220224                                    converted = true; 
    221225                                    break; 
    222226 
    223227                               case TypeCode.REAL: 
    224228                                    realargs[i] = va_arg!(real)(args); 
    225                                     arglist[i] = &realargs[i]; 
     229                                    arglist[i] = cast(Arg) &realargs[i]; 
    226230                                    converted = true; 
    227231                                    break; 
    228232 
     
    235239                                  { 
    236240                                  case 1: 
    237241                                       byteargs[i] = va_arg!(byte)(args); 
    238                                        arglist[i] = &byteargs[i]; 
     242                                       arglist[i] = cast(Arg) &byteargs[i]; 
    239243                                       break; 
    240244                                  case 2: 
    241245                                       shortargs[i] = va_arg!(short)(args); 
    242                                        arglist[i] = &shortargs[i]; 
     246                                       arglist[i] = cast(Arg) &shortargs[i]; 
    243247                                       break; 
    244248                                  case 4: 
    245249                                       intargs[i] = va_arg!(int)(args); 
    246                                        arglist[i] = &intargs[i]; 
     250                                       arglist[i] = cast(Arg) &intargs[i]; 
    247251                                       break; 
    248252                                  case 8: 
    249253                                       longargs[i] = va_arg!(long)(args); 
    250                                        arglist[i] = &longargs[i]; 
     254                                       arglist[i] = cast(Arg) &longargs[i]; 
    251255                                       break; 
    252256                                  case 16: 
    253257                                       voidargs[i] = va_arg!(void[])(args); 
    254                                        arglist[i] = &voidargs[i]; 
     258                                       arglist[i] = cast(Arg) &voidargs[i]; 
    255259                                       break; 
    256260                                  default: 
    257261                                       assert (false, "Unknown size: " ~ Integer.toUtf8 (arg.tsize)); 
    258262                                  } 
    259263                           } 
    260264                        } 
    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                 } 
    271265                return parse (formatStr, arguments, arglist, sink); 
    272266        } 
    273267