@@ -384,6 +384,45 @@ exports.main = function main(argv, options, callback) {
384384 // Finish parsing
385385 const program = assemblyscript . finishParsing ( parser ) ;
386386
387+ // Set up optimization levels
388+ var optimizeLevel = - 1 ;
389+ var shrinkLevel = 0 ;
390+ var debugInfo = ! args . noDebug ;
391+ if ( args . optimize !== false ) {
392+ if ( typeof args . optimize === "number" ) {
393+ optimizeLevel = args . optimize ;
394+ } else if ( args [ "0" ] ) {
395+ optimizeLevel = 0 ;
396+ } else if ( args [ "1" ] ) {
397+ optimizeLevel = 1 ;
398+ } else if ( args [ "2" ] ) {
399+ optimizeLevel = 2 ;
400+ } else if ( args [ "3" ] ) {
401+ optimizeLevel = 3 ;
402+ } else if ( args . optimize === true ) {
403+ optimizeLevel = exports . defaultOptimizeLevel ;
404+ shrinkLevel = exports . defaultShrinkLevel ;
405+ } else
406+ optimizeLevel = 0 ;
407+ }
408+ if ( args [ "s" ] ) {
409+ shrinkLevel = 1 ;
410+ } else if ( args [ "z" ] ) {
411+ shrinkLevel = 2 ;
412+ }
413+ if ( typeof args . optimizeLevel === "number" ) {
414+ optimizeLevel = args . optimizeLevel ;
415+ }
416+ if ( typeof args . shrinkLevel === "number" ) {
417+ shrinkLevel = args . shrinkLevel ;
418+ } else if ( args . shrinkLevel === "s" ) {
419+ shrinkLevel = 1 ;
420+ } else if ( args . shrinkLevel === "z" ) {
421+ shrinkLevel = 2 ;
422+ }
423+ optimizeLevel = Math . max ( optimizeLevel , 0 ) ;
424+ shrinkLevel = Math . max ( shrinkLevel , 0 ) ;
425+
387426 // Begin compilation
388427 const compilerOptions = assemblyscript . createOptions ( ) ;
389428 assemblyscript . setTarget ( compilerOptions , 0 ) ;
@@ -393,6 +432,7 @@ exports.main = function main(argv, options, callback) {
393432 assemblyscript . setImportTable ( compilerOptions , ! ! args . importTable ) ;
394433 assemblyscript . setMemoryBase ( compilerOptions , args . memoryBase >>> 0 ) ;
395434 assemblyscript . setSourceMap ( compilerOptions , args . sourceMap != null ) ;
435+ assemblyscript . setOptimizeLevelHints ( compilerOptions , optimizeLevel , shrinkLevel ) ;
396436
397437 // Initialize default aliases
398438 assemblyscript . setGlobalAlias ( compilerOptions , "Math" , "NativeMath" ) ;
@@ -469,51 +509,11 @@ exports.main = function main(argv, options, callback) {
469509 return callback ( Error ( "Unsupported trap mode" ) ) ;
470510 }
471511
472- var optimizeLevel = - 1 ;
473- var shrinkLevel = 0 ;
474- var debugInfo = ! args . noDebug ;
475-
476- if ( args . optimize !== false ) {
477- if ( typeof args . optimize === "number" ) {
478- optimizeLevel = args . optimize ;
479- } else if ( args [ "0" ] ) {
480- optimizeLevel = 0 ;
481- } else if ( args [ "1" ] ) {
482- optimizeLevel = 1 ;
483- } else if ( args [ "2" ] ) {
484- optimizeLevel = 2 ;
485- } else if ( args [ "3" ] ) {
486- optimizeLevel = 3 ;
487- } else if ( args . optimize === true ) {
488- optimizeLevel = exports . defaultOptimizeLevel ;
489- shrinkLevel = exports . defaultShrinkLevel ;
490- } else
491- optimizeLevel = 0 ;
492- }
493-
494- if ( args [ "s" ] ) {
495- shrinkLevel = 1 ;
496- } else if ( args [ "z" ] ) {
497- shrinkLevel = 2 ;
498- }
499-
500- if ( typeof args . optimizeLevel === "number" ) {
501- optimizeLevel = args . optimizeLevel ;
502- }
503-
504- if ( typeof args . shrinkLevel === "number" ) {
505- shrinkLevel = args . shrinkLevel ;
506- } else if ( args . shrinkLevel === "s" ) {
507- shrinkLevel = 1 ;
508- } else if ( args . shrinkLevel === "z" ) {
509- shrinkLevel = 2 ;
510- }
511-
512512 // Implicitly run costly non-LLVM optimizations on -O3 or -Oz
513513 // see: https://github.com/WebAssembly/binaryen/pull/1596
514514 if ( optimizeLevel >= 3 || shrinkLevel >= 2 ) optimizeLevel = 4 ;
515515
516- module . setOptimizeLevel ( optimizeLevel > 0 ? optimizeLevel : 0 ) ;
516+ module . setOptimizeLevel ( optimizeLevel ) ;
517517 module . setShrinkLevel ( shrinkLevel ) ;
518518 module . setDebugInfo ( debugInfo ) ;
519519
@@ -531,7 +531,7 @@ exports.main = function main(argv, options, callback) {
531531 }
532532
533533 // Optimize the module if requested
534- if ( optimizeLevel >= 0 ) {
534+ if ( optimizeLevel > 0 || shrinkLevel > 0 ) {
535535 stats . optimizeCount ++ ;
536536 stats . optimizeTime += measure ( ( ) => {
537537 module . optimize ( ) ;
0 commit comments