Changeset 246 for trunk/thune/eval.c

Show
Ignore:
Timestamp:
08/05/06 18:39:12 (2 years ago)
Author:
krobillard
Message:

Thune - Data stack overflow now throws an error.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/thune/eval.c

    r243 r246  
    606606        if( ! val ) 
    607607            goto throw_cc; 
    608  
    609608        if( ur_is(val, UT_PAREN) ) 
    610         { 
    611             UR_S_PUSH( *val ); 
    612             goto execute; 
    613         } 
     609            goto push_val; 
    614610    } 
    615611 
     
    10531049            break; 
    10541050 
     1051        case UT_SELECT: 
     1052            // TODO: select! needs to call functions, block on unset, etc. 
     1053            if( ! ur_getSelector( ur_thread, val, UR_S_GROW ) ) 
     1054            { 
     1055                _appendTraceBlk( &UR_TOS->err, blkN, pc - start - 1 ); 
     1056                goto throw_cc; 
     1057            } 
     1058            break; 
     1059 
     1060        case UT_SETSELECT: 
     1061            if( ! ur_setSelector( ur_thread, val, UR_TOS ) ) 
     1062            { 
     1063                _appendTraceBlk( &UR_TOS->err, blkN, pc - start - 1 ); 
     1064                goto throw_cc; 
     1065            } 
     1066            UR_S_DROP; 
     1067            break; 
     1068 
     1069        case UT_PAREN: 
     1070            DO_BLOCK( val ); 
     1071            break; 
     1072 
    10551073        case UT_GETWORD: 
    10561074            val = ur_wordCell( ur_thread, val ); 
    10571075            if( ! val ) 
    10581076                goto throw_cc; 
    1059             UR_S_PUSH( *val ); 
    1060             break; 
    1061  
    1062         case UT_SELECT: 
    1063             // TODO: select! needs to call functions, block on unset, etc. 
    1064             if( ! ur_getSelector( ur_thread, val, UR_S_GROW ) ) 
    1065             { 
    1066                 _appendTraceBlk( &UR_TOS->err, blkN, pc - start - 1 ); 
    1067                 goto throw_cc; 
    1068             } 
    1069             break; 
    1070  
    1071         case UT_SETSELECT: 
    1072             if( ! ur_setSelector( ur_thread, val, UR_TOS ) ) 
    1073             { 
    1074                 _appendTraceBlk( &UR_TOS->err, blkN, pc - start - 1 ); 
    1075                 goto throw_cc; 
    1076             } 
    1077             UR_S_DROP; 
    1078             break; 
    1079  
    1080         case UT_PAREN: 
    1081             DO_BLOCK( val ); 
    1082             break; 
     1077            // Fall through to push. 
    10831078 
    10841079        default: 
     1080push_val: 
     1081            if( UR_TOS >= ur_thread->eos ) 
     1082                goto stack_overflow; 
    10851083            UR_S_PUSH( *val ); 
    10861084            break; 
     
    13321330    _appendTraceBlk( &UR_TOS->err, blkN, pc - start ); 
    13331331    goto throw_cc; 
     1332 
     1333stack_overflow: 
     1334 
     1335    ur_throwErr( ur_thread, UR_EX_INTERNAL, "data stack overflow" ); 
     1336    goto trace_error; 
    13341337 
    13351338stack_eaten: