Пример #1
0
 def testNegatedNumber(self):
     lxr = lexer.Lexer(version=4)
     lxr._process_line(b'-1.234567890e-6\n')
     self.assertEqual(3, len(lxr._tokens))
     self.assertEqual(lexer.TokSymbol(b'-'),
                      lxr._tokens[0])
     self.assertEqual(lexer.TokNumber(b'1.234567890e-6'),
                      lxr._tokens[1])
Пример #2
0
 def testRequireWalkerOptionsTable(self):
     ast = lua.Lua.from_lines([
         b'print("hi")',
         b'require("foo", {use_game_loop=true})',
         b'x = 7\n'], 8)
     result = list(build.RequireWalker(ast.tokens, ast.root).walk())
     self.assertEquals(1, len(result))
     self.assertEquals((b'foo', True, lexer.TokSymbol(b'(')), result[0])
Пример #3
0
 def testRequireWalkerExpression(self):
     ast = lua.Lua.from_lines([
         b'print("hi")',
         b'foomod = require("foo")',
         b'x = 7\n'], 8)
     result = list(build.RequireWalker(ast.tokens, ast.root).walk())
     self.assertEquals(1, len(result))
     self.assertEquals((b'foo', False, lexer.TokSymbol(b'(')), result[0])
Пример #4
0
 def testValidLuaNoErrors(self):
     lxr = lexer.Lexer(version=4)
     for line in VALID_LUA.split(b'\n'):
         lxr._process_line(line)
     tokens = lxr.tokens
     self.assertEqual(lexer.TokName(b'v1'), tokens[0])
     self.assertEqual(lexer.TokSpace(b' '), tokens[1])
     self.assertEqual(lexer.TokSymbol(b'='), tokens[2])
     self.assertEqual(lexer.TokSpace(b' '), tokens[3])
     self.assertEqual(lexer.TokKeyword(b'nil'), tokens[4])
Пример #5
0
 def testCursorAccept(self):
     p = get_parser('break name 7.42 -- Comment text\n"string literal" ==')
     self.assertEqual(0, p._pos)
     self.assertIsNone(p._accept(lexer.TokName))
     self.assertIsNone(p._accept(lexer.TokKeyword('and')))
     self.assertIsNotNone(p._accept(lexer.TokKeyword('break')))
     self.assertEqual(1, p._pos)
     self.assertIsNotNone(p._accept(lexer.TokName))
     self.assertIsNotNone(p._accept(lexer.TokNumber))
     self.assertIsNotNone(p._accept(lexer.TokString))
     self.assertIsNotNone(p._accept(lexer.TokSymbol('==')))
     self.assertEqual(11, p._pos)
Пример #6
0
 def testCursorAcceptStopsAtMaxPos(self):
     p = get_parser(b'break name 7.42 -- Comment text\n"string literal" ==')
     p._max_pos = 4
     self.assertEqual(0, p._pos)
     self.assertIsNone(p._accept(lexer.TokName))
     self.assertIsNone(p._accept(lexer.TokKeyword(b'and')))
     self.assertIsNotNone(p._accept(lexer.TokKeyword(b'break')))
     self.assertEqual(1, p._pos)
     self.assertIsNotNone(p._accept(lexer.TokName))
     self.assertIsNone(p._accept(lexer.TokNumber))
     self.assertIsNone(p._accept(lexer.TokString))
     self.assertIsNone(p._accept(lexer.TokSymbol(b'==')))
     self.assertEqual(3, p._pos)
Пример #7
0
 def testStatAssignment(self):
     p = get_parser('foo, bar, baz = 1, 2, 3')
     node = p._stat()
     self.assertIsNotNone(node)
     self.assertEqual(17, p._pos)
     self.assertEqual(3, len(node.varlist.vars))
     self.assertEqual('foo', node.varlist.vars[0].name.value)
     self.assertEqual('bar', node.varlist.vars[1].name.value)
     self.assertEqual('baz', node.varlist.vars[2].name.value)
     self.assertTrue(node.assignop.matches(lexer.TokSymbol('=')))
     self.assertEqual(3, len(node.explist.exps))
     self.assertTrue(node.explist.exps[0].value.matches(
         lexer.TokNumber('1')))
     self.assertTrue(node.explist.exps[1].value.matches(
         lexer.TokNumber('2')))
     self.assertTrue(node.explist.exps[2].value.matches(
         lexer.TokNumber('3')))
Пример #8
0
def main(orig_args):
    arg_parser = _get_argparser()
    args = arg_parser.parse_args(args=orig_args)

    assert args.lua.endswith('.lua')
    game_fname = args.lua[:-len('.lua')] + '.p8'

    my_game = game.Game.make_empty_game(filename=game_fname)
    my_lexer = lexer.Lexer(version=4)
    with open(args.lua, 'rb') as lua_fh:
        my_lexer.process_lines(lua_fh)

    my_textlib = lzwlib.LzwLib(start_addr=args.startaddr,
                               end_addr=args.endaddr)

    saw_star = False
    for i, token in enumerate(my_lexer._tokens):
        if token.matches(lexer.TokSymbol(b'*')):
            saw_star = True
        elif token.matches(lexer.TokString) and saw_star:
            sid = my_textlib.id_for_string(token.value.decode())
            my_lexer._tokens[i - 1] = lexer.TokSpace(b'')
            my_lexer._tokens[i] = lexer.TokString(str.encode(sid))
            saw_star = False
        else:
            saw_star = False

    textlib_lua = str.encode(my_textlib.generate_lua())
    my_lexer.process_lines([(l + b'\n') for l in textlib_lua.split(b'\n')])

    my_game.lua._lexer = my_lexer
    my_game.lua._parser.process_tokens(my_game.lua._lexer.tokens)

    text_bytes = my_textlib.as_bytes()
    my_game.write_cart_data(text_bytes, args.startaddr)

    with open(game_fname, 'wb') as outstr:
        my_game.to_p8_file(outstr, filename=game_fname)

    return 0
Пример #9
0
    def testStatAssignmentAnonymousFunctionTable(self):
        p = get_parser('''
player =
{
    init=function(this)
        print(t1)
    end,
    update=function(this)
        print(t2)
    end,
    draw=function(this)
        print(t3)
    end
}
''')
        node = p._stat()
        self.assertIsNotNone(node)
        self.assertEqual(61, p._pos)
        self.assertEqual(1, len(node.varlist.vars))
        self.assertEqual('player', node.varlist.vars[0].name.value)
        self.assertTrue(node.assignop.matches(lexer.TokSymbol('=')))
        self.assertEqual(1, len(node.explist.exps))
        self.assertEqual(3, len(node.explist.exps[0].value.fields))
        self.assertEqual('init',
                         node.explist.exps[0].value.fields[0].key_name.value)
        self.assertTrue(
            isinstance(node.explist.exps[0].value.fields[0].exp.value,
                       parser.Function))
        self.assertEqual('update',
                         node.explist.exps[0].value.fields[1].key_name.value)
        self.assertTrue(
            isinstance(node.explist.exps[0].value.fields[1].exp.value,
                       parser.Function))
        self.assertEqual('draw',
                         node.explist.exps[0].value.fields[2].key_name.value)
        self.assertTrue(
            isinstance(node.explist.exps[0].value.fields[2].exp.value,
                       parser.Function))
Пример #10
0
 def testThreeDots(self):
     lxr = lexer.Lexer(version=4)
     lxr._process_line(b'...\n')
     self.assertEqual(2, len(lxr._tokens))
     self.assertEqual(lexer.TokSymbol(b'...'), lxr._tokens[0])