[jsinterp] Formatting code

This commit is contained in:
sulyi 2016-12-10 02:59:32 +01:00
parent a9c7310950
commit e392f7897d
2 changed files with 49 additions and 48 deletions

View File

@ -5,6 +5,7 @@ from __future__ import unicode_literals
# Allow direct execution
import os
import sys
if sys.version_info < (2, 7):
import unittest2 as unittest
else:
@ -36,7 +37,7 @@ class TestJSInterpreterParser(unittest.TestCase):
(Token.OPEXPR, [(Token.MEMBER, (Token.INT, 42), None, None)]),
None)
])
)]
)]
self.assertEqual(list(jsi.statements()), ast)
def test_calc(self):
@ -258,46 +259,47 @@ class TestJSInterpreterParser(unittest.TestCase):
jsi = JSInterpreter('return (1) + (2) * ((( (( (((((3)))))) )) ));')
ast = [
(Token.RETURN, (Token.EXPR, [
(Token.ASSIGN, None,
(Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 1), None, None)
]), None),]), None, None),
(Token.ASSIGN, None,
(Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 1), None, None)
]), None)]), None, None),
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 2), None, None)
]), None)]), None, None),
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 2), None, None)
]), None)]), None, None),
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 3), None, None)
(Token.MEMBER,
(Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 3), None, None)
]), None)]), None, None)
]), None)]), None, None)
]), None)]), None, None)
]), None)]), None, None)
]), None)]), None, None)
]), None)]), None, None)
]), None)]), None, None)
]), None)]), None, None)
]), None)]), None, None)
]), None)]), None, None)
]), None)]), None, None),
]), None)]), None, None),
(Token.OP, _OPERATORS['*'][1]),
(Token.OP, _OPERATORS['+'][1])
]), None)
]))
(Token.OP, _OPERATORS['*'][1]),
(Token.OP, _OPERATORS['+'][1])
]), None)
]))
]
self.assertEqual(list(jsi.statements()), ast)
@ -316,11 +318,11 @@ class TestJSInterpreterParser(unittest.TestCase):
(Token.ASSIGN,
_ASSIGN_OPERATORS['='][1],
(Token.OPEXPR, [(Token.MEMBER, (Token.ID, 'x'), None, None)]),
(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 30), None, None),
(Token.MEMBER, (Token.INT, 1), None, None),
(Token.OP, _OPERATORS['+'][1])
]),
(Token.ASSIGN, None,
(Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 30), None, None),
(Token.MEMBER, (Token.INT, 1), None, None),
(Token.OP, _OPERATORS['+'][1])]),
None))
]),
@ -335,16 +337,16 @@ class TestJSInterpreterParser(unittest.TestCase):
jsi = JSInterpreter('var x = 20; x += 30 + 1; return x;')
ast[1] = (Token.EXPR, [
(Token.ASSIGN,
_ASSIGN_OPERATORS['+='][1],
(Token.OPEXPR, [(Token.MEMBER, (Token.ID, 'x'), None, None)]),
(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 30), None, None),
(Token.MEMBER, (Token.INT, 1), None, None),
(Token.OP, _OPERATORS['+'][1])
]),
None))
])
(Token.ASSIGN,
_ASSIGN_OPERATORS['+='][1],
(Token.OPEXPR, [(Token.MEMBER, (Token.ID, 'x'), None, None)]),
(Token.ASSIGN, None,
(Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 30), None, None),
(Token.MEMBER, (Token.INT, 1), None, None),
(Token.OP, _OPERATORS['+'][1])]),
None))
])
self.assertEqual(list(jsi.statements()), ast)
jsi = JSInterpreter('var x = 20; x -= 30 + 1; return x;')
@ -352,11 +354,11 @@ class TestJSInterpreterParser(unittest.TestCase):
(Token.ASSIGN,
_ASSIGN_OPERATORS['-='][1],
(Token.OPEXPR, [(Token.MEMBER, (Token.ID, 'x'), None, None)]),
(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 30), None, None),
(Token.MEMBER, (Token.INT, 1), None, None),
(Token.OP, _OPERATORS['+'][1])
]),
(Token.ASSIGN, None,
(Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 30), None, None),
(Token.MEMBER, (Token.INT, 1), None, None),
(Token.OP, _OPERATORS['+'][1])]),
None))
])
self.assertEqual(list(jsi.statements()), ast)
@ -502,7 +504,7 @@ class TestJSInterpreterParser(unittest.TestCase):
ast = []
self.assertEqual(list(jsi.statements()), ast)
jsi = JSInterpreter('function x(a) { return a.split(""); }', objects={'a': 'abc'})
jsi = JSInterpreter('function x(a) { return a.split(""); }', variables={'a': 'abc'})
ast = []
self.assertEqual(list(jsi.statements()), ast)
@ -517,7 +519,7 @@ class TestJSInterpreterParser(unittest.TestCase):
self.assertEqual(list(jsi.statements()), ast)
def test_getfield(self):
jsi = JSInterpreter('return a.var;', objects={'a': {'var': 3}})
jsi = JSInterpreter('return a.var;', variables={'a': {'var': 3}})
ast = [(Token.RETURN,
(Token.EXPR, [
(Token.ASSIGN,
@ -533,5 +535,6 @@ class TestJSInterpreterParser(unittest.TestCase):
]
self.assertEqual(list(jsi.statements()), ast)
if __name__ == '__main__':
unittest.main()

View File

@ -3,7 +3,6 @@ from ..compat import compat_str
import re
from ..utils import ExtractorError
from .tstream import TokenStream
from .jsgrammar import Token
@ -223,7 +222,7 @@ class JSInterpreter(object):
peek_id, peek_value, peek_pos = token_stream.peek()
elif peek_id is Token.POPEN:
# TODO handle field query
raise ExtractorError('Field querry is not yet supported at %d' % peek_pos)
raise ExtractorError('Field query is not yet supported at %d' % peek_pos)
if peek_id is Token.ID:
token_stream.pop()
@ -470,7 +469,7 @@ class JSInterpreter(object):
def getvalue(self, ref):
if (ref.value is None or ref.value is self.undefined or
isinstance(ref.value, (int, float, str, compat_str, list))):
isinstance(ref.value, (int, float, compat_str, list))):
return ref.value
ref_id, ref_value = ref.value
if ref_id is Token.ID:
@ -510,7 +509,6 @@ class JSInterpreter(object):
name = stmt[0]
ref = None
abort = False
if name == 'funcdecl':
# TODO interpret funcdecl
raise ExtractorError('''Can't interpret statement called %s''' % name)
@ -523,7 +521,7 @@ class JSInterpreter(object):
elif name is Token.VAR:
for name, value in stmt[1]:
self.context.local_vars[name] = Reference(self.getvalue(self.interpret_expression(value)),
(self.context.local_vars, name))
(self.context.local_vars, name))
elif name is Token.EXPR:
for expr in stmt[1]:
ref = self.interpret_expression(expr)