How to use the uncompyle6.parser.PythonParserSingle function in uncompyle6

To help you get started, we’ve selected a few uncompyle6 examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github rocky / python-uncompyle6 / uncompyle6 / parsers / parse26.py View on Github external
last -= 1
            while tokens[last-1] == 'COME_FROM' and tokens[last-2] == 'COME_FROM':
                last -= 1
            if tokens[last] == 'COME_FROM' and tokens[last-1] == 'COME_FROM':
                last -= 1
            if (tokens[last] == 'COME_FROM'
                and tokens[last-1] == 'END_FINALLY'
                    and tokens[last-2] == 'POP_TOP'):
                # A jump of 2 is a jump around POP_TOP, END_FINALLY which
                # would indicate try/else rather than try
                return (tokens[last-3].kind in frozenset(('JUMP_FORWARD', 'RETURN_VALUE'))
                        and (tokens[last-3] != 'JUMP_FORWARD' or tokens[last-3].attr == 2))


        return False
class Python26ParserSingle(Python2Parser, PythonParserSingle):
    pass

if __name__ == '__main__':
    # Check grammar
    p = Python26Parser()
    p.check_grammar()
    from uncompyle6 import PYTHON_VERSION, IS_PYPY
    if PYTHON_VERSION == 2.6:
        lhs, rhs, tokens, right_recursive, dup_rhs = p.check_sets()
        from uncompyle6.scanner import get_scanner
        s = get_scanner(PYTHON_VERSION, IS_PYPY)
        opcode_set = set(s.opc.opname).union(set(
            """JUMP_BACK CONTINUE RETURN_END_IF COME_FROM
               LOAD_GENEXPR LOAD_ASSERT LOAD_SETCOMP LOAD_DICTCOMP
               LAMBDA_MARKER RETURN_LAST
            """.split()))
github rocky / python-decompile3 / uncompyle6 / parsers / parse33.py View on Github external
"""
        # Store locals is only in Python 3.0 to 3.3
        stmt           ::= store_locals
        store_locals   ::= LOAD_FAST STORE_LOCALS
        """

    def customize_grammar_rules(self, tokens, customize):
        self.remove_rules("""
        # 3.3+ adds POP_BLOCKS
        whileTruestmt ::= SETUP_LOOP l_stmts_opt JUMP_BACK NOP COME_FROM_LOOP
        whileTruestmt ::= SETUP_LOOP l_stmts_opt JUMP_BACK POP_BLOCK NOP COME_FROM_LOOP
        """)
        super(Python33Parser, self).customize_grammar_rules(tokens, customize)
        return

class Python33ParserSingle(Python33Parser, PythonParserSingle):
    pass
github rocky / python-uncompyle6 / uncompyle6 / parsers / parse3.py View on Github external
if not isinstance(come_froms, Token):
                return tokens[first].offset > come_froms[-1].attr
            return False

        return False


class Python30Parser(Python3Parser):
    def p_30(self, args):
        """
        jmp_true ::= JUMP_IF_TRUE_OR_POP POP_TOP
        _ifstmts_jump ::= c_stmts_opt JUMP_FORWARD POP_TOP COME_FROM
        """


class Python3ParserSingle(Python3Parser, PythonParserSingle):
    pass


def info(args):
    # Check grammar
    p = Python3Parser()
    if len(args) > 0:
        arg = args[0]
        if arg == "3.5":
            from uncompyle6.parser.parse35 import Python35Parser

            p = Python35Parser()
        elif arg == "3.3":
            from uncompyle6.parser.parse33 import Python33Parser

            p = Python33Parser()
github rocky / python-uncompyle6 / uncompyle6 / parsers / parse34.py View on Github external
# This is 3.4 only
        yield_from ::= expr GET_ITER LOAD_CONST YIELD_FROM

        _ifstmts_jump ::= c_stmts_opt JUMP_ABSOLUTE JUMP_FORWARD COME_FROM
        """

    def customize_grammar_rules(self, tokens, customize):
        self.remove_rules("""
        yield_from    ::= expr expr YIELD_FROM
        # 3.4.2 has this. 3.4.4 may now
        # while1stmt ::= SETUP_LOOP l_stmts COME_FROM JUMP_BACK COME_FROM_LOOP
        """)
        super(Python34Parser, self).customize_grammar_rules(tokens, customize)
        return

class Python34ParserSingle(Python34Parser, PythonParserSingle):
    pass


if __name__ == '__main__':
    # Check grammar
    p = Python34Parser()
    p.check_grammar()
    from uncompyle6 import PYTHON_VERSION, IS_PYPY
    if PYTHON_VERSION == 3.4:
        lhs, rhs, tokens, right_recursive, dup_rhs = p.check_sets()
        from uncompyle6.scanner import get_scanner
        s = get_scanner(PYTHON_VERSION, IS_PYPY)
        opcode_set = set(s.opc.opname).union(set(
            """JUMP_BACK CONTINUE RETURN_END_IF COME_FROM
               LOAD_GENEXPR LOAD_ASSERT LOAD_SETCOMP LOAD_DICTCOMP LOAD_CLASSNAME
               LAMBDA_MARKER RETURN_LAST
github rocky / python-decompile3 / uncompyle6 / parsers / parse15.py View on Github external
importlist  ::= importlist IMPORT_FROM
        importlist  ::= IMPORT_FROM
        """

    def customize_grammar_rules(self, tokens, customize):
        super(Python15Parser, self).customize_grammar_rules(tokens, customize)
        for i, token in enumerate(tokens):
            opname = token.kind
            opname_base = opname[:opname.rfind('_')]

            if opname_base == 'UNPACK_LIST':
                self.addRule("store ::= unpack_list", nop_func)



class Python15ParserSingle(Python15Parser, PythonParserSingle):
    pass

if __name__ == '__main__':
    # Check grammar
    p = Python15Parser()
    p.check_grammar()
    p.dump_grammar()
github rocky / python-uncompyle6 / uncompyle6 / parsers / parse2.py View on Github external
leading_jump = except_handler[0]

                # We really don't care that this is a jump per-se. But
                # we could also check that this jumps to the end of the except if
                # desired.
                if isinstance(leading_jump, SyntaxTree):
                    except_handler_first_offset = leading_jump.first_child().off2int()
                else:
                    except_handler_first_offset = leading_jump.off2int()
                return first_come_from.attr > except_handler_first_offset


        return False


class Python2ParserSingle(Python2Parser, PythonParserSingle):
    pass


if __name__ == "__main__":
    # Check grammar
    p = Python2Parser()
    p.check_grammar()
github rocky / python-uncompyle6 / uncompyle6 / parsers / parse15.py View on Github external
importlist  ::= importlist IMPORT_FROM
        importlist  ::= IMPORT_FROM
        """

    def customize_grammar_rules(self, tokens, customize):
        super(Python15Parser, self).customize_grammar_rules(tokens, customize)
        for i, token in enumerate(tokens):
            opname = token.kind
            opname_base = opname[:opname.rfind('_')]

            if opname_base == 'UNPACK_LIST':
                self.addRule("store ::= unpack_list", nop_func)



class Python15ParserSingle(Python15Parser, PythonParserSingle):
    pass

if __name__ == '__main__':
    # Check grammar
    p = Python15Parser()
    p.check_grammar()
    p.dump_grammar()