Changeset 47 for trunk/orca

Show
Ignore:
Timestamp:
02/13/06 18:25:35 (3 years ago)
Author:
krobillard
Message:

tests/working/op_compare.r works again.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/orca/op.c

    r42 r47  
    507507static int compareValue( const OValue* a, const OValue* b ) 
    508508{ 
    509     if( a->type == OT_INTEGER ) 
    510     { 
    511         if( b->type == OT_INTEGER ) 
    512         { 
    513             if( a->integer > b->integer ) 
     509    if( orIs(a, OT_INTEGER) ) 
     510    { 
     511        if( orIs(b, OT_INTEGER) ) 
     512        { 
     513            if( orInt(a) > orInt(b) ) 
    514514                return CMP_GREATER; 
    515             if( a->integer < b->integer ) 
     515            if( orInt(a) < orInt(b) ) 
    516516                return CMP_LESS; 
    517517            return CMP_EQUAL; 
    518518        } 
    519         else if( b->type == OT_DECIMAL ) 
    520         { 
    521             double da = (double) a->integer; 
    522             if( da > b->num.decimal ) 
     519        else if( orIs(b, OT_DECIMAL) ) 
     520        { 
     521            double da = (double) orInt(a); 
     522            if( da > orDecimal(b) ) 
    523523                return CMP_GREATER; 
    524             if( da < b->num.decimal ) 
     524            if( da < orDecimal(b) ) 
    525525                return CMP_LESS; 
    526526            return CMP_EQUAL; 
     
    528528        return CMP_ERROR_B; 
    529529    } 
    530     else if( a->type == OT_DECIMAL ) 
    531     { 
    532         if( b->type == OT_INTEGER ) 
    533         { 
    534             double db = (double) b->integer; 
    535             if( a->num.decimal > db ) 
     530    else if( orIs(a, OT_DECIMAL) ) 
     531    { 
     532        if( orIs(b, OT_INTEGER) ) 
     533        { 
     534            double db = (double) orInt(b); 
     535            if( orDecimal(a) > db ) 
    536536                return CMP_GREATER; 
    537             if( a->num.decimal < db ) 
     537            if( orDecimal(a) < db ) 
    538538                return CMP_LESS; 
    539539            return CMP_EQUAL; 
    540540        } 
    541         else if( b->type == OT_DECIMAL ) 
    542         { 
    543             if( a->num.decimal > b->num.decimal ) 
     541        else if( orIs(b, OT_DECIMAL) ) 
     542        { 
     543            if( orDecimal(a) > orDecimal(b) ) 
    544544                return CMP_GREATER; 
    545             if( a->num.decimal < b->num.decimal ) 
     545            if( orDecimal(a) < orDecimal(b) ) 
    546546                return CMP_LESS; 
    547547            return CMP_EQUAL; 
     
    549549        return CMP_ERROR_B; 
    550550    } 
    551     else if( a->type == OT_TUPLE ) 
    552     { 
    553         if( b->type == OT_TUPLE ) 
    554         { 
    555             int i, argc;             
    556             argc = a->argc > b->argc ? a->argc : b->argc; 
    557             for( i = 0; i < argc; i++ ) 
    558             { 
    559                 if ( a->tuple[i] > b->tuple[i] ) 
     551    else if( orIs(a, OT_TUPLE) ) 
     552    { 
     553        if( orIs(b, OT_TUPLE) ) 
     554        { 
     555            int i, len;             
     556            len = orTupleLen(a); 
     557            if( len < orTupleLen(b) ) 
     558                return CMP_LESS; 
     559            if( len > orTupleLen(b) ) 
     560                return CMP_GREATER; 
     561            for( i = 0; i < len; i++ ) 
     562            { 
     563                if( a->tuple[i] > b->tuple[i] ) 
    560564                    return CMP_GREATER; 
    561                 if ( a->tuple[i] < b->tuple[i] ) 
     565                if( a->tuple[i] < b->tuple[i] ) 
    562566                    return CMP_LESS; 
    563567            } 
    564             return CMP_EQUAL;; 
     568            return CMP_EQUAL; 
    565569        } 
    566570        return CMP_ERROR_B; 
     
    718722 
    719723            case OT_TUPLE: 
    720                 logic = compareValue( a, b ); // tupleSame( a, b ); 
     724                logic = (compareValue( a, b ) == CMP_EQUAL) ? 1 : 0; 
    721725                break; 
    722726