Changeset 629

Show
Ignore:
Timestamp:
08/26/10 14:21:45 (1 year ago)
Author:
walter
Message:

bugfixes part of Bugzilla 4713 PATCH for interface generation: cleanup, bugfixes and prettyprinting

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/dmd-1.x/src/attrib.c

    r513 r629  
    324324    if (decl) 
    325325    { 
    326         buf->writenl(); 
    327         buf->writeByte('{'); 
    328         buf->writenl(); 
    329         for (unsigned i = 0; i < decl->dim; i++) 
    330         { 
    331             Dsymbol *s = (Dsymbol *)decl->data[i]; 
    332  
    333             buf->writestring("    "); 
    334             s->toCBuffer(buf, hgs); 
    335         } 
    336         buf->writeByte('}'); 
     326        if (decl->dim == 0) 
     327            buf->writestring("{}"); 
     328        else if (decl->dim == 1) 
     329            ((Dsymbol *)decl->data[0])->toCBuffer(buf, hgs); 
     330        else 
     331        { 
     332            buf->writenl(); 
     333            buf->writeByte('{'); 
     334            buf->writenl(); 
     335            for (unsigned i = 0; i < decl->dim; i++) 
     336            { 
     337                Dsymbol *s = (Dsymbol *)decl->data[i]; 
     338 
     339                buf->writestring("    "); 
     340                s->toCBuffer(buf, hgs); 
     341            } 
     342            buf->writeByte('}'); 
     343        } 
    337344    } 
    338345    else 
  • branches/dmd-1.x/src/expression.c

    r590 r629  
    763763void expToCBuffer(OutBuffer *buf, HdrGenState *hgs, Expression *e, enum PREC pr) 
    764764{ 
     765#ifdef DEBUG 
     766    if (precedence[e->op] == PREC_zero) 
     767        printf("precedence not defined for token '%s'\n",Token::tochars[e->op]); 
     768#endif 
     769    assert(precedence[e->op] != PREC_zero); 
     770    assert(pr != PREC_zero); 
     771 
    765772    //if (precedence[e->op] == 0) e->dump(0); 
    766773    if (precedence[e->op] < pr || 
     
    68026809 
    68036810void CallExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) 
    6804 {   int i; 
    6805  
    6806     expToCBuffer(buf, hgs, e1, precedence[op]); 
     6811
     6812    if (e1->op == TOKtype) 
     6813        /* Avoid parens around type to prevent forbidden cast syntax: 
     6814         *   (sometype)(arg1) 
     6815         * This is ok since types in constructor calls 
     6816         * can never depend on parens anyway 
     6817         */ 
     6818        e1->toCBuffer(buf, hgs); 
     6819    else 
     6820        expToCBuffer(buf, hgs, e1, precedence[op]); 
    68076821    buf->writeByte('('); 
    68086822    argsToCBuffer(buf, arguments, hgs); 
  • branches/dmd-1.x/src/parse.c

    r588 r629  
    54655465void initPrecedence() 
    54665466{ 
     5467    for (int i = 0; i < TOKMAX; i++) 
     5468        precedence[i] = PREC_zero; 
     5469 
     5470    precedence[TOKtype] = PREC_expr; 
     5471    precedence[TOKerror] = PREC_expr; 
     5472 
     5473    precedence[TOKtypeof] = PREC_primary; 
     5474    precedence[TOKmixin] = PREC_primary; 
     5475 
    54675476    precedence[TOKdotvar] = PREC_primary; 
    54685477    precedence[TOKimport] = PREC_primary; 
     
    54805489    precedence[TOKfunction] = PREC_primary; 
    54815490    precedence[TOKvar] = PREC_primary; 
     5491    precedence[TOKsymoff] = PREC_primary; 
     5492    precedence[TOKstructliteral] = PREC_primary; 
    54825493#if DMDV2 
     5494    precedence[TOKtraits] = PREC_primary; 
    54835495    precedence[TOKdefault] = PREC_primary; 
    54845496#endif 
     
    54935505    precedence[TOKslice] = PREC_primary; 
    54945506    precedence[TOKarray] = PREC_primary; 
     5507    precedence[TOKindex] = PREC_primary; 
    54955508 
    54965509    precedence[TOKaddress] = PREC_unary; 
     
    55755588 
    55765589    precedence[TOKcomma] = PREC_expr; 
    5577 
    5578  
     5590    precedence[TOKdeclaration] = PREC_expr; 
     5591
     5592 
  • trunk/src/attrib.c

    r526 r629  
    325325    if (decl) 
    326326    { 
    327         buf->writenl(); 
    328         buf->writeByte('{'); 
    329         buf->writenl(); 
    330         for (unsigned i = 0; i < decl->dim; i++) 
    331         { 
    332             Dsymbol *s = (Dsymbol *)decl->data[i]; 
    333  
    334             buf->writestring("    "); 
    335             s->toCBuffer(buf, hgs); 
    336         } 
    337         buf->writeByte('}'); 
     327        if (decl->dim == 0) 
     328            buf->writestring("{}"); 
     329        else if (decl->dim == 1) 
     330            ((Dsymbol *)decl->data[0])->toCBuffer(buf, hgs); 
     331        else 
     332        { 
     333            buf->writenl(); 
     334            buf->writeByte('{'); 
     335            buf->writenl(); 
     336            for (unsigned i = 0; i < decl->dim; i++) 
     337            { 
     338                Dsymbol *s = (Dsymbol *)decl->data[i]; 
     339 
     340                buf->writestring("    "); 
     341                s->toCBuffer(buf, hgs); 
     342            } 
     343            buf->writeByte('}'); 
     344        } 
    338345    } 
    339346    else 
  • trunk/src/expression.c

    r616 r629  
    810810void expToCBuffer(OutBuffer *buf, HdrGenState *hgs, Expression *e, enum PREC pr) 
    811811{ 
     812#ifdef DEBUG 
     813    if (precedence[e->op] == PREC_zero) 
     814        printf("precedence not defined for token '%s'\n",Token::tochars[e->op]); 
     815#endif 
     816    assert(precedence[e->op] != PREC_zero); 
     817    assert(pr != PREC_zero); 
     818 
    812819    //if (precedence[e->op] == 0) e->dump(0); 
    813820    if (precedence[e->op] < pr || 
     
    72617268 
    72627269void CallExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) 
    7263 {   int i; 
    7264  
    7265     expToCBuffer(buf, hgs, e1, precedence[op]); 
     7270
     7271    if (e1->op == TOKtype) 
     7272        /* Avoid parens around type to prevent forbidden cast syntax: 
     7273         *   (sometype)(arg1) 
     7274         * This is ok since types in constructor calls 
     7275         * can never depend on parens anyway 
     7276         */ 
     7277        e1->toCBuffer(buf, hgs); 
     7278    else 
     7279        expToCBuffer(buf, hgs, e1, precedence[op]); 
    72667280    buf->writeByte('('); 
    72677281    argsToCBuffer(buf, arguments, hgs); 
  • trunk/src/parse.c

    r585 r629  
    62656265void initPrecedence() 
    62666266{ 
     6267    for (int i = 0; i < TOKMAX; i++) 
     6268        precedence[i] = PREC_zero; 
     6269 
     6270    precedence[TOKtype] = PREC_expr; 
     6271    precedence[TOKerror] = PREC_expr; 
     6272 
     6273    precedence[TOKtypeof] = PREC_primary; 
     6274    precedence[TOKmixin] = PREC_primary; 
     6275 
    62676276    precedence[TOKdotvar] = PREC_primary; 
    62686277    precedence[TOKimport] = PREC_primary; 
     
    62806289    precedence[TOKfunction] = PREC_primary; 
    62816290    precedence[TOKvar] = PREC_primary; 
     6291    precedence[TOKsymoff] = PREC_primary; 
     6292    precedence[TOKstructliteral] = PREC_primary; 
    62826293#if DMDV2 
     6294    precedence[TOKtraits] = PREC_primary; 
    62836295    precedence[TOKdefault] = PREC_primary; 
    62846296#endif 
     
    62956307    precedence[TOKslice] = PREC_primary; 
    62966308    precedence[TOKarray] = PREC_primary; 
     6309    precedence[TOKindex] = PREC_primary; 
    62976310 
    62986311    precedence[TOKaddress] = PREC_unary; 
     
    63816394 
    63826395    precedence[TOKcomma] = PREC_expr; 
    6383 
    6384  
    6385  
     6396    precedence[TOKdeclaration] = PREC_expr; 
     6397
     6398 
     6399 
  • trunk/src/statement.c

    r586 r629  
    31093109    buf->writestring(": .. case "); 
    31103110    last->toCBuffer(buf, hgs); 
     3111    buf->writebyte(':'); 
    31113112    buf->writenl(); 
    31123113    statement->toCBuffer(buf, hgs);