Browse Source

[jsinterp] Support alternative function definition form

totalwebcasting
Yen Chi Hsuan 9 years ago
parent
commit
ff29bf81f8
2 changed files with 5 additions and 2 deletions
  1. +3
    -0
      test/test_jsinterp.py
  2. +2
    -2
      youtube_dl/jsinterp.py

+ 3
- 0
test/test_jsinterp.py View File

@ -19,6 +19,9 @@ class TestJSInterpreter(unittest.TestCase):
jsi = JSInterpreter('function x3(){return 42;}')
self.assertEqual(jsi.call_function('x3'), 42)
jsi = JSInterpreter('var x5 = function(){return 42;}')
self.assertEqual(jsi.call_function('x5'), 42)
def test_calc(self):
jsi = JSInterpreter('function x4(a){return 2*a+1;}')
self.assertEqual(jsi.call_function('x4', 3), 7)


+ 2
- 2
youtube_dl/jsinterp.py View File

@ -232,10 +232,10 @@ class JSInterpreter(object):
def extract_function(self, funcname):
func_m = re.search(
r'''(?x)
(?:function\s+%s|[{;]%s\s*=\s*function)\s*
(?:function\s+%s|[{;]%s\s*=\s*function|var\s+%s\s*=\s*function)\s*
\((?P<args>[^)]*)\)\s*
\{(?P<code>[^}]+)\}''' % (
re.escape(funcname), re.escape(funcname)),
re.escape(funcname), re.escape(funcname), re.escape(funcname)),
self.code)
if func_m is None:
raise ExtractorError('Could not find JS function %r' % funcname)


Loading…
Cancel
Save