Changeset 40b5417


Ignore:
Timestamp:
Apr 23, 2020, 5:53:14 PM (17 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
arm-eh, jacob/cs343-translation, master, new-ast, new-ast-unique-expr
Children:
2a01c9b
Parents:
3d2852a
Message:

more work on manipulators for int128 numbers

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/iostream.cfa

    r3d2852a r40b5417  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Apr 22 10:50:46 2020
    13 // Update Count     : 933
     12// Last Modified On : Thu Apr 23 17:33:32 2020
     13// Update Count     : 942
    1414//
    1515
     
    593593                                        (ostype &)(os | fmt | "" | fmt2); \
    594594                                } else if ( f.base == 'o' ) { \
    595                                         if ( fmt.flags.pc && fmt.pc > 21 ) fmt.pc -= 21; \
     595                                        if ( fmt.flags.pc && fmt.pc > 22 ) fmt.pc -= 22; \
    596596                                        if ( fmt.flags.left ) { \
    597597                                                fmt.flags.left = false; \
    598598                                                fmt.wd = 1; \
    599599                                                fmt.val = (unsigned long long int)fmt.val >> 2; \
     600                                                printf( "L %llo %d %d '%c' %x\n", fmt.val, fmt.wd, fmt.pc, fmt.base, fmt.all ); \
    600601                                                fmt2.wd = 1; \
    601602                                                fmt2.val = ((msig & 0x3) << 1) + 1; \
     
    603604                                                sepOff( os ); \
    604605                                                fmt2.flags.left = true; \
    605                                                 fmt2.wd = f.wd - ( ceiling( high1( fmt.val ), 3 ) + 1 ); \
     606                                                int msigd = ceiling( high1( fmt.val ), 3 ) + 1; \
     607                                                fmt2.wd = f.wd - (fmt.pc > msigd ? fmt.pc : msigd); \
     608                                                if ( fmt2.wd < 0 ) fmt2.wd = 21; \
    606609                                                fmt2.flags.pc = true; fmt2.pc = 21; \
    607                                                 if ( ! fmt.flags.nobsdp ) { fmt2.wd -= 1; } \
     610                                                if ( ! fmt.flags.nobsdp ) { if ( fmt.pc < fmt.wd ) fmt.wd -= 1; else fmt.pc -= 1; } \
    608611                                                fmt2.val = lsig & 0x7fffffffffffffff; \
    609612                                                (ostype &)(os | fmt2); \
  • tests/manipulatorsOutput3.cfa

    r3d2852a r40b5417  
    1919    sout | nl;
    2020
     21    printf( "%#.10o\n", 0123 );
     22    sout | wd( 1,10, oct(0123) );
    2123    sout | oct(x);
    2224    sout | nobase(oct(x));
    23     sout | wd( 45, upcase(oct(123)) );
    24     sout | wd( 45,40, upcase(oct(123)) );
    25     sout | wd( 40,45, upcase(oct(123)) );
    26     sout | wd( 45, upcase(oct(x)) );
    27     sout | wd( 45,40, upcase(oct(x)) );
    28     sout | wd( 40,45, upcase(oct(x)) );
    29     sout | left(wd( 45, upcase(oct(x)) )) | 'X';
     25    sout | wd( 45, oct(0123) );
     26    sout | wd( 45,40, oct(0123) );
     27    sout | wd( 40,45, oct(0123) );
     28    sout | wd( 45, oct(x) );
     29    sout | wd( 45,40, oct(x) );
     30    sout | wd( 40,45, oct(x) );
     31
     32    sout | left(wd( 45, oct(0123) )) | 'X';
     33    sout | left(wd( 45, oct(x) )) | 'X';
     34    sout | left(wd( 45,40, oct(0123) )) | 'X';
     35    sout | left(wd( 45,40, oct(x) )) | 'X';
     36    sout | left(wd( 40,45, oct(0123) )) | 'X';
     37    sout | left(wd( 40,45, oct(x) )) | 'X';
     38    printf( "%#-1.10oX\n", 0123 );
     39    sout | left(wd( 1,10, oct(0123) )) | 'X';
     40    printf( "%#-40.10oX\n", 0123 );
     41    sout | left(wd( 40,10, oct(0123) )) | 'X';
     42    sout | left(wd( 40,10, oct(x) )) | 'X';
     43    sout | left(wd( 10,40, oct(0123) )) | 'X';
     44    sout | left(wd( 10,40, oct(x) )) | 'X';
     45
    3046    int128 y = 123456789;
    31     sout | left(wd( 45, 49, upcase(oct(y)) )) | 'X';
     47    sout | left(wd( 45, 49, oct(y) )) | 'X';
    3248    sout | nl;
    3349
Note: See TracChangeset for help on using the changeset viewer.