Update of /cvsroot/cpptool/rfta/src/rftaparser
In directory sc8-pr-cvs1:/tmp/cvs-serv9956/src/rftaparser
Modified Files:
CaseStatementParser.cpp CaseStatementParser.h
Log Message:
* refactored to use CStringView
Index: CaseStatementParser.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rftaparser/CaseStatementParser.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** CaseStatementParser.cpp 20 Dec 2002 08:30:50 -0000 1.3
--- CaseStatementParser.cpp 26 Apr 2003 21:12:36 -0000 1.4
***************
*** 9,12 ****
--- 9,14 ----
#include <rfta/parser/ASTNodes.h>
#include <rfta/parser/ParseContext.h>
+ #include <rfta/parser/ParserTools.h>
+ #include <xtl/CStringView.h>
***************
*** 33,84 ****
Tracker tracker( "CaseStatementParser::parse", *this );
! current_ = keywordEnd;
!
! skipSpaces();
!
! int constantStartIndex = getCurrentIndex();
! skipUntilColonBalancingBraces();
!
! const char *actualEnd = current_;
!
! --current_; // skip colon
! backtrackSkippingSpaces();
! int constantLength = getCurrentIndex() - constantStartIndex;
! if ( constantLength <= 0 )
! throwFailure( "expected constant not found!" );
! current_ = actualEnd;
! ASTNodePtr caseStatementNode =
! createASTNode( ASTNodeTypes::caseStatement,
! getParentNode(),
! getStartIndex(),
! getCurrentLength() );
! context_.addNode( caseStatementNode );
! ASTNodePtr constantNode =
! createASTNode( ASTNodeTypes::constantExpression,
! caseStatementNode,
! constantStartIndex,
! constantLength );
! caseStatementNode->setPropertyNode( ASTNodeProperties::constantValueProperty,
! constantNode );
! }
! void
! CaseStatementParser::skipUntilColonBalancingBraces()
! {
! while ( current_ != end_ )
{
! char c = *current_++;
! if ( c == '(' )
! findNextBalanced( '(', ')' );
! else if ( c == ':' )
! return;
}
-
- throwFailure( "failed to find expected ':' after constant expression." );
}
--- 35,73 ----
Tracker tracker( "CaseStatementParser::parse", *this );
! try
! {
! Xtl::CStringEnumerator current( Xtl::CStringView(keywordEnd, end_).enumerate() );
! ParserTools::skipSpaces( current );
! Xtl::CStringView constant( current );
! ParserTools::skipUntil( current, ':', ParserTools::SkipBalancingBracePolicy() );
! Xtl::CStringView caseStatement( start_, current.getCurrentPos() );
! Xtl::CStringBackEnumerator backTracker( --current );
! ParserTools::skipSpaces( backTracker );
! constant.setEnd( backTracker.getCurrentPos() );
! if ( constant.isEmpty() )
! throwFailure( "Missing case constant." );
! ASTNodePtr caseStatementNode =
! createASTNode( ASTNodeTypes::caseStatement,
! getParentNode(),
! caseStatement );
! context_.addNode( caseStatementNode );
+ ASTNodePtr constantNode =
+ createASTNode( ASTNodeTypes::constantExpression,
+ caseStatementNode,
+ constant );
+ caseStatementNode->setPropertyNode( ASTNodeProperties::constantValueProperty,
+ constantNode );
! current_ = caseStatement.getEnd();
! }
! catch ( ParserTools::ParseError &e )
{
! throwFailure( e );
}
}
Index: CaseStatementParser.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rftaparser/CaseStatementParser.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** CaseStatementParser.h 24 Oct 2002 19:10:58 -0000 1.1
--- CaseStatementParser.h 26 Apr 2003 21:12:36 -0000 1.2
***************
*** 30,36 ****
private:
- void skipUntilColonBalancingBraces();
-
- private:
};
--- 30,33 ----
|