pakmanaged.js
function reinterpretAsAssignmentBindingPattern(expr) {
            var i, len, property, element;
    
            if (expr.type === Syntax.ObjectExpression) {
                expr.type = Syntax.ObjectPattern;
                for (i = 0, len = expr.properties.length; i < len; i += 1) {
                    property = expr.properties[i];
                    if (property.type === Syntax.SpreadProperty) {
                        if (i < len - 1) {
                            throwError({}, Messages.PropertyAfterSpreadProperty);
                        }
                        reinterpretAsAssignmentBindingPattern(property.argument);
                    } else {
                        if (property.kind !== 'init') {
                            throwError({}, Messages.InvalidLHSInAssignment);
                        }
                        reinterpretAsAssignmentBindingPattern(property.value);
                    }
                }
            } else if (expr.type === Syntax.ArrayExpression) {
                expr.type = Syntax.ArrayPattern;
                for (i = 0, len = expr.elements.length; i < len; i += 1) {
                    element = expr.elements[i];
                    /* istanbul ignore else */
                    if (element) {
                        reinterpretAsAssignmentBindingPattern(element);
                    }
                }
            } else if (expr.type === Syntax.Identifier) {
                if (isRestrictedWord(expr.name)) {
                    throwError({}, Messages.InvalidLHSInAssignment);
                }
            } else if (expr.type === Syntax.SpreadElement) {
                reinterpretAsAssignmentBindingPattern(expr.argument);
                if (expr.argument.type === Syntax.ObjectPattern) {
                    throwError({}, Messages.ObjectPatternAsSpread);
                }
            } else {
                /* istanbul ignore else */
                if (expr.type !== Syntax.MemberExpression && expr.type !== Syntax.CallExpression && expr.type !== Syntax.NewExpression) {
                    throwError({}, Messages.InvalidLHSInAssignment);
                }
            }
        }
function reinterpretAsAssignmentBindingPattern(expr) {
            var i, len, property, element;
    
            if (expr.type === Syntax.ObjectExpression) {
                expr.type = Syntax.ObjectPattern;
                for (i = 0, len = expr.properties.length; i < len; i += 1) {
                    property = expr.properties[i];
                    if (property.type === Syntax.SpreadProperty) {
                        if (i < len - 1) {
                            throwError({}, Messages.PropertyAfterSpreadProperty);
                        }
                        reinterpretAsAssignmentBindingPattern(property.argument);
                    } else {
                        if (property.kind !== 'init') {
                            throwError({}, Messages.InvalidLHSInAssignment);
                        }
                        reinterpretAsAssignmentBindingPattern(property.value);
                    }
                }
            } else if (expr.type === Syntax.ArrayExpression) {
                expr.type = Syntax.ArrayPattern;
                for (i = 0, len = expr.elements.length; i < len; i += 1) {
                    element = expr.elements[i];
                    /* istanbul ignore else */
                    if (element) {
                        reinterpretAsAssignmentBindingPattern(element);
                    }
                }
            } else if (expr.type === Syntax.Identifier) {
                if (isRestrictedWord(expr.name)) {
                    throwError({}, Messages.InvalidLHSInAssignment);
                }
            } else if (expr.type === Syntax.SpreadElement) {
                reinterpretAsAssignmentBindingPattern(expr.argument);
                if (expr.argument.type === Syntax.ObjectPattern) {
                    throwError({}, Messages.ObjectPatternAsSpread);
                }
            } else {
                /* istanbul ignore else */
                if (expr.type !== Syntax.MemberExpression && expr.type !== Syntax.CallExpression && expr.type !== Syntax.NewExpression) {
                    throwError({}, Messages.InvalidLHSInAssignment);
                }
            }
        }
11.13 Assignment Operators 12.14.5 AssignmentPattern