[jsinterp] Adding object ast to parser test

This commit is contained in:
sulyi 2016-12-12 17:23:52 +01:00
parent cf4c9c3db8
commit 558290d2b5
3 changed files with 48 additions and 7 deletions

View File

@ -732,7 +732,6 @@ class TestJSInterpreterParser(unittest.TestCase):
self.assertEqual(list(jsi.statements()), ast)
def test_switch(self):
# ASAP switch statement test
jsi = JSInterpreter(
'''
function a(x) {
@ -898,7 +897,6 @@ class TestJSInterpreterParser(unittest.TestCase):
ast = []
self.assertEqual(list(jsi.statements()), ast)
@unittest.skip('Test not yet implemented: missing ast')
def test_object(self):
# ASAP object literal test
jsi = JSInterpreter('''
@ -911,8 +909,50 @@ class TestJSInterpreterParser(unittest.TestCase):
return o;
}
''')
ast = []
self.assertEqual(list(jsi.statements()), ast)
ast = [
(Token.FUNC, 'f', [],
(Token.BLOCK, [
(Token.VAR,
zip(['o'],
[(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.OBJECT, [
('a', (Token.PROPVALUE, (Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.INT, 7), None, None)
]), None))),
('b', (Token.PROPGET, (Token.BLOCK, [
(Token.RETURN, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.RSV, 'this'), None, (Token.FIELD, 'a', None)),
(Token.MEMBER, (Token.INT, 1), None, None),
(Token.OP, _OPERATORS['+'][1])
]), None)]))
]))),
('c', (Token.PROPSET, 'x', (Token.BLOCK, [
(Token.EXPR, [
(Token.ASSIGN,
_ASSIGN_OPERATORS['='][1],
(Token.OPEXPR, [
(Token.MEMBER, (Token.RSV, 'this'), None, (Token.FIELD, 'a', None))
]),
(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.ID, 'x'), None, None),
(Token.MEMBER, (Token.INT, 2), None, None),
(Token.OP, _OPERATORS['/'][1])
]), None))
])
])))
]),
None, None)
]), None)]
)
),
(Token.RETURN, (Token.EXPR, [(Token.ASSIGN, None, (Token.OPEXPR, [
(Token.MEMBER, (Token.ID, 'o'), None, None)]), None)]))
]))
]
result = list(jsi.statements())
self.assertEqual(list(traverse(result)), list(traverse(ast)))
@unittest.skip('Test not yet implemented: missing code and ast')
def test_try(self):

View File

@ -11,7 +11,7 @@ _token_keys = ('COPEN', 'CCLOSE', 'POPEN', 'PCLOSE', 'SOPEN', 'SCLOSE',
'BOR', 'BXOR', 'BAND', 'RSHIFT', 'LSHIFT', 'URSHIFT', 'SUB', 'ADD', 'MOD', 'DIV', 'MUL',
'OP', 'AOP', 'UOP', 'LOP', 'REL',
'COMMENT', 'TOKEN', 'PUNCT',
'NULL', 'BOOL', 'ID', 'STR', 'INT', 'FLOAT', 'REGEX',
'NULL', 'BOOL', 'ID', 'STR', 'INT', 'FLOAT', 'REGEX', 'OBJECT',
'REFLAGS', 'REBODY',
'FUNC',
'BLOCK', 'VAR', 'EXPR', 'IF', 'ITER', 'CONTINUE', 'BREAK', 'RETURN', 'WITH', 'LABEL', 'SWITCH',

View File

@ -516,9 +516,10 @@ class JSInterpreter(object):
property_list = []
while True:
token_id, token_value, token_pos = token_stream.pop()
if token_id.CCLOSE:
token_stream.pop()
if token_id is Token.CCLOSE:
break
elif token_id is Token.COMMA:
continue
# ASAP refactor
elif token_value == 'get':
token_id, token_value, token_pos = token_stream.pop()