You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(37) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(15) |
Feb
(26) |
Mar
(97) |
Apr
(224) |
May
(226) |
Jun
|
Jul
(3) |
Aug
(22) |
Sep
(48) |
Oct
|
Nov
|
Dec
(38) |
2004 |
Jan
(28) |
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(37) |
Jul
|
Aug
(73) |
Sep
|
Oct
|
Nov
|
Dec
|
From: <bl...@us...> - 2003-05-30 07:31:28
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv3286/src/pyrfta/test/rfta Modified Files: codeanalysis.py codeanalysistest.py Log Message: * added test & fixed bu in scope handling Index: codeanalysis.py =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/codeanalysis.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** codeanalysis.py 29 May 2003 21:15:18 -0000 1.3 --- codeanalysis.py 30 May 2003 07:31:24 -0000 1.4 *************** *** 61,67 **** class Scope: - children = [] - def __init__( self, parent_scope ): self.parent_scope = parent_scope if self.parent_scope: --- 61,66 ---- class Scope: def __init__( self, parent_scope ): + self.children = [] self.parent_scope = parent_scope if self.parent_scope: *************** *** 73,77 **** def parentResolve( self, identifier ): if self.parent_scope: ! return self.parent_scope.resolve( self, identifier ) return None --- 72,76 ---- def parentResolve( self, identifier ): if self.parent_scope: ! return self.parent_scope.resolve( identifier ) return None *************** *** 82,89 **** class LocalVariableScope(Scope): - declared = {} - def __init__( self, parent_scope ): Scope.__init__( self, parent_scope ) def declare( self, variableName, declExpr ): --- 81,87 ---- class LocalVariableScope(Scope): def __init__( self, parent_scope ): Scope.__init__( self, parent_scope ) + self.declared = {} def declare( self, variableName, declExpr ): *************** *** 99,106 **** class UsingDeclScope(Scope): - imported = {} - def __init__( self, parent_scope ): Scope.__init__( self, parent_scope ) def importIdentifier( self, identifier ): --- 97,103 ---- class UsingDeclScope(Scope): def __init__( self, parent_scope ): Scope.__init__( self, parent_scope ) + self.imported = {} def importIdentifier( self, identifier ): *************** *** 113,122 **** class LocalVariableResolver: - standard_for_scope = True - scope_depth = 0 - resolved = {} - def __init__( self, function_scope ): self.current_scope = function_scope def resolveVariable( self, variableName, variable_name_element ): --- 110,118 ---- class LocalVariableResolver: def __init__( self, function_scope ): self.current_scope = function_scope + self.standard_for_scope = True + self.scope_depth = 0 + self.resolved = {} def resolveVariable( self, variableName, variable_name_element ): Index: codeanalysistest.py =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/codeanalysistest.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** codeanalysistest.py 29 May 2003 21:15:18 -0000 1.3 --- codeanalysistest.py 30 May 2003 07:31:25 -0000 1.4 *************** *** 160,167 **** self.resolver = LocalVariableResolver( FunctionScope( self.function ) ) self.declExpr1 = self.makeVariableDeclExpr( [("var1", "1"), ("var2","b"), ("var3","c")] ) self.declExpr2 = self.makeVariableDeclExpr( [("x", "1"), ("y","b"), ("z","c")] ) self.identifiers = {} ! for name in [ "var1", "var2", "var3", "x", "y", "z" ]: ! for count in range(1,5): variable_name = name + "." + str(count) self.identifiers[ variable_name ] = self.makeVariableName( variable_name ) --- 160,171 ---- self.resolver = LocalVariableResolver( FunctionScope( self.function ) ) self.declExpr1 = self.makeVariableDeclExpr( [("var1", "1"), ("var2","b"), ("var3","c")] ) + self.declExpr1b = self.makeVariableDeclExpr( [("var1", "a"), ("var2","z")] ) self.declExpr2 = self.makeVariableDeclExpr( [("x", "1"), ("y","b"), ("z","c")] ) + self.declExpr2b = self.makeVariableDeclExpr( [("x", "1"), ("y","b")] ) + self.declExpr3 = self.makeVariableDeclExpr( [("a", "1"), ("b","b"), ("c","c")] ) + self.declExpr3b = self.makeVariableDeclExpr( [("a", "1"), ("b","b")] ) self.identifiers = {} ! for name in [ "var1", "var2", "var3", "x", "y", "z", "a", "b", "c" ]: ! for count in range(1,10): variable_name = name + "." + str(count) self.identifiers[ variable_name ] = self.makeVariableName( variable_name ) *************** *** 187,201 **** self.assertEqual( self.resolver.current_scope.function, self.function ) ! def testDeclareAndResolve( self ): self.resolver.enterScope() self.declareVariables( ["var1", "var2", "var3"], self.declExpr1 ) ! self.declareVariables( ["x", "y", "z"], self.declExpr1 ) ! self.resolveVariables( [ ("var1",1), ("var2",1) ] ) self.resolver.exitScope() ! self.checkVariableResolutions( ["var1.1", "var2.1"], self.declExpr1 ) def suite(): ! return unittest.makeSuite(IdentifierResolverTestCase, LocaleVariableResolverTest) if __name__ == '__main__': --- 191,226 ---- self.assertEqual( self.resolver.current_scope.function, self.function ) ! def testResolveWithNoSubScope( self ): self.resolver.enterScope() self.declareVariables( ["var1", "var2", "var3"], self.declExpr1 ) ! self.declareVariables( ["x", "y", "z"], self.declExpr2 ) ! self.resolveVariables( [ ("var1",1), ("var2",1), ("var3",1), ("var2",2), ("var3",2), ("var3",3), ("var1",2) ] ) ! self.resolveVariables( [ ("x",1), ("y",1), ("x",2), ("z",1), ("z",2), ("y",1) ] ) self.resolver.exitScope() ! self.checkVariableResolutions( ["var1.1", "var2.1", "var1.2", "var2.2", "var3.1", "var3.2", "var3.3"], self.declExpr1 ) ! self.checkVariableResolutions( ["x.1", "x.2", "y.1", "z.1", "z.2"], self.declExpr2 ) ! ! def testResolveWithSubScope( self ): ! self.resolver.enterScope() ! self.declareVariables( ["var1","var2"], self.declExpr1 ) ! self.resolveVariables( [ ("var1",1), ("var1",2), ("var2",1) ] ) ! self.resolver.enterScope() ! self.declareVariables( ["var1"], self.declExpr1b ) ! self.resolver.enterScope() ! self.resolveVariables( [ ("var1",3), ("var2",2), ("var2",3) ] ) ! self.resolver.exitScope() ! self.resolveVariables( [ ("var1",4), ("var2",4) ] ) ! self.resolver.exitScope() ! self.resolveVariables( [ ("var1",5), ("var2",5) ] ) ! self.resolver.exitScope() ! ! self.checkVariableResolutions( ["var1.1", "var1.2", "var1.5", ! "var2.1", "var2.2", "var2.3", "var2.4", "var2.5"], self.declExpr1 ) ! self.checkVariableResolutions( ["var1.3", "var1.4"], self.declExpr1b ) ! def suite(): ! return unittest.makeSuite(LocaleVariableResolverTest) if __name__ == '__main__': |
From: <bl...@us...> - 2003-05-30 07:28:05
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv1528/src/pyrfta/test/rfta Modified Files: __init__.py Log Message: * cleaned up & added conversion to string Index: __init__.py =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/__init__.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** __init__.py 29 May 2003 14:05:56 -0000 1.1 --- __init__.py 30 May 2003 07:28:02 -0000 1.2 *************** *** 1,11 **** from _pyrfta import * ! ##source = "void f() { return; }" ! ##parser = Parser( source ) ! ##fn = parser.getFunctionAt( 16 ) ! ##print fn.functionName.name ! ##body = fn.body ! ##for statement in body.getStatements(): ! ## print statement ! --- 1,20 ---- from _pyrfta import * ! def _identifier_str( self ): ! return self.identifier ! ! def _declarator_str( self ): ! return self.type.typeText + ' ' + self.name.identifier + self.typeSuffix.typeText + def _declarator_expr_str( self ): + s = 'DeclarationExpr<' + self.primaryType.typeText + " " + sep = '' + for decl in self.getDeclarators(): + s += sep + s += str(decl) + sep = ',' + return s + '>' + + Declarator.__str__ = _declarator_str + DeclaratorExpression.__repr__ = _declarator_expr_str + Identifier.__str__ = _identifier_str \ No newline at end of file |
From: <bl...@us...> - 2003-05-29 21:15:35
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv17464/src/pyrfta/test/rfta Modified Files: codeanalysis.py codeanalysistest.py Log Message: * added scope handling * added locale variable resolution * added using declaration support in scope Index: codeanalysis.py =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/codeanalysis.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** codeanalysis.py 29 May 2003 17:03:06 -0000 1.2 --- codeanalysis.py 29 May 2003 21:15:18 -0000 1.3 *************** *** 1,3 **** --- 1,4 ---- import rfta + import string *************** *** 17,23 **** self.resolver.exitScope() - def visitNullStatement( self, statement ): - pass - def visitDeclarationStatement( self, statement ): statement.declaration.accept( self ) --- 18,21 ---- *************** *** 25,43 **** def visitDeclaratorExpression( self, expression ): for declarator in expression.getDeclarators(): ! self.resolver.declareVariable( declarator.name.identifier ) ! ! class LocalVariableResolver: ! def isLocaleVariable(self, variableName): ! return false ! def declareVariable(self, variableName): ! pass ! def enterScope(self): pass ! def exitScope(self): ! pass --- 23,151 ---- def visitDeclaratorExpression( self, expression ): for declarator in expression.getDeclarators(): ! self.resolver.declareVariable( declarator.name.identifier, expression ) ! def visitForStatement( self, statement ): ! self.resolver.enterForScope() ! statement.declaration.accept( self ) ! self._visitScopedSubstatement( statement.iteratedStatement ) ! self.resolver.exitForScope() ! def visitIfStatement( self, statement ): ! self._visitScopedSubstatement( statement.thenStatement ) ! if statement.hasElseStatement(): ! self._visitScopedSubstatement( statement.elseStatement ) ! def visitNullStatement( self, statement ): pass ! def visitWhileStatement( self, statement ): ! self._visitScopedSubstatement( statement.iteratedStatement ) ! ! def _visitScopedSubstatement( self, statement ): ! self.resolver.enterScope() ! statement.accept( self ) ! self.resolver.exitScope() ! ! class Identifier: ! def __init__( self, identifier ): ! self.identifier = identifier ! ! def name( self ): ! pos = string.rfind( self.identifier, '::' ) ! if pos == -1: ! return self.identifier ! return self.identifier[pos:] ! ! IDTYPE_LOCALVARIABLE = 1 ! IDTYPE_IMPORTEDID = 2 ! ! class Scope: ! children = [] ! ! def __init__( self, parent_scope ): ! self.parent_scope = parent_scope ! if self.parent_scope: ! self.parent_scope.children.append( self ) ! ! def resolve( self, identifier ): ! return None ! ! def parentResolve( self, identifier ): ! if self.parent_scope: ! return self.parent_scope.resolve( self, identifier ) ! return None ! ! class FunctionScope(Scope): ! def __init__( self, function ): ! Scope.__init__( self, None ) ! self.function = function ! ! class LocalVariableScope(Scope): ! declared = {} ! ! def __init__( self, parent_scope ): ! Scope.__init__( self, parent_scope ) ! ! def declare( self, variableName, declExpr ): ! self.declared[variableName] = declExpr ! ! def declareLocalVariable( self, variableName ): ! return variableName in self.declared ! ! def resolve( self, identifier ): ! if self.declareLocalVariable( identifier ): ! return (IDTYPE_LOCALVARIABLE, self.declared[identifier]) ! return self.parentResolve( identifier ) ! ! class UsingDeclScope(Scope): ! imported = {} ! ! def __init__( self, parent_scope ): ! Scope.__init__( self, parent_scope ) ! ! def importIdentifier( self, identifier ): ! imported[ Identifier(identifier).name() ] = identifier ! ! def resolve( self, identifier ): ! if declareLocalVariable( self, identifier ): ! return (IDTYPE_IMPORTEDID, imported[identifier]) ! return self.parentResolve( identifier ) ! ! class LocalVariableResolver: ! standard_for_scope = True ! scope_depth = 0 ! resolved = {} ! ! def __init__( self, function_scope ): ! self.current_scope = function_scope ! ! def resolveVariable( self, variableName, variable_name_element ): ! variableDecl = self.current_scope.resolve( variableName ) ! if variableDecl: ! self.resolved[ variable_name_element ] = variableDecl ! ! def declareVariable( self, variableName, declExpr ): ! assert( self.scope_depth > 0 ) ! self.current_scope.declare( variableName, declExpr ) ! ! def findVariable( self, variable_name_element ): ! return self.resolved.get( variable_name_element, None ) ! ! def enterScope( self ): ! self.current_scope = LocalVariableScope( self.current_scope ) ! self.scope_depth += 1 ! ! def exitScope( self ): ! assert( self.scope_depth > 0 ) ! self.scope_depth -= 1 ! self.current_scope = self.current_scope.parent_scope ! ! def enterForScope( self ): ! if self.standard_for_scope: ! self.enterScope() ! ! def exitForScope( self ): ! if self.standard_for_scope: ! self.exitScope() Index: codeanalysistest.py =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/test/rfta/codeanalysistest.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** codeanalysistest.py 29 May 2003 17:03:06 -0000 1.2 --- codeanalysistest.py 29 May 2003 21:15:18 -0000 1.3 *************** *** 5,15 **** from mock import MockFactory ! class LocaleVariableDeclaratorTest(unittest.TestCase): """LocaleVariableDeclarator tests""" def setUp( self ): ! self.resolver = self.createMockInstance( LocalVariableResolver, [] ) self.declarator = LocalVariableDeclarator( self.resolver ) - self.body = rfta.CompoundStatement() def tearDown( self ): --- 5,79 ---- from mock import MockFactory ! ! class CodeMother: ! """code model object mother""" ! ! def makeType( self, name ): ! return rfta.Type( name ) ! ! def makeFunctionName( self, name ): ! return rfta.FunctionName( name ) ! ! def makeParameters( self ): ! return rfta.Parameters() ! ! def makeFunctionDecl( self, return_type, name, parameters, body = None ): ! return rfta.FunctionDeclaration( return_type, name, parameters, body ) ! ! def makeQuickFunctionDecl( self, return_type, name ): ! return self.makeFunctionDecl( self.makeType( return_type ), ! self.makeFunctionName( name ), ! self.makeParameters(), ! self.makeCompound() ) ! ! def makeCompound( self ): ! return rfta.CompoundStatement() ! ! def makeVariableDeclExpr( self, variables ): ! declExpr = rfta.DeclaratorExpression( rfta.TypePart( "int" ) ) ! for variable in variables: ! declarator = rfta.Declarator( rfta.TypePart(), ! rfta.Identifier(variable[0]), ! rfta.TypePart(), ! rfta.AssignInitializerExpression( rfta.GenericExpression( variable[1] ) ) ) ! declExpr.appendDeclarator( declarator ) ! return declExpr ! ! def makeVariableDecl( self, variables ): ! return rfta.DeclarationStatement( self.makeVariableDeclExpr( variables ) ) ! ! def makeVariableName( self, name ): ! return rfta.VariableName( name ) ! ! def makeWhile( self, condition, substatement ): ! return rfta.WhileStatement( condition, substatement ) ! ! def makeFor( self, init, condition, update, substatement ): ! return rfta.ForStatement( init, condition, update, substatement ) ! ! def makeIf( self, condition, then_statment, else_statement = None ): ! return rfta.IfStatement( condition, then_statment, else_statement ) ! ! def makeNullStatement( self ): ! return rfta.NullStatement() ! ! def makeNull( self ): ! return rfta.NullExpression() ! ! def makeExpr( self, value ): ! return rfta.GenericExpression( value ) ! ! def makeTrue( self ): ! return self.makeExpr( "true" ) ! ! ! class LocaleVariableDeclaratorTest(unittest.TestCase,CodeMother): """LocaleVariableDeclarator tests""" def setUp( self ): ! self.function = self.makeQuickFunctionDecl( "void", "f" ) ! self.body = self.function.body ! self.resolver = self.createMockInstance( LocalVariableResolver, [], FunctionScope( self.function ) ) self.declarator = LocalVariableDeclarator( self.resolver ) def tearDown( self ): *************** *** 17,29 **** 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 ): --- 81,92 ---- self.resolver = None ! def doResolve( self ): ! self.declarator.declare( self.body ) ! ! def checkDeclaredVariable( self, expected_variables ): ! actual_variables = [] ! for variable_decl in self.resolver.declareVariable.argsPassed: ! actual_variables.append( variable_decl[0] ) ! self.assertEqual( actual_variables, expected_variables ) def testConstruction( self ): *************** *** 32,54 **** def testEmptyBody( self ): self.resolver.declareVariable.setExpectNoCall() ! 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(): ! return unittest.makeSuite(IdentifierResolverTestCase) if __name__ == '__main__': --- 95,201 ---- def testEmptyBody( self ): self.resolver.declareVariable.setExpectNoCall() ! self.declarator.declare( self.body ) self.assertEqual( self.resolver.called, [ "enterScope", "exitScope" ] ) def testDummyBody( self ): ! self.body.appendStatement( self.makeNullStatement() ) self.resolver.declareVariable.setExpectNoCall() ! self.declarator.declare( self.body ) self.assertEqual( self.resolver.called, [ "enterScope", "exitScope" ] ) ! def testDeclareTwoVariables( self ): ! self.body.appendStatement( self.makeVariableDecl( [("var1", "3"), ("var2", "7")] ) ) ! self.declarator.declare( self.body ) ! self.assertEqual( self.resolver.called, [ "enterScope", "declareVariable", "declareVariable", "exitScope" ] ) ! self.checkDeclaredVariable( ["var1", "var2" ] ) ! ! def testWhileScope( self ): ! self.body.appendStatement( self.makeWhile( self.makeTrue(), ! self.makeVariableDecl( [("var1", "453")] ) ) ) ! self.declarator.declare( self.body ) ! self.assertEqual( self.resolver.called, ! [ "enterScope", "enterScope", "declareVariable", "exitScope", "exitScope" ] ) ! self.checkDeclaredVariable( ["var1"] ) ! ! def testIfThenScope( self ): ! self.body.appendStatement( self.makeIf( self.makeTrue(), ! self.makeVariableDecl( [("var1", "453")] ) ) ) ! self.declarator.declare( self.body ) ! self.assertEqual( self.resolver.called, ! [ "enterScope", "enterScope", "declareVariable", "exitScope", "exitScope" ] ) ! self.checkDeclaredVariable( ["var1"] ) ! ! def testIfThenElseScope( self ): ! self.body.appendStatement( self.makeIf( self.makeTrue(), ! self.makeVariableDecl( [("var1", "453")] ), ! self.makeVariableDecl( [("var2", "456")] ) ) ) ! self.declarator.declare( self.body ) ! self.assertEqual( self.resolver.called, ! [ "enterScope", "enterScope", "declareVariable", "exitScope", ! "enterScope", "declareVariable", "exitScope", ! "exitScope" ] ) ! self.checkDeclaredVariable( ["var1","var2"] ) ! ! def testForScope( self ): ! self.body.appendStatement( self.makeFor( self.makeVariableDeclExpr( [("var1", "453")] ), ! self.makeTrue(), ! self.makeNull(), ! self.makeVariableDecl( [("var2", "412")] ), ! ) ) ! self.declarator.declare( self.body ) ! self.assertEqual( self.resolver.called, ! [ "enterScope", ! "enterForScope", "enterScope", "declareVariable", ! "enterScope", "declareVariable", "exitScope", ! "exitForScope", "exitScope", "exitScope" ] ) ! self.checkDeclaredVariable( ["var1","var2"] ) ! ! class LocaleVariableResolverTest(unittest.TestCase,CodeMother): ! """LocaleVariableResolver tests""" ! ! def setUp( self ): ! self.function = self.makeQuickFunctionDecl( "void", "f" ) ! self.resolver = LocalVariableResolver( FunctionScope( self.function ) ) ! self.declExpr1 = self.makeVariableDeclExpr( [("var1", "1"), ("var2","b"), ("var3","c")] ) ! self.declExpr2 = self.makeVariableDeclExpr( [("x", "1"), ("y","b"), ("z","c")] ) ! self.identifiers = {} ! for name in [ "var1", "var2", "var3", "x", "y", "z" ]: ! for count in range(1,5): ! variable_name = name + "." + str(count) ! self.identifiers[ variable_name ] = self.makeVariableName( variable_name ) ! ! def tearDown( self ): ! pass ! ! def declareVariables( self, names, declExpr ): ! for name in names: ! self.resolver.declareVariable( name, declExpr ) ! ! def resolveVariables( self, variables ): ! for variable in variables: ! id = variable[0] + "." + str(variable[1]) ! self.resolver.resolveVariable( variable[0], self.identifiers[id] ) ! ! def checkVariableResolutions( self, names, declExpr ): ! for name in names: ! self.assertEqual( self.resolver.findVariable( self.identifiers[name] ), ! (IDTYPE_LOCALVARIABLE,declExpr) ) ! ! def testConstruction( self ): ! self.assertEqual( self.resolver.current_scope.function, self.function ) ! ! def testDeclareAndResolve( self ): ! self.resolver.enterScope() ! self.declareVariables( ["var1", "var2", "var3"], self.declExpr1 ) ! self.declareVariables( ["x", "y", "z"], self.declExpr1 ) ! self.resolveVariables( [ ("var1",1), ("var2",1) ] ) ! self.resolver.exitScope() ! ! self.checkVariableResolutions( ["var1.1", "var2.1"], self.declExpr1 ) def suite(): ! return unittest.makeSuite(IdentifierResolverTestCase, LocaleVariableResolverTest) if __name__ == '__main__': |
From: <bl...@us...> - 2003-05-29 21:14:33
|
Update of /cvsroot/cpptool/rfta/src/pyrfta In directory sc8-pr-cvs1:/tmp/cvs-serv16976/src/pyrfta Modified Files: ExposeDeclarations.cpp ExposeStatements.cpp ExposeStatements2.cpp ExposeVisitors.cpp Log Message: * fixed bug * switch get/set to properties Index: ExposeDeclarations.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/ExposeDeclarations.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ExposeDeclarations.cpp 29 May 2003 09:53:49 -0000 1.1 --- ExposeDeclarations.cpp 29 May 2003 21:14:30 -0000 1.2 *************** *** 37,40 **** --- 37,45 ---- ; + class_<VariableName, VariableNamePtr, bases<Element>, boost::noncopyable>( "VariableName", + init< std::string >() ) + .add_property( "name", &VariableName::getName ) + ; + class_<Parameters, ParametersPtr, bases<Element>, boost::noncopyable>( "Parameters" ) ; Index: ExposeStatements.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/ExposeStatements.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ExposeStatements.cpp 28 May 2003 20:47:27 -0000 1.5 --- ExposeStatements.cpp 29 May 2003 21:14:30 -0000 1.6 *************** *** 32,37 **** class_<ConditionStatement, bases<Statement>, boost::noncopyable>( "ConditionStatement", no_init ) ! .def( "getCondition", &ConditionStatement::getCondition ) ! .def( "setCondition", &ConditionStatement::setCondition ) .def( "getConditionChange", &ConditionStatement::getConditionChange ) ; --- 32,37 ---- class_<ConditionStatement, bases<Statement>, boost::noncopyable>( "ConditionStatement", no_init ) ! .add_property( "condition", &ConditionStatement::getCondition, ! &ConditionStatement::setCondition ) .def( "getConditionChange", &ConditionStatement::getConditionChange ) ; *************** *** 40,57 **** init<ExpressionPtr, StatementPtr>() ) .def( init<ExpressionPtr, StatementPtr, StatementPtr>() ) ! .def( "getThenStatement", &IfStatement::getThenStatement ) ! .def( "setThenStatement", &IfStatement::setThenStatement ) .def( "getThenStatementChange", &IfStatement::getThenStatementChange ) .def( "hasElseStatement", &IfStatement::hasElseStatement ) ! .def( "getElseStatement", &IfStatement::getElseStatement ) ! .def( "setElseStatement", &IfStatement::setElseStatement ) .def( "getElseStatementChange", &IfStatement::getElseStatementChange ) - .def( "getThenStatement", &IfStatement::getThenStatement ) - .def( "getThenStatement", &IfStatement::getThenStatement ) ; class_<IterationStatement, bases<ConditionStatement>, boost::noncopyable >( "IterationStatement", no_init ) ! .def( "getIteratedStatement", &IterationStatement::getIteratedStatement ) ! .def( "setIteratedStatement", &IterationStatement::setIteratedStatement ) .def( "getIteratedStatementChange", &IterationStatement::getIteratedStatementChange ) ; --- 40,55 ---- init<ExpressionPtr, StatementPtr>() ) .def( init<ExpressionPtr, StatementPtr, StatementPtr>() ) ! .add_property( "thenStatement", &IfStatement::getThenStatement, ! &IfStatement::setThenStatement ) .def( "getThenStatementChange", &IfStatement::getThenStatementChange ) .def( "hasElseStatement", &IfStatement::hasElseStatement ) ! .add_property( "elseStatement", &IfStatement::getElseStatement, ! &IfStatement::setElseStatement ) .def( "getElseStatementChange", &IfStatement::getElseStatementChange ) ; class_<IterationStatement, bases<ConditionStatement>, boost::noncopyable >( "IterationStatement", no_init ) ! .add_property( "iteratedStatement", &IterationStatement::getIteratedStatement, ! &IterationStatement::setIteratedStatement ) .def( "getIteratedStatementChange", &IterationStatement::getIteratedStatementChange ) ; Index: ExposeStatements2.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/ExposeStatements2.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ExposeStatements2.cpp 6 Apr 2003 07:20:23 -0000 1.2 --- ExposeStatements2.cpp 29 May 2003 21:14:30 -0000 1.3 *************** *** 20,30 **** class_<ForStatement, ForStatementPtr, bases<IterationStatement>, boost::noncopyable >( "ForStatement", init<ExpressionPtr, ExpressionPtr, ExpressionPtr, StatementPtr>() ) ! .def( "getDeclaration", &ForStatement::getDeclaration ) ! .def( "setDeclaration", &ForStatement::setDeclaration ) ! .def( "getDeclarationChange", &ForStatement::getDeclarationChange ) ! .def( "getIteration", &ForStatement::getIteration ) ! .def( "setIteration", &ForStatement::setIteration ) ! .def( "getIterationChange", &ForStatement::getIterationChange ) ! ; class_<SwitchStatement, SwitchStatementPtr, bases<ConditionStatement>, boost::noncopyable >( "SwitchStatement", --- 20,30 ---- class_<ForStatement, ForStatementPtr, bases<IterationStatement>, boost::noncopyable >( "ForStatement", init<ExpressionPtr, ExpressionPtr, ExpressionPtr, StatementPtr>() ) ! .add_property( "declaration", &ForStatement::getDeclaration, ! &ForStatement::setDeclaration ) ! .def( "getDeclarationChange", &ForStatement::getDeclarationChange ) ! .add_property( "iteration", &ForStatement::getIteration, ! &ForStatement::setIteration ) ! .def( "getIterationChange", &ForStatement::getIterationChange ) ! ; class_<SwitchStatement, SwitchStatementPtr, bases<ConditionStatement>, boost::noncopyable >( "SwitchStatement", Index: ExposeVisitors.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/ExposeVisitors.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ExposeVisitors.cpp 6 Apr 2003 07:20:23 -0000 1.2 --- ExposeVisitors.cpp 29 May 2003 21:14:30 -0000 1.3 *************** *** 59,63 **** void visit( const ForStatementPtr &statement ) { ! call_method<void>( self, "visitForStatementStatement", object(statement) ); } --- 59,63 ---- void visit( const ForStatementPtr &statement ) { ! call_method<void>( self, "visitForStatement", object(statement) ); } |
From: <bl...@us...> - 2003-05-29 17:09:40
|
Update of /cvsroot/cpptool/rfta/src/pyrfta In directory sc8-pr-cvs1:/tmp/cvs-serv20024/src/pyrfta Modified Files: ExposeExpressions.cpp ExposeExpressions2.cpp ExposeStatements3.cpp pyrfta.dsp Log Message: * added missing exposition * now run .bat to install dlls in src/pyrfta/test/rfta Index: ExposeExpressions.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/ExposeExpressions.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ExposeExpressions.cpp 6 Apr 2003 07:42:16 -0000 1.2 --- ExposeExpressions.cpp 29 May 2003 17:00:12 -0000 1.3 *************** *** 3,6 **** --- 3,7 ---- #include <rfta/refactoring/CodeModelStatements.h> #include <rfta/refactoring/CodeModelExpressions.h> + #include <xtl/python/ExposeEnumerator.h> using namespace boost::python; *************** *** 27,30 **** --- 28,37 ---- ; + class_<Identifier, IdentifierPtr, bases<Element>, boost::noncopyable>( "Identifier", + init<std::string>() ) + .add_property( "identifier", &Identifier::getIdentifier ) + ; + + Xtl::Python::ExposeEnumerator<DeclaratorPtr>( "DeclaratorEnumerator" ); class_<DeclaratorExpression, DeclaratorExpressionPtr, bases<Expression>, boost::noncopyable>( "DeclaratorExpression", init<TypePartPtr>() ) *************** *** 33,36 **** --- 40,44 ---- .def( "getDeclaratorCount", &DeclaratorExpression::getDeclaratorCount ) .def( "getDeclaratorAt", &DeclaratorExpression::getDeclaratorAt ) + .def( "getDeclarators", &DeclaratorExpression::getDeclarators ) .def( "insertDeclaratorAt", &DeclaratorExpression::insertDeclaratorAt ) .def( "appendDeclarator", &DeclaratorExpression::appendDeclarator ) Index: ExposeExpressions2.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/ExposeExpressions2.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ExposeExpressions2.cpp 10 Apr 2003 08:40:34 -0000 1.2 --- ExposeExpressions2.cpp 29 May 2003 17:00:12 -0000 1.3 *************** *** 16,20 **** .add_property( "type", &Declarator::getType, &Declarator::setType ) .add_property( "typeSuffix", &Declarator::getTypeSuffix, &Declarator::setTypeSuffix ) ! .add_property( "getName", &Declarator::getName, &Declarator::setName ) .def( "hasInitializer", &Declarator::hasInitializer ) .add_property( "initializer", &Declarator::getInitializer, &Declarator::setInitializer ) --- 16,20 ---- .add_property( "type", &Declarator::getType, &Declarator::setType ) .add_property( "typeSuffix", &Declarator::getTypeSuffix, &Declarator::setTypeSuffix ) ! .add_property( "name", &Declarator::getName, &Declarator::setName ) .def( "hasInitializer", &Declarator::hasInitializer ) .add_property( "initializer", &Declarator::getInitializer, &Declarator::setInitializer ) Index: ExposeStatements3.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/ExposeStatements3.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ExposeStatements3.cpp 6 Apr 2003 07:20:23 -0000 1.2 --- ExposeStatements3.cpp 29 May 2003 17:00:12 -0000 1.3 *************** *** 40,42 **** --- 40,50 ---- class_<NullStatement, NullStatementPtr, bases<Statement>, boost::noncopyable >( "NullStatement" ) ; + + + class_<DeclarationStatement, DeclarationStatementPtr, bases<Statement>, + boost::noncopyable >( "DeclarationStatement", init<DeclaratorExpressionPtr>() ) + .add_property( "declaration", + &DeclarationStatement::getDeclaration, + &DeclarationStatement::setDeclaration ) + ; } Index: pyrfta.dsp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/pyrfta.dsp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** pyrfta.dsp 29 May 2003 14:05:51 -0000 1.9 --- pyrfta.dsp 29 May 2003 17:00:12 -0000 1.10 *************** *** 58,62 **** TargetPath=\prg\vc\Rfta\build\pyrfta\Release\_pyrfta.pyd SOURCE="$(InputPath)" ! PostBuild_Cmds=copy $(TargetPath) ..\..\bin\_pyrfta.pyd # End Special Build Tool --- 58,62 ---- TargetPath=\prg\vc\Rfta\build\pyrfta\Release\_pyrfta.pyd SOURCE="$(InputPath)" ! PostBuild_Cmds=copy $(TargetPath) ..\..\bin\_pyrfta.pyd cd ..\..\bin\ install-python-extension.bat # End Special Build Tool *************** *** 89,93 **** TargetPath=\prg\vc\Rfta\build\pyrfta\Debug\_pyrfta.pyd SOURCE="$(InputPath)" ! PostBuild_Cmds=copy $(TargetPath) ..\..\bin\_pyrfta.pyd # End Special Build Tool --- 89,93 ---- TargetPath=\prg\vc\Rfta\build\pyrfta\Debug\_pyrfta.pyd SOURCE="$(InputPath)" ! PostBuild_Cmds=copy $(TargetPath) ..\..\bin\_pyrfta.pyd cd ..\..\bin\ install-python-extension.bat # End Special Build Tool |
From: <bl...@us...> - 2003-05-29 17:07:54
|
Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv20315/src/rfta Modified Files: CodeModelDeclarations.cpp Log Message: * exposed declarators iterator Index: CodeModelDeclarations.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelDeclarations.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CodeModelDeclarations.cpp 28 May 2003 20:46:58 -0000 1.2 --- CodeModelDeclarations.cpp 29 May 2003 17:00:46 -0000 1.3 *************** *** 21,25 **** - void Type::accept( ElementVisitor &visitor ) --- 21,24 ---- |
From: <bl...@us...> - 2003-05-29 17:03:39
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/pytest In directory sc8-pr-cvs1:/tmp/cvs-serv21542/src/pyrfta/pytest Modified Files: test.py Log Message: * added handling for simple variable declaration Index: test.py =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/pytest/test.py,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** test.py 6 Apr 2003 07:20:23 -0000 1.2 --- test.py 29 May 2003 17:03:05 -0000 1.3 *************** *** 1,3 **** ! from pyrfta import * class Visitor(StatementVisitor): --- 1,3 ---- ! from _pyrfta import * class Visitor(StatementVisitor): *************** *** 12,15 **** --- 12,18 ---- def visitLabelStatement( self, statement ): print "label statement visited : ", statement.label.labelName + + def visitCompoundStatement( self, statement ): + print "compound statement visited : " |
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(): |
From: <bl...@us...> - 2003-05-29 16:58:57
|
Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv19278/src/rfta Modified Files: CodeModelExpressions.cpp Log Message: * exposed declarators iterator Index: CodeModelExpressions.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelExpressions.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** CodeModelExpressions.cpp 28 May 2003 07:34:53 -0000 1.17 --- CodeModelExpressions.cpp 29 May 2003 16:58:54 -0000 1.18 *************** *** 7,10 **** --- 7,11 ---- #include <rfta/refactoring/CodeModelExpressions.h> #include <rfta/refactoring/CodeModelVisitor.h> + #include <xtl/GetAtEnumerator.h> *************** *** 111,114 **** --- 112,122 ---- { return declaratorsTracker_.getAt( index ); + } + + + Xtl::Enumerator<DeclaratorPtr> + DeclaratorExpression::getDeclarators() const + { + return Xtl::enumGetAt( *this, &DeclaratorExpression::getDeclaratorAt, 0, getDeclaratorCount() ); } |
From: <bl...@us...> - 2003-05-29 16:58:57
|
Update of /cvsroot/cpptool/rfta/include/rfta/refactoring In directory sc8-pr-cvs1:/tmp/cvs-serv19278/include/rfta/refactoring Modified Files: CodeModelExpressions.h Log Message: * exposed declarators iterator Index: CodeModelExpressions.h =================================================================== RCS file: /cvsroot/cpptool/rfta/include/rfta/refactoring/CodeModelExpressions.h,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** CodeModelExpressions.h 28 May 2003 07:34:54 -0000 1.17 --- CodeModelExpressions.h 29 May 2003 16:58:54 -0000 1.18 *************** *** 10,13 **** --- 10,14 ---- #include <rfta/refactoring/CodeModelElement.h> #include <boost/shared_ptr.hpp> + #include <xtl/Enumerator.h> #include <string> #include <vector> *************** *** 77,80 **** --- 78,83 ---- DeclaratorPtr getDeclaratorAt( int index ) const; + + Xtl::Enumerator<DeclaratorPtr> getDeclarators() const; void insertDeclaratorAt( int index, |
From: <bl...@us...> - 2003-05-29 16:58:08
|
Update of /cvsroot/cpptool/rfta/bin In directory sc8-pr-cvs1:/tmp/cvs-serv18897/bin Modified Files: install-python-extension.bat Log Message: * fixed to install dll in src/pyrfta/test/rfta directory Index: install-python-extension.bat =================================================================== RCS file: /cvsroot/cpptool/rfta/bin/install-python-extension.bat,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** install-python-extension.bat 27 Apr 2003 13:01:58 -0000 1.1 --- install-python-extension.bat 29 May 2003 16:58:04 -0000 1.2 *************** *** 1,6 **** ! set PYTHON_DIR=C:\Python22 ! set INSTALL_DIR=%PYTHON_DIR%\DLLs xcopy /Y rfta_mdr.ext %INSTALL_DIR% xcopy /Y rftaparser_mdr.ext %INSTALL_DIR% ! xcopy /Y pyrfta.pyd %INSTALL_DIR% pause --- 1,5 ---- ! set INSTALL_DIR=..\src\pyrfta\test\rfta xcopy /Y rfta_mdr.ext %INSTALL_DIR% xcopy /Y rftaparser_mdr.ext %INSTALL_DIR% ! xcopy /Y _pyrfta.pyd %INSTALL_DIR% pause |
From: <bl...@us...> - 2003-05-29 14:42:10
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv11587/rfta Log Message: Directory /cvsroot/cpptool/rfta/src/pyrfta/test/rfta added to the repository |
From: <bl...@us...> - 2003-05-29 14:05:59
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv13378/test/rfta Added Files: __init__.py alltests.py codeanalysis.py codeanalysistest.py Log Message: * added initial structure for python extension --- NEW FILE: __init__.py --- from _pyrfta import * ##source = "void f() { return; }" ##parser = Parser( source ) ##fn = parser.getFunctionAt( 16 ) ##print fn.functionName.name ##body = fn.body ##for statement in body.getStatements(): ## print statement --- NEW FILE: alltests.py --- #!/usr/bin/env python # # Example of assembling all available unit tests into one suite. This usually # varies greatly from one project to the next, so the code shown below will not # be incorporated into the 'unittest' module. Instead, modify it for your own # purposes. # # $Id: alltests.py,v 1.1 2003/05/29 14:05:56 blep Exp $ import unittest import rfta.codeanalysistest def suite(): # modules_to_test = ('rfta.codeanalysistest') # and so on alltests = unittest.TestSuite() alltests.addTest(unittest.findTestCases(rfta.codeanalysistest)) # for module in map(__import__, modules_to_test): # alltests.addTest(unittest.findTestCases(module)) return alltests #if __name__ == '__main__': # unittest.main(defaultTest='suite') --- NEW FILE: codeanalysis.py --- import rfta class LocalVariableDeclarator(rfta.StatementVisitor): def __init__( self, resolver ): self.resolver = resolver def declare(self, functionBody): functionBody.accept(self) def visitCompoundStatement(self,compound): self.resolver.enterScope() self.resolver.exitScope() class LocalVariableResolver: def isLocaleVariable(self, variableName): return false def declareVariable(self, variableName): pass def enterScope(self): pass def exitScope(self): pass class Analyser: def getFunctionResolver( function ): resolver = LocaleVariableResolver() declarator = LocalVariableDeclarator( resolver ) declarator.visitCompoundStatement( function.body ) return resolver --- NEW FILE: codeanalysistest.py --- import unittest import mock import rfta from rfta.codeanalysis import * from mock import MockFactory class LocaleVariableDeclaratorTest(unittest.TestCase): """LocaleVariableDeclarator tests""" def setUp( self ): self.resolver = self.createMockInstance( LocalVariableResolver, [] ) self.declarator = LocalVariableDeclarator( self.resolver ) self.body = rfta.CompoundStatement() def tearDown( self ): self.declarator = None self.resolver = None def testConstruction( self ): pass def testEmptyBody( self ): self.resolver.declareVariable.setExpectNoCall() self.declarator.visitCompoundStatement( self.body ) self.assertEqual( self.resolver.enterScope.argsPassed, [()] ) self.assertEqual( self.resolver.exitScope.argsPassed, [()] ) def suite(): return unittest.makeSuite(IdentifierResolverTestCase) if __name__ == '__main__': unittest.TextTestRunner().run(suite()) |
From: <bl...@us...> - 2003-05-29 14:05:58
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test/mock In directory sc8-pr-cvs1:/tmp/cvs-serv13378/test/mock Added Files: MockFactory.py Test_MockFactory.py __init__.py Log Message: * added initial structure for python extension --- NEW FILE: MockFactory.py --- class MockMethod(object): def __init__(self, instance, methodName, realMethod): object.__init__(self) self.__name__ = methodName self.instance = instance self.method = getattr(instance, methodName) self.realMethod = realMethod self.kwargsPassed = [] self.argsPassed = [] def setExpectNoCall( self ): self.setException( AssertionError( "Expected no call." ) ) def setException(self, exception): self.eventSequence = [exception] def setReturnValue(self, value): self.eventSequence = [value] def setEventSequence(self, seq): self.eventSequence = seq[:] def __call__(self, *args, **kwargs): # Can we check the mock method has a similar interface to the real method? ## hide private methods from caller self.instance.called.append(self.__name__) self.argsPassed.append(args) self.kwargsPassed.append(kwargs) # default to returning None (if u don;t do anything) obj = None if self.realMethod: obj = self.realMethod(*args, **kwargs) if hasattr(self, "eventSequence"): try: obj = self.eventSequence.pop(0) except IndexError, ie: raise ie else: if isinstance(obj, Exception): raise obj return obj class MockFactory(object): def __new__(classDef, mockMethods, *args, **kwargs): self = classDef(*args, **kwargs) self.called = [] ## ensure specified methods are avaiaible callables = [ name for name in dir(self) if callable(getattr(self, name)) ] for m in mockMethods: if not m in callables: raise AttributeError("Specified mock method (%s)does not exist" % m) ## override this instances attributes for name in dir(self): attr = getattr(self, name) if name.startswith("__") and not name.endswith("__") or name=='called': continue elif callable(attr): if name in mockMethods: real = None else: real = attr setattr(self, name, MockMethod(self, name, real)) elif attr is None and name not in mockMethods and \ not (name.startswith("__") and name.endswith("__")): raise AttributeError("Cannot mock undefined instance variable (%s)" % name) else: setattr(self, name, attr) return self --- NEW FILE: Test_MockFactory.py --- import unittest from MockFactory import MockFactory, MockMethod class TestClass: "test" y=2 def __init__(self): self.x=1 def do(self, *args, **kwargs): return 1 def dont(self): return 2 def a(self): pass def b(self): pass def c(self): raise Exception("test") def d(self, x=1): print x def e(self, a,b,c=2,d=3): pass def main(self): self.do(1) self.dont() self.a() self.b() try: res = self.c() except Exception, e: print e res = self.dont() return res class TestClass2(TestClass): def __init__(self, a,b,c,d={}): TestClass.__init__(self) class TestClass3(TestClass): pass class AcceptMockFactory(unittest.TestCase): # nb. this method is named duiffently to show we are not testing a method of the mock object class def testAttributes(self): """prove mock object is the *same* object as the "real" class""" mockInstance = MockFactory.__new__(TestClass, []) self.assertEqual(mockInstance.y, 2) mockInstance.y = 5 self.assertEqual(mockInstance.y, 5) self.assertEqual(TestClass.y, 2) TestClass.y = 100 self.assertEqual(TestClass.y, 100) def testMethods(self): """prove a mock object's methods are all instances of MockMethod""" mockInstance = MockFactory.__new__(TestClass, []) callables = [ getattr(mockInstance, n) for n in dir(mockInstance) if callable(getattr(mockInstance, n)) and not n=="__init__" ] for method in callables: #just check that doen't raise method.setEventSequence(['anything']) self.assertRaises(AttributeError, MockFactory.__new__, TestClass3, ["a", "d", "quit"]) mockInstance = MockFactory.__new__(TestClass3, ["a", "d"]) self.failUnless(isinstance(mockInstance.a, MockMethod)) self.failUnless(isinstance(mockInstance.d, MockMethod)) class TestMockFactory(unittest.TestCase): def testConstruction(self): "Test that the mock object's constructor is valid" self.assertRaises(TypeError, MockFactory.__new__, TestClass2, []) self.assertRaises(TypeError, MockFactory.__new__, TestClass2, [], 1,2) self.assertRaises(TypeError, MockFactory.__new__, TestClass2, [], 1,2,3,e={1:1}) MockFactory.__new__(TestClass2, [], 1,2,3) MockFactory.__new__(TestClass2, [], 1,2,3,d={1:2}) ## add test for raising contructor def testCalled(self): "Test that we can find out what methods have been called on the mock object" tests = [(TestClass, [], ["main", "do", "dont", "a", "b", "c", "dont"]), (TestClass, ['c'], ["main", "do", "dont", "a", "b", "c"]), (TestClass3, [], ["main", "do", "dont", "a", "b", "c", "dont"]) ] for (testKlass, mockMethods, expected) in tests: mockObject = MockFactory.__new__(testKlass, mockMethods) mockObject.main() actual = mockObject.called self.assertEqual(actual,expected) class TestMockMethod(unittest.TestCase): def testSetException(self): "Simulate a method raising an exception" mockObject = MockFactory.__new__(TestClass, []) mockObject.a.setException(IOError("deliberate exception")) self.assertRaises(IOError, mockObject.a) def testSetReturnValue(self): "Simulate a method returning something" mockObject = MockFactory.__new__(TestClass, []) self.assertEqual(mockObject.dont(), 2) expected = "123" mockObject.dont.setReturnValue(expected) self.assertEqual(mockObject.dont(), expected) def testArgsPassed(self): "Get the arguments passed to a method" expected = [(123, "test"),(1123123,), ("matt",)] mockObject = MockFactory.__new__(TestClass, []) for args in expected: apply(mockObject.do, args) self.assertEqual(mockObject.do.argsPassed, expected) def testKwargsPassed(self): "Get the keyword arguments passed to a method" expected = [{"test":1},{"default":2}, {"3":4}] mockObject = MockFactory.__new__(TestClass, ["a", "b", "c"]) for kwargs in expected: apply(mockObject.do, [], kwargs) self.assertEqual(mockObject.do.kwargsPassed, expected) def testSetEventSequence(self): "Set a list of events that a method will return/raise upon invokation" events = [Exception("delibratly raised"), "some return value", IOError("Another raise"), None, "another return value"] mockObject = MockFactory.__new__(TestClass, []) mockObject.a.setEventSequence(events) for event in events: if isinstance(event, Exception): self.assertRaises(event.__class__, mockObject.a) else: self.assertEqual(mockObject.a(), event) self.assertRaises(IndexError, mockObject.a) class TestTestCaseUsage(unittest.TestCase): def testCreateMockInstance(self): x=self.createMockInstance(TestClass,[]) y=MockFactory.__new__(TestClass,[]) self.assertEqual(dir(x),dir(y)) if __name__=="__main__": unittest.main() --- NEW FILE: __init__.py --- import unittest from MockFactory import MockFactory def _createMockInstance( self, classType, methods=[], *initArgs, **initKwargs): """Create a mock instance of specified type (classType) See MockFactory.py for more detail """ return MockFactory.__new__( classType, methods, *initArgs, **initKwargs ) unittest.TestCase.createMockInstance = _createMockInstance |
From: <bl...@us...> - 2003-05-29 14:05:58
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test In directory sc8-pr-cvs1:/tmp/cvs-serv13378/test Added Files: README.txt alltests.py Log Message: * added initial structure for python extension --- NEW FILE: README.txt --- * Installation instruction. - You need at least python 2.2 to be installed. - You need to copy the following file in rfta/: _pyrfta.pyd boost_python.dll rfta_mdr.ext rftaparser_mdr.ext The python extension _pyrfta is imported in the rfta package in rfta/__init__.py. * Testing You need to make sure that the top directory (test/) is in the PYTHONPATH if you are not running script from the top directory. run alltests.py to run all the tests. --- NEW FILE: alltests.py --- #!/usr/bin/env python # # $Id: alltests.py,v 1.1 2003/05/29 14:05:55 blep Exp $ import unittest import rfta.alltests def suite(): alltests = unittest.TestSuite() alltests.addTest( rfta.alltests.suite() ) return alltests if __name__ == '__main__': unittest.main(defaultTest='suite') |
From: <bl...@us...> - 2003-05-29 14:05:58
|
Update of /cvsroot/cpptool/rfta/src/pyrfta In directory sc8-pr-cvs1:/tmp/cvs-serv13378 Modified Files: pyrfta.cpp pyrfta.dsp Log Message: * added initial structure for python extension Index: pyrfta.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/pyrfta.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** pyrfta.cpp 28 May 2003 20:47:27 -0000 1.7 --- pyrfta.cpp 29 May 2003 14:05:50 -0000 1.8 *************** *** 92,96 **** ! BOOST_PYTHON_MODULE(pyrfta) { exposeCPPParser(); --- 92,96 ---- ! BOOST_PYTHON_MODULE(_pyrfta) { exposeCPPParser(); Index: pyrfta.dsp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/pyrfta.dsp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** pyrfta.dsp 28 May 2003 20:47:27 -0000 1.8 --- pyrfta.dsp 29 May 2003 14:05:51 -0000 1.9 *************** *** 54,62 **** LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python22.lib boost_python.lib /nologo /dll /machine:I386 /out:"..\..\build\pyrfta\Release/pyrfta.pyd" /libpath:"../../lib" /libpath:"../../deplib/libs" # Begin Special Build Tool ! TargetPath=\prg\vc\Rfta\build\pyrfta\Release\pyrfta.pyd SOURCE="$(InputPath)" ! PostBuild_Cmds=copy $(TargetPath) ..\..\bin\pyrfta.pyd # End Special Build Tool --- 54,62 ---- LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python22.lib boost_python.lib /nologo /dll /machine:I386 /out:"..\..\build\pyrfta\Release/_pyrfta.pyd" /libpath:"../../lib" /libpath:"../../deplib/libs" # Begin Special Build Tool ! TargetPath=\prg\vc\Rfta\build\pyrfta\Release\_pyrfta.pyd SOURCE="$(InputPath)" ! PostBuild_Cmds=copy $(TargetPath) ..\..\bin\_pyrfta.pyd # End Special Build Tool *************** *** 85,93 **** LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python22.lib boost_python_debug.lib /nologo /dll /debug /machine:I386 /out:"..\..\build\pyrfta\Debug/pyrfta.pyd" /pdbtype:sept /libpath:"../../lib" /libpath:"../../deplib/libs" # Begin Special Build Tool ! TargetPath=\prg\vc\Rfta\build\pyrfta\Debug\pyrfta.pyd SOURCE="$(InputPath)" ! PostBuild_Cmds=copy $(TargetPath) ..\..\bin\pyrfta.pyd # End Special Build Tool --- 85,93 ---- LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept ! # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib python22.lib boost_python_debug.lib /nologo /dll /debug /machine:I386 /out:"..\..\build\pyrfta\Debug/_pyrfta.pyd" /pdbtype:sept /libpath:"../../lib" /libpath:"../../deplib/libs" # Begin Special Build Tool ! TargetPath=\prg\vc\Rfta\build\pyrfta\Debug\_pyrfta.pyd SOURCE="$(InputPath)" ! PostBuild_Cmds=copy $(TargetPath) ..\..\bin\_pyrfta.pyd # End Special Build Tool |
From: <bl...@us...> - 2003-05-29 13:59:37
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test/mock In directory sc8-pr-cvs1:/tmp/cvs-serv10954/mock Log Message: Directory /cvsroot/cpptool/rfta/src/pyrfta/test/mock added to the repository |
From: <bl...@us...> - 2003-05-29 13:59:20
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test In directory sc8-pr-cvs1:/tmp/cvs-serv10836/test Log Message: Directory /cvsroot/cpptool/rfta/src/pyrfta/test added to the repository |
From: <bl...@us...> - 2003-05-29 10:01:14
|
Update of /cvsroot/cpptool/rfta/src/rftavc7addin In directory sc8-pr-cvs1:/tmp/cvs-serv23827/src/rftavc7addin Modified Files: rftavc7addin.vcproj Log Message: * updated projects Index: rftavc7addin.vcproj =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rftavc7addin/rftavc7addin.vcproj,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** rftavc7addin.vcproj 15 May 2003 19:14:12 -0000 1.4 --- rftavc7addin.vcproj 29 May 2003 10:01:11 -0000 1.5 *************** *** 31,35 **** WarningLevel="3" Detect64BitPortabilityProblems="TRUE" ! DebugInformationFormat="4"/> <Tool Name="VCCustomBuildTool"/> --- 31,36 ---- WarningLevel="3" Detect64BitPortabilityProblems="TRUE" ! DebugInformationFormat="4" ! ShowIncludes="TRUE"/> <Tool Name="VCCustomBuildTool"/> |
From: <bl...@us...> - 2003-05-29 10:01:13
|
Update of /cvsroot/cpptool/rfta/src/rftavc6addin In directory sc8-pr-cvs1:/tmp/cvs-serv23827/src/rftavc6addin Modified Files: rftavc6addin.vcproj Log Message: * updated projects Index: rftavc6addin.vcproj =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rftavc6addin/rftavc6addin.vcproj,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** rftavc6addin.vcproj 14 May 2003 19:44:12 -0000 1.1 --- rftavc6addin.vcproj 29 May 2003 10:01:10 -0000 1.2 *************** *** 204,207 **** --- 204,213 ---- <File RelativePath=".\Commands.cpp"> + <FileConfiguration + Name="Debug|Win32"> + <Tool + Name="VCCLCompilerTool" + ShowIncludes="FALSE"/> + </FileConfiguration> </File> <File |
From: <bl...@us...> - 2003-05-29 10:01:13
|
Update of /cvsroot/cpptool/rfta/src/rftaparser In directory sc8-pr-cvs1:/tmp/cvs-serv23827/src/rftaparser Modified Files: rftaparser.vcproj Log Message: * updated projects Index: rftaparser.vcproj =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rftaparser/rftaparser.vcproj,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** rftaparser.vcproj 14 May 2003 19:44:12 -0000 1.1 --- rftaparser.vcproj 29 May 2003 10:01:10 -0000 1.2 *************** *** 1100,1106 **** </File> <File - RelativePath=".\Makefile.am"> - </File> - <File RelativePath=".\NonSemanticBlanker.cpp"> </File> --- 1100,1103 ---- *************** *** 1113,1116 **** --- 1110,1116 ---- <File RelativePath="..\..\include\rfta\parser\ParserTools.h"> + </File> + <File + RelativePath="UnitTests.cpp"> </File> </Files> |
From: <bl...@us...> - 2003-05-29 10:01:12
|
Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv23827/src/rfta Modified Files: rfta.vcproj Log Message: * updated projects Index: rfta.vcproj =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/rfta.vcproj,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** rfta.vcproj 14 May 2003 19:44:11 -0000 1.1 --- rfta.vcproj 29 May 2003 10:01:09 -0000 1.2 *************** *** 185,188 **** --- 185,200 ---- </File> <File + RelativePath="IdentifierScope.cpp"> + </File> + <File + RelativePath="IdentifierScope.h"> + </File> + <File + RelativePath="IdentifierScopeTest.cpp"> + </File> + <File + RelativePath="IdentifierScopeTest.h"> + </File> + <File RelativePath=".\IdentifierVisitor.cpp"> </File> *************** *** 311,314 **** --- 323,332 ---- </File> <File + RelativePath="CodeModelDeclarations.cpp"> + </File> + <File + RelativePath="..\..\include\rfta\refactoring\CodeModelDeclarations.h"> + </File> + <File RelativePath=".\CodeModelElement.cpp"> </File> *************** *** 326,329 **** --- 344,359 ---- </File> <File + RelativePath="CodeModelGenerator.cpp"> + </File> + <File + RelativePath="..\..\include\rfta\refactoring\CodeModelGenerator.h"> + </File> + <File + RelativePath="CodeModelParser.cpp"> + </File> + <File + RelativePath="..\..\include\rfta\refactoring\CodeModelParser.h"> + </File> + <File RelativePath=".\CodeModelStatements.cpp"> </File> *************** *** 623,626 **** --- 653,680 ---- <File RelativePath=".\CodeModelGeneratorTest.h"> + <FileConfiguration + Name="Release|Win32" + ExcludedFromBuild="TRUE"> + <Tool + Name="VCCustomBuildTool"/> + </FileConfiguration> + </File> + <File + RelativePath="CodeModelParserTest.cpp"> + <FileConfiguration + Name="Release|Win32" + ExcludedFromBuild="TRUE"> + <Tool + Name="VCCLCompilerTool"/> + </FileConfiguration> + </File> + <File + RelativePath="CodeModelParserTest.h"> + <FileConfiguration + Name="Release|Win32" + ExcludedFromBuild="TRUE"> + <Tool + Name="VCCustomBuildTool"/> + </FileConfiguration> </File> <File *************** *** 635,638 **** --- 689,698 ---- <File RelativePath=".\CodeWriterInsertTest.h"> + <FileConfiguration + Name="Release|Win32" + ExcludedFromBuild="TRUE"> + <Tool + Name="VCCustomBuildTool"/> + </FileConfiguration> </File> <File *************** *** 647,650 **** --- 707,716 ---- <File RelativePath=".\CodeWriterTest.h"> + <FileConfiguration + Name="Release|Win32" + ExcludedFromBuild="TRUE"> + <Tool + Name="VCCustomBuildTool"/> + </FileConfiguration> </File> <File *************** *** 659,662 **** --- 725,734 ---- <File RelativePath=".\CodeWriterTestBase.h"> + <FileConfiguration + Name="Release|Win32" + ExcludedFromBuild="TRUE"> + <Tool + Name="VCCustomBuildTool"/> + </FileConfiguration> </File> </Filter> |
From: <bl...@us...> - 2003-05-29 10:01:12
|
Update of /cvsroot/cpptool/rfta/src/pyrfta In directory sc8-pr-cvs1:/tmp/cvs-serv23827/src/pyrfta Modified Files: pyrfta.vcproj Log Message: * updated projects Index: pyrfta.vcproj =================================================================== RCS file: /cvsroot/cpptool/rfta/src/pyrfta/pyrfta.vcproj,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** pyrfta.vcproj 14 May 2003 19:44:09 -0000 1.1 --- pyrfta.vcproj 29 May 2003 10:01:09 -0000 1.2 *************** *** 150,153 **** --- 150,156 ---- </File> <File + RelativePath="ExposeDeclarations.cpp"> + </File> + <File RelativePath="..\..\include\xtl\python\ExposeEnumerator.h"> </File> |
From: <bl...@us...> - 2003-05-29 09:55:31
|
Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv22057a/src/rfta Modified Files: rfta.dsp Log Message: * added CodeModelParser, similar to CPPParser but returns CodeModel object instead of ASTNode. Index: rfta.dsp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/rfta.dsp,v retrieving revision 1.50 retrieving revision 1.51 diff -C2 -d -r1.50 -r1.51 *** rfta.dsp 28 May 2003 07:36:21 -0000 1.50 --- rfta.dsp 29 May 2003 09:55:25 -0000 1.51 *************** *** 1016,1023 **** --- 1016,1041 ---- SOURCE=.\CodeModelParserTest.cpp + + !IF "$(CFG)" == "rfta - Win32 Release" + + # PROP Exclude_From_Build 1 + + !ELSEIF "$(CFG)" == "rfta - Win32 Debug" + + !ENDIF + # End Source File # Begin Source File SOURCE=.\CodeModelParserTest.h + + !IF "$(CFG)" == "rfta - Win32 Release" + + # PROP Exclude_From_Build 1 + + !ELSEIF "$(CFG)" == "rfta - Win32 Debug" + + !ENDIF + # End Source File # Begin Source File |
From: <bl...@us...> - 2003-05-29 09:53:52
|
Update of /cvsroot/cpptool/rfta/src/pyrfta In directory sc8-pr-cvs1:/tmp/cvs-serv21597/src/pyrfta Added Files: ExposeDeclarations.cpp Log Message: * exposed code model declaration and parser --- NEW FILE: ExposeDeclarations.cpp --- #include "Forwards.h" #include <boost/python.hpp> #include <rfta/refactoring/CodeModelDeclarations.h> using namespace boost::python; using namespace Refactoring::CodeModel; void exposeDeclarations() { // void (Expression::*mfAcceptExpressionVisitor)( ExpressionVisitor & ) = &Expression::accept; // class_<Expression, bases<Element>, boost::noncopyable >( "Expression", no_init ) // .def( "accept", mfAcceptExpressionVisitor ) // ; class_<FunctionDeclaration, FunctionDeclarationPtr, bases<Element>, boost::noncopyable >( "FunctionDeclaration", init< TypePtr, FunctionNamePtr, ParametersPtr, optional<CompoundStatementPtr> >() ) .add_property( "functionName", &FunctionDeclaration::getFunctionName ) .def( "hasBody", &FunctionDeclaration::hasBody ) .add_property( "body", &FunctionDeclaration::getBody ) ; class_<Type, TypePtr, bases<Element>, boost::noncopyable>( "Type", init< std::string >() ) .add_property( "typeText", &Type::getTypeText ) ; class_<ArrayTypeSuffix, ArrayTypeSuffixPtr, bases<Element>, boost::noncopyable>( "ArrayTypeSuffix", init< std::string >() ) .add_property( "suffixText", &ArrayTypeSuffix::getSuffixText ) ; class_<FunctionName, FunctionNamePtr, bases<Element>, boost::noncopyable>( "FunctionName", init< std::string >() ) .add_property( "name", &FunctionName::getName ) ; class_<Parameters, ParametersPtr, bases<Element>, boost::noncopyable>( "Parameters" ) ; } |