Wiki Roadmap Timeline Tickets New Ticket Source Search Help / Guide About Trac Login

Changeset 1177:a8b9fc41c34b

Show
Ignore:
Timestamp:
03/29/09 17:57:51 (3 years ago)
Author:
Frits van Bommel <fvbommel wxs.nl>
branch:
default
Message:

Fix #246 by running type->semantic() on parameters so tuples are expanded.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • dmd/func.c

    r1158 r1177  
    769769        } 
    770770    } 
     771 
     772#if IN_LLVM 
     773        // LDC make sure argument type is semanticed. 
     774        // Turns TypeTuple!(int, int) into two int parameters, for instance. 
     775        if (f->parameters) 
     776        { 
     777            for (size_t i = 0; i < Argument::dim(f->parameters); i++) 
     778        {   Argument *arg = (Argument *)Argument::getNth(f->parameters, i); 
     779                Type* nw = arg->type->semantic(0, sc); 
     780                if (arg->type != nw) { 
     781                    arg->type = nw; 
     782                    // Examine this index again. 
     783                    // This is important if it turned into a tuple. 
     784                    // In particular, the empty tuple should be handled or the 
     785                    // next parameter will be skipped. 
     786                    // FIXME: Maybe we only need to do this for tuples, 
     787                    //        and can add tuple.length after decrement? 
     788                    i--; 
     789                } 
     790            } 
     791            // update nparams to include expanded tuples 
     792            nparams = Argument::dim(f->parameters); 
     793        } 
     794#endif 
    771795 
    772796    // Propagate storage class from tuple parameters to their element-parameters. 
Copyright © 2008, LDC Development Team.