DestructuringDeclTreeImpl(
      final ExpressionStatement exprStat, final ExpressionTree lhs, final ExpressionTree init) {
    super(exprStat);
    assert exprStat.destructuringDeclarationType() != null
        : "expecting a destructuring decl. statement";

    this.declType = exprStat.destructuringDeclarationType();
    this.lhs = lhs;
    this.init = init;
  }
 @Override
 public boolean enterExpressionStatement(final ExpressionStatement expressionStatement) {
   curStat =
       new ExpressionStatementTreeImpl(
           expressionStatement, translateExpr(expressionStatement.getExpression()));
   return false;
 }
 @Override
 public boolean enterExpressionStatement(final ExpressionStatement expressionStatement) {
   final Expression expr = expressionStatement.getExpression();
   if (!expr.isSelfModifying()) {
     tagNeverOptimistic(expr);
   }
   return true;
 }