Changeset 506 for trunk/thune/thune.c

Show
Ignore:
Timestamp:
02/08/08 04:14:39 (10 months ago)
Author:
krobillard
Message:

Changed if/keep to if-some. Added or-else.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/thune/thune.c

    r503 r506  
    373373#define EMH_HALT(pc,end) 
    374374#endif 
     375 
     376 
     377inline int ur_isFalse( UCell* c ) 
     378{ 
     379    return ur_is(c, UT_NONE) || (ur_is(c, UT_LOGIC) && ! ur_logic(c)); 
     380} 
    375381 
    376382 
     
    685691                    break; 
    686692 
    687                 case OP_IF_TRUE:       // (logic -- ) 
    688                     val = UR_TOS; 
    689                     if( ur_is(val, UT_NONE) || 
    690                         (ur_is(val, UT_LOGIC) && ! ur_logic(val)) ) 
     693                case OP_IF_TRUE:        // (logic -- ) 
     694if_true: 
     695                    if( ur_isFalse( UR_TOS ) ) 
    691696                        goto if_skip; 
    692697                    UR_S_DROP; 
    693698                    break; 
    694699 
    695                 case OP_IF_FALSE:      // (logic -- ) 
    696                     val = UR_TOS; 
    697                     if( ur_is(val, UT_NONE) || 
    698                         (ur_is(val, UT_LOGIC) && ! ur_logic(val)) ) 
     700                case OP_IF_SOME:        // (val -- [val]) 
     701                    if( ur_isFalse( UR_TOS ) ) 
     702                        goto if_skip; 
     703                    break; 
     704 
     705                case OP_IF_FALSE:       // (logic -- ) 
     706                    if( ur_isFalse( UR_TOS ) ) 
    699707                        goto if_do; 
    700708if_skip: 
     
    705713                    break; 
    706714 
    707                 case OP_IF:            // (val val -- ) 
     715                case OP_OR_ELSE:        // (val -- [val]) 
     716                    if( ur_isFalse( UR_TOS ) ) 
     717                        goto if_do; 
     718                    if( pc != end ) 
     719                        ++pc; 
     720                    break; 
     721 
     722                case OP_IF:             // (val val -- ) 
    708723                { 
    709724                    int n; 
     
    716731                            goto if_skip; 
    717732 
    718                         case UR_ATOM_GT: 
    719                             n = ur_greaterThan( UR_TOS, ur_s_next(UR_TOS) ); 
    720                             break; 
    721  
    722                         case UR_ATOM_LT: 
    723                             n = ur_lessThan( UR_TOS, ur_s_next(UR_TOS) ); 
    724                             break; 
    725  
    726733                        case UR_ATOM_NEQ: 
    727734                            if( ! ur_equal( ut, UR_TOS, ur_s_next(UR_TOS) ) ) 
     
    729736                            goto if_skip; 
    730737 
     738                        case UR_ATOM_GT: 
     739                            n = ur_greaterThan( UR_TOS, ur_s_next(UR_TOS) ); 
     740                            break; 
     741 
     742                        case UR_ATOM_LT: 
     743                            n = ur_lessThan( UR_TOS, ur_s_next(UR_TOS) ); 
     744                            break; 
     745 
    731746                        case UR_ATOM_GTE: 
    732747                            n = ur_greaterOrEqual( UR_TOS, ur_s_next(UR_TOS) ); 
     
    737752                            break; 
    738753 
    739                         case UR_ATOM_KEEP:  // (val -- [val]) 
    740                             UR_S_GROW; 
    741                             val = UR_TOS; 
    742                             if( ur_is(val, UT_NONE) || 
    743                                 (ur_is(val, UT_LOGIC) && ! ur_logic(val)) ) 
    744                                 goto if_skip; 
    745                             goto execute; 
    746  
    747754                        //case UR_ATOM_ZERO: 
    748755                        //    break; 
     756 
     757                        default: 
     758                            goto if_true; 
    749759                    } 
    750760                    if( n == 1 )