Changeset c4f8c4bf


Ignore:
Timestamp:
Apr 11, 2025, 1:23:19 PM (6 months ago)
Author:
Michael Brooks <mlbrooks@…>
Branches:
master
Children:
602ac05, cefaa2df
Parents:
dab6e39
Message:

Fix string-operator handling on +=

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/collections/string.cfa

    rdab6e39 rc4f8c4bf  
    298298}
    299299
    300 void ?+=?( string & s, const string & s2 ) {
     300PBOOST void ?+=?( string & s, string s2 ) {
    301301        (*s.inner) += (*s2.inner);
    302302}
  • libcfa/src/collections/string.hfa

    rdab6e39 rc4f8c4bf  
    160160// Concatenation
    161161void ?+=?( string & s, char c );
    162 void ?+=?( string & s, const string & s2 );
     162PBOOST void ?+=?( string & s, string );
    163163void append( string & s, const string & s2, size_t maxlen );
    164164void ?+=?( string & s, const char * s2 );
  • tests/collections/.expect/string-operator.txt

    rdab6e39 rc4f8c4bf  
    9999(skip)
    1001000x2a 0x2d
     101
     102a
     103aa
     104aaaa
     105
     106ab
     107abab
     108ababababab
     109
     11042
     111139
     112
     113a ab
  • tests/collections/string-operator.cfa

    rdab6e39 rc4f8c4bf  
    322322            printf( "0x%x 0x%x\n", ch, ch + 3 );  // 0x3 0x6
    323323        }
     324        sout | nl;
     325
     326        s = "";
     327        s += 'a';               sout | s;   // a
     328        s += "a";               sout | s;   // aa
     329        s += s;                 sout | s;   // aaaa
     330                                sout | nl;
     331
     332        s = "";
     333        s += 'a' + 'b';         sout | s;   // ab
     334        s += "a" + "b";         sout | s;   // abab
     335        s += s + 'a' + 'b';     sout | s;   // ababababab
     336                                sout | nl;
     337
     338        {
     339            char ch = 42;       sout | (unsigned char) ch; // 42
     340            ch += 'a';          sout | (unsigned char) ch; // 139
     341                                sout | nl;
     342        }
     343
     344        {
     345            char retc = 'a';
     346            string rets = "a";
     347            char & weird() { return retc; }
     348            string & weird() { return rets; }
     349            (return char &) weird();
     350            (return string &) weird();
     351            weird() += 'b';                 // (ideally ambiguous)
     352            sout | retc | ' ' | rets;       // a ab (known approximation flaw)
     353        }
    324354}
Note: See TracChangeset for help on using the changeset viewer.