@@ -12,18 +12,22 @@ export class Buffer extends Uint8Array {
1212 return new Buffer ( size ) ;
1313 }
1414
15- public static concat ( items : Buffer [ ] , length : i32 ) : Buffer {
15+ public static concat ( items : Array < Buffer > , length : i32 ) : Buffer {
16+ // assert the list itself isn't null
17+ assert ( items != null ) ;
18+
1619 let size : usize = 0 ;
17- let itemCount = usize ( items . length ) ;
20+ let itemCount = < usize > items . length ;
1821 let itemsDataStart = items . dataStart ;
1922
2023 for ( let i : usize = 0 ; i < itemCount ; i ++ ) {
2124 let item = load < usize > ( itemsDataStart + ( i << alignof < usize > ( ) ) ) ;
2225 if ( item == 0 ) continue ;
2326 size += < usize > load < u32 > ( item , offsetof < Uint8Array > ( "dataLength" ) ) ;
2427 }
25- size = min < usize > ( usize ( length ) , size ) ;
26- assert ( items ) ;
28+
29+ // account for passed concat buffer length
30+ size = min < usize > ( < usize > length , size ) ;
2731
2832 let buffer = __alloc ( size , idof < ArrayBuffer > ( ) ) ;
2933 let result = changetype < Buffer > ( __alloc ( offsetof < Buffer > ( ) , idof < Buffer > ( ) ) ) ;
@@ -33,7 +37,7 @@ export class Buffer extends Uint8Array {
3337 let start : usize = result . dataStart ;
3438 for ( let i : usize = 0 ; i < itemCount && size > 0 ; i ++ ) {
3539 let item = load < usize > ( itemsDataStart + ( i << alignof < usize > ( ) ) ) ;
36- if ( item == 0 ) continue ;
40+ if ( item == null ) continue ;
3741 let count = min < u32 > ( size , < usize > load < u32 > ( item , offsetof < Uint8Array > ( "dataLength" ) ) ) ;
3842 memory . copy ( start , load < usize > ( item , offsetof < Uint8Array > ( "dataStart" ) ) , count ) ;
3943 start += count ;
0 commit comments