Changeset 3d02803
- Timestamp:
- Sep 24, 2025, 6:31:58 PM (4 months ago)
- Branches:
- master
- Children:
- 843bce5
- Parents:
- 78bc398 (diff), 1911f37 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Files:
-
- 1 deleted
- 3 edited
-
doc/theses/fangren_yu_MMath/benchmarks.tex (deleted)
-
libcfa/src/stdlib.cfa (modified) (5 diffs)
-
tests/.expect/alloc.txt (modified) (1 diff)
-
tests/alloc.cfa (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.cfa
r78bc398 r3d02803 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Apr 21 16:17:22 202413 // Update Count : 7 0012 // Last Modified On : Wed Sep 24 18:14:20 2025 13 // Update Count : 760 14 14 // 15 15 … … 33 33 forall( T & | sized(T), Parms ... | { void ?{}( T &, Parms ); } ) 34 34 T * anew( size_t dim, Parms p ) { 35 T * arr = alloc( dim ); 35 T * arr; 36 if ( sizeof( T ) == 0 ) { // empty element size ? 37 arr = (T *)(size_t *)alloc(); // create fake array 38 *((size_t *)arr) = dim; // remember dimension 39 } else arr = alloc( dim ); 36 40 for ( i; dim ) { 37 41 (arr[i]){ p }; // run constructor … … 42 46 forall( T & | sized(T) | { void ^?{}( T & ); } ) 43 47 void adelete( T arr[] ) { 44 if ( arr ) { // ignore null 45 size_t dim = malloc_size( arr ) / sizeof( T ); 46 for ( i; 0 -~= dim - 1 ) { // reverse allocation order, must be unsigned 47 ^(arr[i]){}; // run destructor 48 } // for 49 free( arr ); 50 } // if 48 if ( arr == 0p ) return; // 0p ? special case 49 size_t dim = sizeof( T ) == 0 ? (size_t)(*(size_t *)arr) : malloc_size( arr ) / sizeof( T ); // compute dimension 50 for ( i; 0 -~= dim - 1 ) { // reverse allocation order, must be signed 51 ^(arr[i]){}; // run destructor 52 } // for 53 if ( sizeof( T ) == 0 ) free( (size_t *)arr ); else free( arr ); 51 54 } // adelete 52 55 53 56 forall( T & | sized(T) | { void ^?{}( T & ); }, List ... | { void adelete( List ); } ) 54 57 void adelete( T arr[], List rest ) { 55 if ( arr ) { // ignore null 56 size_t dim = malloc_size( arr ) / sizeof( T ); 57 for ( i; 0 -~= dim - 1 ) { // reverse allocation order, must be unsigned 58 ^(arr[i]){}; // run destructor 59 } // for 60 free( arr ); 61 } // if 58 adelete( arr ); 62 59 adelete( rest ); 63 60 } // adelete … … 68 65 69 66 bool checkif( const char s[], int (* kind)( int ) ) { 70 for () { 71 if ( *s == '\0' ) return true;72 if ( ! kind( *s ) ) return false;67 for () { // at least 1 character '\0' 68 if ( *s == '\0' ) return true; 69 if ( ! kind( *s ) ) return false; 73 70 s += 1; 74 71 } // for … … 76 73 77 74 bool checkif( const char s[], int (* kind)( int, locale_t ), locale_t locale ) { 78 for () { 79 if ( *s == '\0' ) return true;80 if ( ! kind( *s, locale ) ) return false;75 for () { // at least 1 character '\0' 76 if ( *s == '\0' ) return true; 77 if ( ! kind( *s, locale ) ) return false; 81 78 s += 1; 82 79 } // for -
tests/.expect/alloc.txt
r78bc398 r3d02803 76 76 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 77 77 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 42 42.5, 78 ctor 79 ctor 80 ctor 81 ctor 82 ctor 83 ctor 84 ctor 85 ctor 86 ctor 87 ctor 88 ctor 89 ctor 90 ctor 91 ctor 92 ctor 93 dtor 94 dtor 95 dtor 96 dtor 97 dtor 98 dtor 99 dtor 100 dtor 101 dtor 102 dtor 103 dtor 104 dtor 105 dtor 106 dtor 107 dtor 78 108 79 109 pointer arithmetic 0 -
tests/alloc.cfa
r78bc398 r3d02803 10 10 // Created On : Wed Feb 3 07:56:22 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Apr 23 14:04:11 202413 // Update Count : 49 212 // Last Modified On : Wed Sep 24 18:21:09 2025 13 // Update Count : 493 14 14 // 15 15 … … 362 362 assert( const_count == 2 + 2 * dim && dest_count == 2 + 2 * dim); // assertion for testing 363 363 364 struct Empty {}; 365 void ?{}( Empty & ) { sout | "ctor"; } 366 void ^?{}( Empty & ) { sout | "dtor"; } 367 Empty * ea1 = anew( 5 ); 368 Empty * ea2 = anew( 5 ); 369 Empty * ea3 = anew( 5 ); 370 adelete( ea1, ea2, ea3 ); 371 364 372 // extras 365 373 sout | nl;
Note:
See TracChangeset
for help on using the changeset viewer.