var replace_all = value_def;
if (!replace_all && lhs instanceof AST_SymbolRef) {
var def = lhs.definition();
- replace_all = def.references.length - def.replaced == 1;
+ if (def.references.length - def.replaced == (candidate instanceof AST_VarDef ? 1 : 2)) {
+ replace_all = true;
+ }
}
var side_effects = value_has_side_effects(candidate);
var may_throw = candidate.may_throw(compressor);
if (expr instanceof AST_Assign && !expr.left.has_side_effects(compressor)
|| expr instanceof AST_Unary && (expr.operator == "++" || expr.operator == "--")) {
candidates.push(expr);
+ } else if (expr instanceof AST_Call) {
+ extract_candidates(expr.expression);
+ expr.args.forEach(extract_candidates);
} else if (expr instanceof AST_Case) {
extract_candidates(expr.expression);
} else if (expr instanceof AST_Conditional) {
function find_stop(node, level) {
var parent = scanner.parent(level);
+ if (parent instanceof AST_Call) return node;
if (parent instanceof AST_Case) return node;
if (parent instanceof AST_Conditional) return node;
if (parent instanceof AST_Exit) return node;