Changeset 467

Show
Ignore:
Timestamp:
08/30/07 15:52:45 (1 year ago)
Author:
krobillard
Message:

ur_toStr now handles circular block references.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/thune/print.c

    r458 r467  
    850850    } \ 
    851851    mask <<= 1; 
     852 
     853 
     854#define SET_RECURSE_FLAG(v) ((UCell*)v)->id.flags |= UR_FLAG_PRINT_RECURSION 
     855#define CLR_RECURSE_FLAG(v) ((UCell*)v)->id.flags &= ~UR_FLAG_PRINT_RECURSION 
    852856 
    853857 
     
    11821186        case UT_PAREN: 
    11831187        case UT_BLOCK: 
    1184         { 
    1185             UBlock* blk = ur_block( val ); 
    1186             UIndex n = ur_sliceEnd( val, blk ); 
    1187  
    1188             if( n < val->series.it ) 
    1189                 n = val->series.it; 
    1190  
    1191             ur_blockToStr( ut, out, 
    1192                            blk->ptr.cells + val->series.it, 
    1193                            blk->ptr.cells + n, 
    1194                            ur_type(val), depth ); 
    1195         } 
     1188            if( val->id.flags & UR_FLAG_PRINT_RECURSION ) 
     1189            { 
     1190                append( out, ur_is(val, UT_PAREN) ? "(...)" : "[...]", 5 ); 
     1191            } 
     1192            else 
     1193            { 
     1194                UBlock* blk = ur_block( val ); 
     1195                UIndex n = ur_sliceEnd( val, blk ); 
     1196 
     1197                SET_RECURSE_FLAG(val); 
     1198 
     1199                if( n < val->series.it ) 
     1200                    n = val->series.it; 
     1201 
     1202                ur_blockToStr( ut, out, 
     1203                               blk->ptr.cells + val->series.it, 
     1204                               blk->ptr.cells + n, 
     1205                               ur_type(val), depth ); 
     1206 
     1207                CLR_RECURSE_FLAG(val); 
     1208            } 
    11961209            break; 
    11971210 
     
    12011214        case UT_COMPONENT: 
    12021215#endif 
    1203             if( val->id.flags & UR_FLAG_CTX_RECURSION ) 
     1216            if( val->id.flags & UR_FLAG_PRINT_RECURSION ) 
    12041217            { 
    12051218                append( out, "?context?", 9 ); 
     
    12131226            UCell* vit = vblk->ptr.cells; 
    12141227 
    1215             ((UCell*) val)->id.flags |= UR_FLAG_CTX_RECURSION
     1228            SET_RECURSE_FLAG(val)
    12161229 
    12171230#ifdef LANG_THUNE 
     
    12541267#endif 
    12551268 
    1256             ((UCell*) val)->id.flags &= ~UR_FLAG_CTX_RECURSION
     1269            CLR_RECURSE_FLAG(val)
    12571270            } 
    12581271            break; 
  • trunk/thune/urlan.h

    r460 r467  
    9494#define UR_FLAG_BIND_MASK       0x07 
    9595#define UR_FLAG_SEL_ATOM        0x08 
    96 #define UR_FLAG_CTX_RECURSION  0x40 
     96#define UR_FLAG_PRINT_RECURSION 0x40 
    9797#define UR_FLAG_SOL             0x80 
    9898