From: <net...@us...> - 2003-09-07 13:29:42
|
Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv28972/rfta/src/rfta Modified Files: IdentifierResolverContext.h IdentifierResolverContext.cpp Log Message: -- does use now identifierscope class for complete identifier resolving Index: IdentifierResolverContext.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/IdentifierResolverContext.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** IdentifierResolverContext.h 6 Sep 2003 21:52:46 -0000 1.6 --- IdentifierResolverContext.h 7 Sep 2003 13:29:39 -0000 1.7 *************** *** 70,80 **** std::string getIdentifierName( const ASTNodePtr &identifierNode ) const; - typedef std::deque<ASTNodePtr> LocalVariables; - typedef std::deque<LocalVariables> ScopeLocalVariables; - ScopeLocalVariables scopeLocalVariables_; - - typedef std::map<std::string, LocalVariables> VisibleLocalVariables; - VisibleLocalVariables visibleLocalVariables_; - typedef std::map<ASTNodePtr,ASTNodePtr> ResolvedUnqualifiedIdentifiers; ResolvedUnqualifiedIdentifiers resolvedIdentifiers_; --- 70,73 ---- Index: IdentifierResolverContext.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/IdentifierResolverContext.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** IdentifierResolverContext.cpp 6 Sep 2003 21:52:46 -0000 1.9 --- IdentifierResolverContext.cpp 7 Sep 2003 13:29:39 -0000 1.10 *************** *** 15,19 **** IdentifierResolverContext::IdentifierResolverContext() { ! identifierRootScope_ = IdentifierScope::createScope(IdentifierScopeWeakPtr()); identifierCurrentScope_ = identifierRootScope_; } --- 15,19 ---- IdentifierResolverContext::IdentifierResolverContext() { ! identifierRootScope_ = IdentifierScope::createScope(IdentifierScopeWeakPtr(), "ROOT"); identifierCurrentScope_ = identifierRootScope_; } *************** *** 31,35 **** --- 31,38 ---- IdentifierResolverContext::enterUnnamedSubScope() { + identifierCurrentScope_ = IdentifierScope::createSubScope(identifierCurrentScope_,""); + /* scopeLocalVariables_.push_back( LocalVariables() ); + */ } *************** *** 38,66 **** IdentifierResolverContext::leaveUnnamedSubScope() { ! if ( scopeLocalVariables_.empty() ) ! throw std::logic_error( "IdentifierResolverContext::leaveUnnamedSubScope(): " ! "no matching enterUnnamedSubScope()." ); ! ! LocalVariables &variables = scopeLocalVariables_.back(); ! LocalVariables::iterator it = variables.begin(); ! LocalVariables::iterator itEnd = variables.end(); ! while ( it != itEnd ) ! { ! const ASTNodePtr &node = *it++; ! VisibleLocalVariables::iterator itName = ! visibleLocalVariables_.find( getLocalVariableName(node) ); ! if ( itName == visibleLocalVariables_.end() ) ! { ! throw std::logic_error( "IdentifierResolverContext::leaveUnnamedSubScope(): " ! "inconsitent state, variable declared but not in visible variable list." ); ! } ! ! if ( itName->second.size() == 1 ) ! visibleLocalVariables_.erase( itName ); ! else ! itName->second.pop_front(); ! } - scopeLocalVariables_.pop_back(); } --- 41,48 ---- IdentifierResolverContext::leaveUnnamedSubScope() { ! IdentifierScopePtr next = boost::make_shared( identifierCurrentScope_->getParentScope() ); ! next->removeSubScope( identifierCurrentScope_ ); ! identifierCurrentScope_ = next; } *************** *** 71,81 **** { const std::string name = getLocalVariableName( localVariableDeclNode ); ! visibleLocalVariables_[ name ].push_front( localVariableDeclNode ); ! ! LocalVariables &variables = scopeLocalVariables_.back(); ! variables.push_back( localVariableDeclNode ); ASTNodePtr variableNameNode = getLocalVariableNameNode( localVariableDeclNode ); ! resolvedIdentifiers_[ variableNameNode ] = localVariableDeclNode; } --- 53,60 ---- { const std::string name = getLocalVariableName( localVariableDeclNode ); ! identifierCurrentScope_->addIdentifierDeclaration(name, localVariableDeclNode); ASTNodePtr variableNameNode = getLocalVariableNameNode( localVariableDeclNode ); ! resolvedIdentifiers_[ variableNameNode ] = localVariableDeclNode; } *************** *** 87,103 **** const std::string name = getIdentifierName( identifierNode ); ! VisibleLocalVariables::iterator it = visibleLocalVariables_.find( name ); ! if ( it == visibleLocalVariables_.end() ) ! return; ! ! if ( it->second.empty() ) { ! throw std::logic_error( "IdentifierResolverContext::resolveUnqualifiedIdentifier( " + ! identifierNode->getBlankedText() + "): variable found in " ! "list of visible variable, but no declaration found!" ); } ! ! const ASTNodePtr &localVariableDeclNode = it->second.front(); ! resolvedIdentifiers_[ identifierNode ] = localVariableDeclNode; } --- 66,75 ---- const std::string name = getIdentifierName( identifierNode ); ! ASTNodePtr declNode = identifierCurrentScope_->getIdentifierDeclaration(name); ! if (!declNode) // no declaration found ... { ! return; } ! resolvedIdentifiers_[ identifierNode ] = declNode; } |