def test_generate(): f = py.path.local(__file__).dirpath().join("pypackrat.py") from pypackrat import PyPackratSyntaxParser p = PyPackratSyntaxParser(syntax) t = p.file() t = t.visit(TreeOptimizer()) visitor = ParserBuilder() t.visit(visitor) code = visitor.get_code() content = """ from rpython.rlib.parsing.tree import Nonterminal, Symbol from makepackrat import PackratParser, BacktrackException, Status %s class PyPackratSyntaxParser(PackratParser): def __init__(self, stream): self.init_parser(stream) forbidden = dict.fromkeys(("__weakref__ __doc__ " "__dict__ __module__").split()) initthere = "__init__" in PyPackratSyntaxParser.__dict__ for key, value in Parser.__dict__.iteritems(): if key not in PyPackratSyntaxParser.__dict__ and key not in forbidden: setattr(PyPackratSyntaxParser, key, value) PyPackratSyntaxParser.init_parser = Parser.__init__.im_func """ % (code, ) print content f.write(content)
def test_generate(): f = py.path.local(__file__).dirpath().join("pypackrat.py") from pypackrat import PyPackratSyntaxParser p = PyPackratSyntaxParser(syntax) t = p.file() t = t.visit(TreeOptimizer()) visitor = ParserBuilder() t.visit(visitor) code = visitor.get_code() content = """ from pypy.rlib.parsing.tree import Nonterminal, Symbol from makepackrat import PackratParser, BacktrackException, Status %s class PyPackratSyntaxParser(PackratParser): def __init__(self, stream): self.init_parser(stream) forbidden = dict.fromkeys(("__weakref__ __doc__ " "__dict__ __module__").split()) initthere = "__init__" in PyPackratSyntaxParser.__dict__ for key, value in Parser.__dict__.iteritems(): if key not in PyPackratSyntaxParser.__dict__ and key not in forbidden: setattr(PyPackratSyntaxParser, key, value) PyPackratSyntaxParser.init_parser = Parser.__init__.im_func """ % (code, ) print content f.write(content)
def __new__(cls, name_, bases, dct): if '__doc__' not in dct or dct['__doc__'] is None: return type.__new__(cls, name_, bases, dct) from pypackrat import PyPackratSyntaxParser import sys, new, inspect frame = sys._getframe(1) source = dct['__doc__'] p = PyPackratSyntaxParser(source) try: t = p.file() except BacktrackException, exc: print exc.error.nice_error_message("<docstring>", source) lineno, _ = exc.error.get_line_column(source) errorline = source.split("\n")[lineno] try: code = frame.f_code source = inspect.getsource(code) lineno_in_orig = source.split("\n").index(errorline) if lineno_in_orig >= 0: print "probable error position:" print "file:", code.co_filename print "line:", lineno_in_orig + code.co_firstlineno + 1 except (IOError, ValueError): pass raise exc
def __new__(cls, name_, bases, dct): if '__doc__' not in dct or dct['__doc__'] is None: return type.__new__(cls, name_, bases, dct) from pypackrat import PyPackratSyntaxParser import sys, new, inspect frame = sys._getframe(1) source = dct['__doc__'] p = PyPackratSyntaxParser(source) try: t = p.file() except BacktrackException as exc: print exc.error.nice_error_message("<docstring>", source) lineno, _ = exc.error.get_line_column(source) errorline = source.split("\n")[lineno] try: code = frame.f_code source = inspect.getsource(code) lineno_in_orig = source.split("\n").index(errorline) if lineno_in_orig >= 0: print "probable error position:" print "file:", code.co_filename print "line:", lineno_in_orig + code.co_firstlineno + 1 except (IOError, ValueError): pass raise exc t = t.visit(TreeOptimizer()) visitor = ParserBuilder() t.visit(visitor) pcls = visitor.make_parser() forbidden = dict.fromkeys(("__weakref__ __doc__ " "__dict__ __module__").split()) initthere = "__init__" in dct #XXX XXX XXX if 'BacktrackException' not in frame.f_globals: raise Exception("must import BacktrackException") if 'Status' not in frame.f_globals: raise Exception("must import Status") result = type.__new__(cls, name_, bases, dct) for key, value in pcls.__dict__.iteritems(): if isinstance(value, type): value.__module__ = result.__module__ #XXX help the annotator if isinstance(value, type(lambda: None)): value = new.function(value.__code__, frame.f_globals) if not hasattr(result, key) and key not in forbidden: setattr(result, key, value) if result.__init__ == object.__init__: result.__init__ = pcls.__dict__['__init__'] result.init_parser = pcls.__dict__['__init__'] result._code = visitor.get_code() return result
def __new__(cls, name_, bases, dct): if '__doc__' not in dct or dct['__doc__'] is None: return type.__new__(cls, name_, bases, dct) from pypackrat import PyPackratSyntaxParser import sys, new, inspect frame = sys._getframe(1) source = dct['__doc__'] p = PyPackratSyntaxParser(source) try: t = p.file() except BacktrackException as exc: print exc.error.nice_error_message("<docstring>", source) lineno, _ = exc.error.get_line_column(source) errorline = source.split("\n")[lineno] try: code = frame.f_code source = inspect.getsource(code) lineno_in_orig = source.split("\n").index(errorline) if lineno_in_orig >= 0: print "probable error position:" print "file:", code.co_filename print "line:", lineno_in_orig + code.co_firstlineno + 1 except (IOError, ValueError): pass raise exc t = t.visit(TreeOptimizer()) visitor = ParserBuilder() t.visit(visitor) pcls = visitor.make_parser() forbidden = dict.fromkeys(("__weakref__ __doc__ " "__dict__ __module__").split()) initthere = "__init__" in dct #XXX XXX XXX if 'BacktrackException' not in frame.f_globals: raise Exception("must import BacktrackException") if 'Status' not in frame.f_globals: raise Exception("must import Status") result = type.__new__(cls, name_, bases, dct) for key, value in pcls.__dict__.iteritems(): if isinstance(value, type): value.__module__ = result.__module__ #XXX help the annotator if isinstance(value, type(lambda: None)): value = new.function(value.func_code, frame.f_globals) if not hasattr(result, key) and key not in forbidden: setattr(result, key, value) if result.__init__ == object.__init__: result.__init__ = pcls.__dict__['__init__'] result.init_parser = pcls.__dict__['__init__'] result._code = visitor.get_code() return result