@@ -8111,12 +8111,13 @@ export class Compiler extends DiagnosticEmitter {
8111
8111
}
8112
8112
8113
8113
// Compile to a `StaticArray<string>#join("") in the general case
8114
- let length = numParts + numExpressions ;
8115
- let values = new Array < usize > ( length ) ;
8116
- values [ 0 ] = this . ensureStaticString ( parts [ 0 ] ) ;
8114
+ let expressionPositions = new Array < i32 > ( numExpressions ) ;
8115
+ let values = new Array < usize > ( ) ;
8116
+ if ( parts [ 0 ] . length > 0 ) values . push ( this . ensureStaticString ( parts [ 0 ] ) ) ;
8117
8117
for ( let i = 1 ; i < numParts ; ++ i ) {
8118
- values [ 2 * i - 1 ] = module . usize ( 0 ) ;
8119
- values [ 2 * i ] = this . ensureStaticString ( parts [ i ] ) ;
8118
+ expressionPositions [ i - 1 ] = values . length ;
8119
+ values . push ( module . usize ( 0 ) ) ;
8120
+ if ( parts [ i ] . length > 0 ) values . push ( this . ensureStaticString ( parts [ i ] ) ) ;
8120
8121
}
8121
8122
let arrayInstance = assert ( this . resolver . resolveClass ( this . program . staticArrayPrototype , [ stringType ] ) ) ;
8122
8123
let segment = this . addStaticBuffer ( stringType , values , arrayInstance . id ) ;
@@ -8145,7 +8146,7 @@ export class Compiler extends DiagnosticEmitter {
8145
8146
for ( let i = 0 ; i < numExpressions ; ++ i ) {
8146
8147
stmts [ numExpressions + i ] = this . makeCallDirect ( indexedSetInstance , [
8147
8148
module . usize ( offset ) ,
8148
- module . i32 ( 2 * i + 1 ) ,
8149
+ module . i32 ( expressionPositions [ i ] ) ,
8149
8150
module . local_get ( temps [ i ] . index , stringType . toRef ( ) )
8150
8151
] , expression ) ;
8151
8152
flow . freeTempLocal ( temps [ i ] ) ;
0 commit comments