diff --git a/youtube_dl/jsinterp/jsinterp.py b/youtube_dl/jsinterp/jsinterp.py index dae614945..0232f8d20 100644 --- a/youtube_dl/jsinterp/jsinterp.py +++ b/youtube_dl/jsinterp/jsinterp.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import re from ..utils import ExtractorError -from .tstream import TokenStream +from .tstream import TokenStream, _UNARY_OPERATORS from .jsgrammar import Token, token_keys @@ -741,6 +741,10 @@ class JSInterpreter(object): has_prefix = True while has_prefix: peek_id, peek_value, peek_pos = token_stream.peek() + if peek_id is Token.OP and peek_value[0] in (Token.ADD, Token.SUB): + # any binary operators will be consumed later + peek_id = Token.UOP + peek_value = {Token.ADD: _UNARY_OPERATORS['+'], Token.SUB: _UNARY_OPERATORS['-']}[peek_value[0]] if peek_id is Token.UOP: name, op = peek_value had_inc = name in (Token.INC, Token.DEC) diff --git a/youtube_dl/jsinterp/tstream.py b/youtube_dl/jsinterp/tstream.py index 50c137894..e4786b5ed 100644 --- a/youtube_dl/jsinterp/tstream.py +++ b/youtube_dl/jsinterp/tstream.py @@ -138,10 +138,6 @@ class TokenStream(object): elif token_id is Token.ID: yield (token_id, token_value, pos) elif token_id in _operator_lookup: - # FIXME signed values - if (token_id is Token.OP and token_value in ('-', '+') and - self._last[0] not in token_keys and self._last[0] is not Token.PCLOSE): - token_id = Token.UOP yield (token_id if token_value != 'in' else Token.IN, _operator_lookup[token_id][token_value], pos)