[jsinterp] Adding ast to while parser test
This commit is contained in:
parent
a2e42ed416
commit
4b8754c6b0
@ -882,19 +882,44 @@ class TestJSInterpreterParser(unittest.TestCase):
|
|||||||
]
|
]
|
||||||
self.assertEqual(list(jsi.statements()), ast)
|
self.assertEqual(list(jsi.statements()), ast)
|
||||||
|
|
||||||
@unittest.skip('Test not yet implemented: missing ast')
|
|
||||||
def test_while(self):
|
def test_while(self):
|
||||||
# ASAP while statement test
|
|
||||||
jsi = JSInterpreter('''
|
jsi = JSInterpreter('''
|
||||||
function f(x){
|
function f(x){
|
||||||
i = 1
|
i = 1;
|
||||||
while (i < x) {
|
while (i < x) {
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
''')
|
''')
|
||||||
ast = []
|
ast = [
|
||||||
|
(Token.FUNC, 'f', ['x'],
|
||||||
|
(Token.BLOCK, [
|
||||||
|
(Token.EXPR, [
|
||||||
|
(Token.ASSIGN, _ASSIGN_OPERATORS['='][1],
|
||||||
|
(Token.OPEXPR, [(Token.MEMBER, (Token.ID, 'i'), None, None)]),
|
||||||
|
(Token.ASSIGN, None, (Token.OPEXPR, [(Token.MEMBER, (Token.INT, 1), None, None)]), None))
|
||||||
|
]),
|
||||||
|
(Token.WHILE,
|
||||||
|
(Token.EXPR, [
|
||||||
|
(Token.ASSIGN, None, (Token.OPEXPR, [
|
||||||
|
(Token.MEMBER, (Token.ID, 'i'), None, None),
|
||||||
|
(Token.MEMBER, (Token.ID, 'x'), None, None),
|
||||||
|
(Token.REL, _RELATIONS['<'][1])
|
||||||
|
]), None)
|
||||||
|
]),
|
||||||
|
(Token.BLOCK, [
|
||||||
|
(Token.EXPR, [
|
||||||
|
(Token.ASSIGN, None, (Token.OPEXPR, [
|
||||||
|
(Token.MEMBER, (Token.ID, 'i'), None, None),
|
||||||
|
(Token.UOP, _UNARY_OPERATORS['++'][1])
|
||||||
|
]), None)
|
||||||
|
])
|
||||||
|
])),
|
||||||
|
(Token.RETURN, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
|
||||||
|
(Token.MEMBER, (Token.ID, 'i'), None, None)]), None)]))
|
||||||
|
]))
|
||||||
|
]
|
||||||
self.assertEqual(list(jsi.statements()), ast)
|
self.assertEqual(list(jsi.statements()), ast)
|
||||||
|
|
||||||
@unittest.skip('Test not yet implemented: missing code and ast')
|
@unittest.skip('Test not yet implemented: missing code and ast')
|
||||||
|
@ -307,7 +307,7 @@ class JSInterpreter(object):
|
|||||||
if token_id is not Token.PCLOSE:
|
if token_id is not Token.PCLOSE:
|
||||||
raise ExtractorError('''Expected ')' at %d''' % token_pos)
|
raise ExtractorError('''Expected ')' at %d''' % token_pos)
|
||||||
body = self._statement(token_stream, stack_top)
|
body = self._statement(token_stream, stack_top)
|
||||||
return (Token.DO, expr, body)
|
return (Token.WHILE, expr, body)
|
||||||
|
|
||||||
def _return_statement(self, token_stream, stack_top):
|
def _return_statement(self, token_stream, stack_top):
|
||||||
token_stream.pop()
|
token_stream.pop()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user