pakmanaged.js
function parseUnaryExpression() {
            var marker, token, expr;
    
            if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {
                return parsePostfixExpression();
            }
    
            if (match('++') || match('--')) {
                marker = markerCreate();
                token = lex();
                expr = parseUnaryExpression();
                // 11.4.4, 11.4.5
                if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
                    throwErrorTolerant({}, Messages.StrictLHSPrefix);
                }
    
                if (!isLeftHandSide(expr)) {
                    throwError({}, Messages.InvalidLHSInAssignment);
                }
    
                return markerApply(marker, delegate.createUnaryExpression(token.value, expr));
            }
    
            if (match('+') || match('-') || match('~') || match('!')) {
                marker = markerCreate();
                token = lex();
                expr = parseUnaryExpression();
                return markerApply(marker, delegate.createUnaryExpression(token.value, expr));
            }
    
            if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {
                marker = markerCreate();
                token = lex();
                expr = parseUnaryExpression();
                expr = markerApply(marker, delegate.createUnaryExpression(token.value, expr));
                if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {
                    throwErrorTolerant({}, Messages.StrictDelete);
                }
                return expr;
            }
    
            return parsePostfixExpression();
        }
function parseUnaryExpression() {
            var marker, token, expr;
    
            if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {
                return parsePostfixExpression();
            }
    
            if (match('++') || match('--')) {
                marker = markerCreate();
                token = lex();
                expr = parseUnaryExpression();
                // 11.4.4, 11.4.5
                if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
                    throwErrorTolerant({}, Messages.StrictLHSPrefix);
                }
    
                if (!isLeftHandSide(expr)) {
                    throwError({}, Messages.InvalidLHSInAssignment);
                }
    
                return markerApply(marker, delegate.createUnaryExpression(token.value, expr));
            }
    
            if (match('+') || match('-') || match('~') || match('!')) {
                marker = markerCreate();
                token = lex();
                expr = parseUnaryExpression();
                return markerApply(marker, delegate.createUnaryExpression(token.value, expr));
            }
    
            if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {
                marker = markerCreate();
                token = lex();
                expr = parseUnaryExpression();
                expr = markerApply(marker, delegate.createUnaryExpression(token.value, expr));
                if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {
                    throwErrorTolerant({}, Messages.StrictDelete);
                }
                return expr;
            }
    
            return parsePostfixExpression();
        }
11.4 Unary Operators