desugarBinding_(bindingTree, statements, declarationType) {
    let varName = this.getTempIdentifier();
    let binding = createBindingIdentifier(varName);
    let idExpr = createIdentifierExpression(varName);

    let desugaring;
    if (declarationType === null)
      desugaring = new AssignmentExpressionDesugaring(idExpr);
    else
      desugaring = new VariableDeclarationDesugaring(idExpr);

    this.desugarPattern_(desugaring, bindingTree);

    if (declarationType === null) {
      statements.push(createExpressionStatement(
          createCommaExpression(desugaring.expressions)));
    } else {
      statements.push(
          createVariableStatement(
              // Desugar more.
              this.transformVariableDeclarationList(
                  createVariableDeclarationList(
                      declarationType,
                      desugaring.declarations))));
    }

    return binding;
  }
Helper for transformations that transforms a binding to a temp binding
as well as a statement added into a block. For example, this is used by
function, for-in/of and catch.
@param  {ParseTree} bindingTree The tree with the binding pattern.
@param  {Array} statements Array that we add the assignment/variable
    declaration to.
@param {TokenType?} declarationType The kind of variable declaration to
    generate or null if an assignment expression is to be used.
@return {BindingIdentifier} The binding tree.