File tree Expand file tree Collapse file tree 2 files changed +19
-0
lines changed
Expand file tree Collapse file tree 2 files changed +19
-0
lines changed Original file line number Diff line number Diff line change @@ -831,6 +831,11 @@ export class Compiler extends DiagnosticEmitter {
831831 }
832832 }
833833
834+ if ( options . willOptimize ) {
835+ // Binaryen will split this up more efficiently
836+ memorySegments = module . combineMemorySegments ( memorySegments ) ;
837+ }
838+
834839 // Setup internal memory with default name "0"
835840 module . setMemory (
836841 initialPages ,
Original file line number Diff line number Diff line change @@ -2337,6 +2337,20 @@ export class Module {
23372337 /** Unlimited memory constant. */
23382338 static readonly UNLIMITED_MEMORY : Index = < Index > - 1 ;
23392339
2340+ combineMemorySegments (
2341+ segments : MemorySegment [ ]
2342+ ) : MemorySegment [ ] {
2343+ if ( ! segments . length ) return segments ;
2344+ segments = segments . slice ( 0 ) ;
2345+ let lastSegment = segments [ segments . length - 1 ] ;
2346+ let length = u32 ( lastSegment . offset ) + lastSegment . buffer . length ;
2347+ let newBuffer = new Uint8Array ( u32 ( length ) ) ;
2348+ segments . forEach ( segment => {
2349+ newBuffer . set ( segment . buffer , u32 ( segment . offset ) ) ;
2350+ } ) ;
2351+ return [ new MemorySegment ( newBuffer , i64_new ( 0 ) ) ] ;
2352+ }
2353+
23402354 setMemory (
23412355 initial : Index ,
23422356 maximum : Index ,
You can’t perform that action at this time.
0 commit comments