code: function parseUnaryExpression() {
          var token, expr;
  
          if (match('++') || match('--')) {
              token = lex();
              expr = parseUnaryExpression();
              // 11.4.4, 11.4.5
              if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
                  throwError({}, Messages.StrictLHSPrefix);
              }
              expr = {
                  type: Syntax.UpdateExpression,
                  operator: token.value,
                  argument: expr,
                  prefix: true
              };
              return expr;
          }
  
          if (match('+') || match('-') || match('~') || match('!')) {
              expr = {
                  type: Syntax.UnaryExpression,
                  operator: lex().value,
                  argument: parseUnaryExpression()
              };
              return expr;
          }
  
          if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {
              expr = {
                  type: Syntax.UnaryExpression,
                  operator: lex().value,
                  argument: parseUnaryExpression()
              };
              if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {
                  throwError({}, Messages.StrictDelete);
              }
              return expr;
          }
  
          return parsePostfixExpression();
      }
docs: 11.4 Unary Operators