Changeset 506 for trunk/thune/thune.c
- Timestamp:
- 02/08/08 04:14:39 (10 months ago)
- Files:
-
- 1 modified
-
trunk/thune/thune.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/thune/thune.c
r503 r506 373 373 #define EMH_HALT(pc,end) 374 374 #endif 375 376 377 inline int ur_isFalse( UCell* c ) 378 { 379 return ur_is(c, UT_NONE) || (ur_is(c, UT_LOGIC) && ! ur_logic(c)); 380 } 375 381 376 382 … … 685 691 break; 686 692 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 -- ) 694 if_true: 695 if( ur_isFalse( UR_TOS ) ) 691 696 goto if_skip; 692 697 UR_S_DROP; 693 698 break; 694 699 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 ) ) 699 707 goto if_do; 700 708 if_skip: … … 705 713 break; 706 714 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 -- ) 708 723 { 709 724 int n; … … 716 731 goto if_skip; 717 732 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 726 733 case UR_ATOM_NEQ: 727 734 if( ! ur_equal( ut, UR_TOS, ur_s_next(UR_TOS) ) ) … … 729 736 goto if_skip; 730 737 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 731 746 case UR_ATOM_GTE: 732 747 n = ur_greaterOrEqual( UR_TOS, ur_s_next(UR_TOS) ); … … 737 752 break; 738 753 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 747 754 //case UR_ATOM_ZERO: 748 755 // break; 756 757 default: 758 goto if_true; 749 759 } 750 760 if( n == 1 )
