@@ -372,31 +372,34 @@ export function joinFloatArray<T>(dataStart: usize, length: i32, separator: stri
372
372
export function joinStringArray ( dataStart : usize , length : i32 , separator : string ) : string {
373
373
var lastIndex = length - 1 ;
374
374
if ( lastIndex < 0 ) return "" ;
375
- if ( ! lastIndex ) return load < string > ( dataStart ) ;
376
-
377
- var sepLen = separator . length ;
375
+ if ( ! lastIndex ) {
376
+ // @ts -ignore: type
377
+ return load < string > ( dataStart ) || "" ;
378
+ }
378
379
var estLen = 0 ;
379
- var value : string | null ;
380
- for ( let i = 0 , len = lastIndex + 1 ; i < len ; ++ i ) {
380
+ var value : string ;
381
+ for ( let i = 0 ; i < length ; ++ i ) {
381
382
value = load < string > ( dataStart + ( < usize > i << alignof < string > ( ) ) ) ;
383
+ // @ts -ignore: type
382
384
if ( value !== null ) estLen += value . length ;
383
385
}
384
386
var offset = 0 ;
385
- var result = changetype < string > ( __alloc ( ( estLen + sepLen * lastIndex ) << 1 , idof < string > ( ) ) ) ; // retains
387
+ var sepLen = separator . length ;
388
+ var result = __alloc ( ( estLen + sepLen * lastIndex ) << 1 , idof < string > ( ) ) ;
386
389
for ( let i = 0 ; i < lastIndex ; ++ i ) {
387
390
value = load < string > ( dataStart + ( < usize > i << alignof < string > ( ) ) ) ;
388
391
if ( value !== null ) {
389
- let valueLen = changetype < string > ( value ) . length ;
392
+ let valueLen = value . length ;
390
393
memory . copy (
391
- changetype < usize > ( result ) + ( < usize > offset << 1 ) ,
394
+ result + ( < usize > offset << 1 ) ,
392
395
changetype < usize > ( value ) ,
393
396
< usize > valueLen << 1
394
397
) ;
395
398
offset += valueLen ;
396
399
}
397
400
if ( sepLen ) {
398
401
memory . copy (
399
- changetype < usize > ( result ) + ( < usize > offset << 1 ) ,
402
+ result + ( < usize > offset << 1 ) ,
400
403
changetype < usize > ( separator ) ,
401
404
< usize > sepLen << 1
402
405
) ;
@@ -406,77 +409,34 @@ export function joinStringArray(dataStart: usize, length: i32, separator: string
406
409
value = load < string > ( dataStart + ( < usize > lastIndex << alignof < string > ( ) ) ) ;
407
410
if ( value !== null ) {
408
411
memory . copy (
409
- changetype < usize > ( result ) + ( < usize > offset << 1 ) ,
412
+ result + ( < usize > offset << 1 ) ,
410
413
changetype < usize > ( value ) ,
411
- < usize > changetype < string > ( value ) . length << 1
414
+ < usize > value . length << 1
412
415
) ;
413
416
}
414
- return result ;
417
+ return changetype < string > ( result ) ; // retains
415
418
}
416
419
417
- export function joinArrays < T > ( dataStart : usize , length : i32 , separator : string ) : string {
420
+ export function joinReferenceArray < T > ( dataStart : usize , length : i32 , separator : string ) : string {
418
421
var lastIndex = length - 1 ;
419
422
if ( lastIndex < 0 ) return "" ;
420
-
421
- var result = "" ;
422
- var sepLen = separator . length ;
423
423
var value : T ;
424
424
if ( ! lastIndex ) {
425
425
value = load < T > ( dataStart ) ;
426
426
// @ts -ignore: type
427
- return value ? value . join ( separator ) : "" ;
427
+ return value !== null ? value . toString ( ) : "" ;
428
428
}
429
+ var result = "" ;
430
+ var sepLen = separator . length ;
429
431
for ( let i = 0 ; i < lastIndex ; ++ i ) {
430
432
value = load < T > ( dataStart + ( < usize > i << alignof < T > ( ) ) ) ;
431
433
// @ts -ignore: type
432
- if ( value ) result += value . join ( separator ) ;
434
+ if ( value !== null ) result += value . toString ( ) ;
433
435
if ( sepLen ) result += separator ;
434
436
}
435
437
value = load < T > ( dataStart + ( < usize > lastIndex << alignof < T > ( ) ) ) ;
436
438
// @ts -ignore: type
437
- if ( value ) result += value . join ( separator ) ;
438
- return result ; // registered by concatenation (FIXME: lots of garbage)
439
- }
440
-
441
- export function joinObjectArray < T > ( dataStart : usize , length : i32 , separator : string ) : string {
442
- var lastIndex = length - 1 ;
443
- if ( lastIndex < 0 ) return "" ;
444
- if ( ! lastIndex ) return "[object Object]" ;
445
-
446
- const valueLen = 15 ; // max possible length of element len("[object Object]")
447
- var sepLen = separator . length ;
448
- var estLen = ( valueLen + sepLen ) * lastIndex + valueLen ;
449
- var result = changetype < string > ( __alloc ( estLen << 1 , idof < string > ( ) ) ) ;
450
- var offset = 0 ;
451
- var value : T ;
452
- for ( let i = 0 ; i < lastIndex ; ++ i ) {
453
- value = load < T > ( dataStart + ( < usize > i << alignof < T > ( ) ) ) ;
454
- if ( value ) {
455
- memory . copy (
456
- changetype < usize > ( result ) + ( < usize > offset << 1 ) ,
457
- changetype < usize > ( "[object Object]" ) ,
458
- < usize > valueLen << 1
459
- ) ;
460
- offset += valueLen ;
461
- }
462
- if ( sepLen ) {
463
- memory . copy (
464
- changetype < usize > ( result ) + ( < usize > offset << 1 ) ,
465
- changetype < usize > ( separator ) ,
466
- < usize > sepLen << 1
467
- ) ;
468
- offset += sepLen ;
469
- }
470
- }
471
- if ( load < T > ( dataStart + ( < usize > lastIndex << alignof < T > ( ) ) ) ) {
472
- memory . copy (
473
- changetype < usize > ( result ) + ( < usize > offset << 1 ) ,
474
- changetype < usize > ( "[object Object]" ) ,
475
- < usize > valueLen << 1
476
- ) ;
477
- offset += valueLen ;
478
- }
479
- if ( estLen > offset ) return result . substring ( 0 , offset ) ;
439
+ if ( value !== null ) result += value . toString ( ) ;
480
440
return result ;
481
441
}
482
442
0 commit comments