From: Baptiste L. <bl...@us...> - 2004-08-08 20:28:16
|
Update of /cvsroot/cpptool/CppParser/src/pyrfta In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13724/src/pyrfta Modified Files: ast.py dumpast.py nodetools.py Log Message: * better call or conversion wrapping Index: nodetools.py =================================================================== RCS file: /cvsroot/cpptool/CppParser/src/pyrfta/nodetools.py,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** nodetools.py 8 Aug 2004 17:26:34 -0000 1.5 --- nodetools.py 8 Aug 2004 20:28:07 -0000 1.6 *************** *** 46,50 **** def getFirstIdentifierChildNode( node, exception_if_not_found = True ): for child in node.enumChildren(): ! if child.category == cprs.TK_IDENTIFIER: return child if exception_if_not_found: --- 46,50 ---- def getFirstIdentifierChildNode( node, exception_if_not_found = True ): for child in node.enumChildren(): ! if child.hasValidToken() and child.token.category == cprs.TK_IDENTIFIER: return child if exception_if_not_found: *************** *** 54,62 **** def getFirstStringChildNode( node, exception_if_not_found = True ): for child in node.enumChildren(): ! if child.category == cprs.TK_STRING: return child if exception_if_not_found: raise AssertionError( "Fail to find string child in node %s" % node) - return None def getFirstTokenChildNode( node ): --- 54,61 ---- def getFirstStringChildNode( node, exception_if_not_found = True ): for child in node.enumChildren(): ! if child.hasValidToken() and child.token.category == cprs.TK_STRING: return child if exception_if_not_found: raise AssertionError( "Fail to find string child in node %s" % node) def getFirstTokenChildNode( node ): *************** *** 64,66 **** if child.hasValidToken(): return child ! raise AssertionError( "Fail to find a child node with token in %s." % node ) \ No newline at end of file --- 63,72 ---- if child.hasValidToken(): return child ! raise AssertionError( "Fail to find a child node with token in %s." % node ) ! ! def getFirstSymbolChildNode( node ): ! for child in node.enumChildren(): ! if child.hasValidToken() and child.token.category == cprs.TK_SYMBOL: ! return child ! if exception_if_not_found: ! raise AssertionError( "Fail to find string child in node %s" % node) Index: ast.py =================================================================== RCS file: /cvsroot/cpptool/CppParser/src/pyrfta/ast.py,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** ast.py 8 Aug 2004 19:15:31 -0000 1.9 --- ast.py 8 Aug 2004 20:28:07 -0000 1.10 *************** *** 418,422 **** class CallOrConversionExpression(ExpressionBase): ! pass class PostIncDecExpression(ExpressionBase): --- 418,425 ---- class CallOrConversionExpression(ExpressionBase): ! def __init__( self, node ): ! ExpressionBase.__init__( self, node ) ! self.parameters = None ! self.id_node = None class PostIncDecExpression(ExpressionBase): *************** *** 432,436 **** ExpressionBase.__init__( self, node ) self.left_expression = None ! self.operator_node = nodetools.getFirstTokenChildNode( node ) self.right_expression = None --- 435,439 ---- ExpressionBase.__init__( self, node ) self.left_expression = None ! self.operator_node = nodetools.getFirstSymbolChildNode( node ) self.right_expression = None *************** *** 476,480 **** ExpressionBase.__init__( self, node ) self.expression = None ! self.operator_node = nodetools.getFirstTokenChildNode( node ) class AssignmentOperatorExpression(BinaryOperatorExpression): --- 479,483 ---- ExpressionBase.__init__( self, node ) self.expression = None ! self.operator_node = nodetools.getFirstSymbolChildNode( node ) class AssignmentOperatorExpression(BinaryOperatorExpression): *************** *** 713,718 **** def buildCallOrConversionExpression( self, expression ): ast = CallOrConversionExpression( expression ) ! # todo return ast --- 716,727 ---- def buildCallOrConversionExpression( self, expression ): + parameters_node = nodetools.tryGetFirstChildNamed( expression, 'expression_list' ) + ## if not parameters_node: + ## ast = CallExpression( expression ) + ## ast.parameters.append( self.dispatchBuildExpression( parameters_node ) ) ast = CallOrConversionExpression( expression ) ! if parameters_node: ! ast.parameters = self.dispatchBuildExpression( parameters_node ) ! ast.id_node = nodetools.getFirstCompositeChild( expression ) return ast Index: dumpast.py =================================================================== RCS file: /cvsroot/cpptool/CppParser/src/pyrfta/dumpast.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** dumpast.py 8 Aug 2004 19:15:31 -0000 1.7 --- dumpast.py 8 Aug 2004 20:28:07 -0000 1.8 *************** *** 88,91 **** --- 88,99 ---- return source + def _nodeTreeIdentifier( self, node ): + source = '' + if node.hasValidToken() and not node.token.isSilent: + source += node.text + for child in node.enumChildren(): + source += self._nodeTreeIdentifier( child ) + return source + def visitStandardDeclaration( self, ast ): info = ASTInfo( ast ) *************** *** 98,102 **** info = ASTInfo( ast ) # + ptr operators ! info.attr( 'declator_id', self._nodeTreeSource( ast.declarator_id.node ) ) return info --- 106,110 ---- info = ASTInfo( ast ) # + ptr operators ! info.attr( 'declator_id', self._nodeTreeIdentifier( ast.declarator_id.node ) ) return info *************** *** 226,229 **** --- 234,242 ---- def visitCallOrConversionExpression( self, ast ): info = ASTInfo( ast ) + info.attr( 'id', self._nodeTreeIdentifier( ast.id_node ) ) + # it's an expression list + #info.attr( 'parameters', [ self.visitASTNode( expression ) for expression in ast.parameters ] ) + if ast.parameters: + info.attr( 'parameters', self.visitASTNode( ast.parameters ) ) return info *************** *** 240,249 **** def visitIdExpression( self, ast ): info = ASTInfo( ast ) ! info.attr( 'id', self._nodeTreeSource( ast.node ) ) return info def visitLiteralExpression( self, ast ): info = ASTInfo( ast ) ! info.attr( 'literal', self._nodeTreeSource( ast.node ) ) return info --- 253,262 ---- def visitIdExpression( self, ast ): info = ASTInfo( ast ) ! info.attr( 'id', self._nodeTreeIdentifier( ast.node ) ) return info def visitLiteralExpression( self, ast ): info = ASTInfo( ast ) ! info.attr( 'literal', self._nodeTreeIdentifier( ast.node ) ) return info *************** *** 251,255 **** info = ASTInfo( ast ) info.attr( 'expression', self.visitASTNode( ast.expression ) ) ! info.attr( 'member', self._nodeTreeSource( ast.member_node ) ) return info --- 264,268 ---- info = ASTInfo( ast ) info.attr( 'expression', self.visitASTNode( ast.expression ) ) ! info.attr( 'member', self._nodeTreeIdentifier( ast.member_node ) ) return info *************** *** 258,262 **** if ast.placement_expression: info.attr( 'placement_expression', self.visitASTNode( ast.placement_expression ) ) ! info.attr( 'type', self._nodeTreeSource( ast.new_type_id_node ) ) return info --- 271,275 ---- if ast.placement_expression: info.attr( 'placement_expression', self.visitASTNode( ast.placement_expression ) ) ! info.attr( 'type', self._nodeTreeIdentifier( ast.new_type_id_node ) ) return info |