@@ -1755,44 +1755,44 @@ export class Relooper {
17551755 }
17561756}
17571757
1758- // export function hasSideEffects(expr: ExpressionRef): bool {
1759- // // TODO: there's more
1760- // switch (_BinaryenExpressionGetId(expr)) {
1761- // case ExpressionId.LocalGet:
1762- // case ExpressionId.GlobalGet:
1763- // case ExpressionId.Const:
1764- // case ExpressionId.Nop: {
1765- // return false;
1766- // }
1767- // case ExpressionId.Block: {
1768- // for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {
1769- // if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;
1770- // }
1771- // return false;
1772- // }
1773- // case ExpressionId.If: {
1774- // return hasSideEffects(_BinaryenIfGetCondition(expr))
1775- // || hasSideEffects(_BinaryenIfGetIfTrue(expr))
1776- // || hasSideEffects(_BinaryenIfGetIfFalse(expr));
1777- // }
1778- // case ExpressionId.Unary: {
1779- // return hasSideEffects(_BinaryenUnaryGetValue(expr));
1780- // }
1781- // case ExpressionId.Binary: {
1782- // return hasSideEffects(_BinaryenBinaryGetLeft(expr))
1783- // || hasSideEffects(_BinaryenBinaryGetRight(expr));
1784- // }
1785- // case ExpressionId.Drop: {
1786- // return hasSideEffects(_BinaryenDropGetValue(expr));
1787- // }
1788- // case ExpressionId.Select: {
1789- // return hasSideEffects(_BinaryenSelectGetIfTrue(expr))
1790- // || hasSideEffects(_BinaryenSelectGetIfFalse(expr))
1791- // || hasSideEffects(_BinaryenSelectGetCondition(expr));
1792- // }
1793- // }
1794- // return true;
1795- // }
1758+ export function hasSideEffects ( expr : ExpressionRef ) : bool {
1759+ // TODO: there's more
1760+ switch ( _BinaryenExpressionGetId ( expr ) ) {
1761+ case ExpressionId . LocalGet :
1762+ case ExpressionId . GlobalGet :
1763+ case ExpressionId . Const :
1764+ case ExpressionId . Nop : {
1765+ return false ;
1766+ }
1767+ case ExpressionId . Block : {
1768+ for ( let i = 0 , k = _BinaryenBlockGetNumChildren ( expr ) ; i < k ; ++ i ) {
1769+ if ( hasSideEffects ( _BinaryenBlockGetChild ( expr , i ) ) ) return true ;
1770+ }
1771+ return false ;
1772+ }
1773+ case ExpressionId . If : {
1774+ return hasSideEffects ( _BinaryenIfGetCondition ( expr ) )
1775+ || hasSideEffects ( _BinaryenIfGetIfTrue ( expr ) )
1776+ || hasSideEffects ( _BinaryenIfGetIfFalse ( expr ) ) ;
1777+ }
1778+ case ExpressionId . Unary : {
1779+ return hasSideEffects ( _BinaryenUnaryGetValue ( expr ) ) ;
1780+ }
1781+ case ExpressionId . Binary : {
1782+ return hasSideEffects ( _BinaryenBinaryGetLeft ( expr ) )
1783+ || hasSideEffects ( _BinaryenBinaryGetRight ( expr ) ) ;
1784+ }
1785+ case ExpressionId . Drop : {
1786+ return hasSideEffects ( _BinaryenDropGetValue ( expr ) ) ;
1787+ }
1788+ case ExpressionId . Select : {
1789+ return hasSideEffects ( _BinaryenSelectGetIfTrue ( expr ) )
1790+ || hasSideEffects ( _BinaryenSelectGetIfFalse ( expr ) )
1791+ || hasSideEffects ( _BinaryenSelectGetCondition ( expr ) ) ;
1792+ }
1793+ }
1794+ return true ;
1795+ }
17961796
17971797// helpers
17981798// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js
0 commit comments