These files are a subset of the python-2.7.2.tgz distribution from python.org. Changed files from PyMod-2.7.2 have been copied into the corresponding directories of this tree, replacing the original files in the distribution. Signed-off-by: daryl.mcdaniel@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13197 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Check for errs in the AST.
 | 
						|
 | 
						|
The Python parser does not catch all syntax errors.  Others, like
 | 
						|
assignments with invalid targets, are caught in the code generation
 | 
						|
phase.
 | 
						|
 | 
						|
The compiler package catches some errors in the transformer module.
 | 
						|
But it seems clearer to write checkers that use the AST to detect
 | 
						|
errors.
 | 
						|
"""
 | 
						|
 | 
						|
from compiler import ast, walk
 | 
						|
 | 
						|
def check(tree, multi=None):
 | 
						|
    v = SyntaxErrorChecker(multi)
 | 
						|
    walk(tree, v)
 | 
						|
    return v.errors
 | 
						|
 | 
						|
class SyntaxErrorChecker:
 | 
						|
    """A visitor to find syntax errors in the AST."""
 | 
						|
 | 
						|
    def __init__(self, multi=None):
 | 
						|
        """Create new visitor object.
 | 
						|
 | 
						|
        If optional argument multi is not None, then print messages
 | 
						|
        for each error rather than raising a SyntaxError for the
 | 
						|
        first.
 | 
						|
        """
 | 
						|
        self.multi = multi
 | 
						|
        self.errors = 0
 | 
						|
 | 
						|
    def error(self, node, msg):
 | 
						|
        self.errors = self.errors + 1
 | 
						|
        if self.multi is not None:
 | 
						|
            print "%s:%s: %s" % (node.filename, node.lineno, msg)
 | 
						|
        else:
 | 
						|
            raise SyntaxError, "%s (%s:%s)" % (msg, node.filename, node.lineno)
 | 
						|
 | 
						|
    def visitAssign(self, node):
 | 
						|
        # the transformer module handles many of these
 | 
						|
        pass
 | 
						|
##        for target in node.nodes:
 | 
						|
##            if isinstance(target, ast.AssList):
 | 
						|
##                if target.lineno is None:
 | 
						|
##                    target.lineno = node.lineno
 | 
						|
##                self.error(target, "can't assign to list comprehension")
 |