Note: This website is archived. For up-to-date information about D projects and development, please visit wiki.dlang.org.

Changeset 310

Show
Ignore:
Timestamp:
12/24/09 23:45:11 (15 years ago)
Author:
walter
Message:

bugzilla 3645 manifest constant (enum) crashes dmd

Files:

Legend:

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

    r304 r310  
    211211         */ 
    212212        assert(istate); 
    213213        for (size_t i = 0; i < istate->vars.dim; i++) 
    214214        {   VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 
    215215            if (v == v2) 
    216216            {   istate->vars.data[i] = NULL; 
    217217            break; 
    218218            } 
    219219        } 
    220220        } 
    221221        else 
    222222        {   // Value parameters and non-trivial references 
    223223        v->value = earg; 
    224224        } 
    225225#if LOG 
    226226        printf("interpreted arg[%d] = %s\n", i, earg->toChars()); 
    227227#endif 
    228228    } 
    229229    } 
    230230    // Don't restore the value of 'this' upon function return 
    231     if (needThis() && thisarg->op==TOKvar) { 
     231    if (needThis() && thisarg->op == TOKvar && istate) 
     232    { 
    232233    VarDeclaration *thisvar = ((VarExp *)(thisarg))->var->isVarDeclaration(); 
    233234        for (size_t i = 0; i < istate->vars.dim; i++) 
    234235    {   VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 
    235236        if (v == thisvar) 
    236237        {   istate->vars.data[i] = NULL; 
    237238        break; 
    238239        } 
    239240    } 
    240241    } 
    241242 
    242243    /* Save the values of the local variables used 
    243244     */ 
    244245    Expressions valueSaves; 
    245246    if (istate && !isNested()) 
    246247    { 
    247248    //printf("saving local variables...\n"); 
    248249    valueSaves.setDim(istate->vars.dim); 
    249250    for (size_t i = 0; i < istate->vars.dim; i++) 
    250251    {   VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 
    251252        if (v) 
  • trunk/src/interpret.c

    r304 r310  
    230230         */ 
    231231        assert(istate); 
    232232        for (size_t i = 0; i < istate->vars.dim; i++) 
    233233        {   VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 
    234234            if (v == v2) 
    235235            {   istate->vars.data[i] = NULL; 
    236236            break; 
    237237            } 
    238238        } 
    239239        } 
    240240        else 
    241241        {   // Value parameters and non-trivial references 
    242242        v->value = earg; 
    243243        } 
    244244#if LOG 
    245245        printf("interpreted arg[%d] = %s\n", i, earg->toChars()); 
    246246#endif 
    247247    } 
    248248    } 
    249249    // Don't restore the value of 'this' upon function return 
    250     if (needThis() && thisarg->op==TOKvar) { 
     250    if (needThis() && thisarg->op == TOKvar && istate) 
     251    { 
    251252    VarDeclaration *thisvar = ((VarExp *)(thisarg))->var->isVarDeclaration(); 
    252253        for (size_t i = 0; i < istate->vars.dim; i++) 
    253254    {   VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 
    254255        if (v == thisvar) 
    255256        {   istate->vars.data[i] = NULL; 
    256257        break; 
    257258        } 
    258259    } 
    259260    } 
    260261 
    261262    /* Save the values of the local variables used 
    262263     */ 
    263264    Expressions valueSaves; 
    264265    if (istate && !isNested()) 
    265266    { 
    266267    //printf("saving local variables...\n"); 
    267268    valueSaves.setDim(istate->vars.dim); 
    268269    for (size_t i = 0; i < istate->vars.dim; i++) 
    269270    {   VarDeclaration *v = (VarDeclaration *)istate->vars.data[i]; 
    270271        if (v)