From: <bl...@us...> - 2003-05-29 17:03:10
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv21542/src/pyrfta/test/rfta Modified Files: codeanalysis.py codeanalysistest.py Log Message: * added handling for simple variable declaration Index: codeanalysis.py =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/codeanalysis.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** codeanalysis.py 29 May 2003 14:05:56 -0000 1.1 --- codeanalysis.py 29 May 2003 17:03:06 -0000 1.2 *************** *** 1,6 **** import rfta ! class LocalVariableDeclarator(rfta.StatementVisitor): def __init__( self, resolver ): self.resolver = resolver --- 1,9 ---- import rfta ! ! class LocalVariableDeclarator(rfta.StatementVisitor,rfta.ExpressionVisitor): def __init__( self, resolver ): + rfta.StatementVisitor.__init__( self ) + rfta.ExpressionVisitor.__init__( self ) self.resolver = resolver *************** *** 8,14 **** functionBody.accept(self) ! def visitCompoundStatement(self,compound): self.resolver.enterScope() self.resolver.exitScope() class LocalVariableResolver: --- 11,30 ---- functionBody.accept(self) ! def visitCompoundStatement( self, compound ): self.resolver.enterScope() + for statement in compound.getStatements(): + statement.accept( self ) self.resolver.exitScope() + + def visitNullStatement( self, statement ): + pass + + def visitDeclarationStatement( self, statement ): + statement.declaration.accept( self ) + + def visitDeclaratorExpression( self, expression ): + for declarator in expression.getDeclarators(): + self.resolver.declareVariable( declarator.name.identifier ) + class LocalVariableResolver: Index: codeanalysistest.py =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/codeanalysistest.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** codeanalysistest.py 29 May 2003 14:05:56 -0000 1.1 --- codeanalysistest.py 29 May 2003 17:03:06 -0000 1.2 *************** *** 17,20 **** --- 17,30 ---- self.resolver = None + def makeVariableDecl( self, name, init ): + declarator = rfta.Declarator( rfta.TypePart(), + rfta.Identifier(name), + rfta.TypePart(), + rfta.AssignInitializerExpression( rfta.GenericExpression( init ) ) ) + declExpr = rfta.DeclaratorExpression( rfta.TypePart( "int" ) ) + declExpr.appendDeclarator( declarator ) + declStatement = rfta.DeclarationStatement( declExpr ) + return declStatement + def testConstruction( self ): pass *************** *** 24,29 **** self.declarator.visitCompoundStatement( self.body ) ! self.assertEqual( self.resolver.enterScope.argsPassed, [()] ) ! self.assertEqual( self.resolver.exitScope.argsPassed, [()] ) def suite(): --- 34,51 ---- self.declarator.visitCompoundStatement( self.body ) ! self.assertEqual( self.resolver.called, [ "enterScope", "exitScope" ] ) ! ! def testDummyBody( self ): ! self.body.appendStatement( rfta.NullStatement() ) ! self.resolver.declareVariable.setExpectNoCall() ! self.declarator.visitCompoundStatement( self.body ) ! ! self.assertEqual( self.resolver.called, [ "enterScope", "exitScope" ] ) ! ! def testDeclareOneVariable( self ): ! self.body.appendStatement( self.makeVariableDecl( "var1", "3" ) ) ! self.declarator.visitCompoundStatement( self.body ) ! self.assertEqual( self.resolver.called, [ "enterScope", "declareVariable", "exitScope" ] ) ! self.assertEqual( self.resolver.declareVariable.argsPassed, [("var1",)] ) def suite(): |