X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=ragel%2Fparsedata.cpp;h=6e2558b27b0d4a364fa42641bf9936be32074478;hb=5d9e2032588f4896780617065d6704979cdfcaef;hp=9a05d7080549b5bf0997b46724f7d7ef554de448;hpb=6fc85667e35a6563a1c679b9ebecaf04eb8aa0be;p=external%2Fragel.git diff --git a/ragel/parsedata.cpp b/ragel/parsedata.cpp index 9a05d70..6e2558b 100644 --- a/ragel/parsedata.cpp +++ b/ragel/parsedata.cpp @@ -37,7 +37,7 @@ using namespace std; char mainMachine[] = "main"; -void Token::set( char *str, int len ) +void Token::set( const char *str, int len ) { length = len; data = new char[len+1]; @@ -61,7 +61,7 @@ void Token::append( const Token &other ) void afterOpMinimize( FsmAp *fsm, bool lastInSeq ) { /* Switch on the prefered minimization algorithm. */ - if ( minimizeOpt == MinimizeEveryOp || minimizeOpt == MinimizeMostOps && lastInSeq ) { + if ( minimizeOpt == MinimizeEveryOp || ( minimizeOpt == MinimizeMostOps && lastInSeq ) ) { /* First clean up the graph. FsmAp operations may leave these * lying around. There should be no dead end states. The subtract * intersection operators are the only places where they may be @@ -108,7 +108,7 @@ Key makeFsmKeyHex( char *str, const InputLoc &loc, ParseData *pd ) unsigned long ul = strtoul( str, 0, 16 ); - if ( errno == ERANGE || unusedBits && ul >> (size * 8) ) { + if ( errno == ERANGE || ( unusedBits && ul >> (size * 8) ) ) { error(loc) << "literal " << str << " overflows the alphabet type" << endl; ul = 1 << (size * 8); } @@ -130,12 +130,12 @@ Key makeFsmKeyDec( char *str, const InputLoc &loc, ParseData *pd ) long long ll = strtoll( str, 0, 10 ); /* Check for underflow. */ - if ( errno == ERANGE && ll < 0 || ll < minVal) { + if ( ( errno == ERANGE && ll < 0 ) || ll < minVal) { error(loc) << "literal " << str << " underflows the alphabet type" << endl; ll = minVal; } /* Check for overflow. */ - else if ( errno == ERANGE && ll > 0 || ll > maxVal ) { + else if ( ( errno == ERANGE && ll > 0 ) || ll > maxVal ) { error(loc) << "literal " << str << " overflows the alphabet type" << endl; ll = maxVal; } @@ -471,7 +471,7 @@ ParseData::~ParseData() /* Make a name id in the current name instantiation scope if it is not * already there. */ -NameInst *ParseData::addNameInst( const InputLoc &loc, char *data, bool isLabel ) +NameInst *ParseData::addNameInst( const InputLoc &loc, const char *data, bool isLabel ) { /* Create the name instantitaion object and insert it. */ NameInst *newNameInst = new NameInst( loc, curNameInst, data, nextNameId++, isLabel ); @@ -556,7 +556,7 @@ void ParseData::unsetObsoleteEntries( FsmAp *graph ) } } -NameSet ParseData::resolvePart( NameInst *refFrom, char *data, bool recLabelsOnly ) +NameSet ParseData::resolvePart( NameInst *refFrom, const char *data, bool recLabelsOnly ) { /* Queue needed for breadth-first search, load it with the start node. */ NameInstList nameQueue; @@ -735,21 +735,25 @@ void ParseData::resolveNameRefs( InlineList *inlineList, Action *action ) /* Resolve, pass action for local search. */ NameInst *target = resolveStateRef( *item->nameRef, item->loc, action ); - /* Check if the target goes into a longest match. */ - NameInst *search = target->parent; - while ( search != 0 ) { - if ( search->isLongestMatch ) { - error(item->loc) << "cannot enter inside a longest " - "match construction as an entry point" << endl; - break; + /* Name lookup error reporting is handled by resolveStateRef. */ + if ( target != 0 ) { + /* Check if the target goes into a longest match. */ + NameInst *search = target->parent; + while ( search != 0 ) { + if ( search->isLongestMatch ) { + error(item->loc) << "cannot enter inside a longest " + "match construction as an entry point" << endl; + break; + } + search = search->parent; } - search = search->parent; - } - /* Note the reference in the name. This will cause the entry - * point to survive to the end of the graph generating walk. */ - if ( target != 0 ) + /* Record the reference in the name. This will cause the + * entry point to survive to the end of the graph + * generating walk. */ target->numRefs += 1; + } + item->nameTarg = target; break; } @@ -819,7 +823,7 @@ void ParseData::makeNameTree( GraphDictEl *dictEl ) } -void ParseData::createBuiltin( char *name, BuiltinMachine builtin ) +void ParseData::createBuiltin( const char *name, BuiltinMachine builtin ) { Expression *expression = new Expression( builtin ); Join *join = new Join( expression ); @@ -889,9 +893,9 @@ bool ParseData::setVariable( char *var, InlineList *inlineList ) stackExpr = inlineList; else if ( strcmp( var, "act" ) == 0 ) actExpr = inlineList; - else if ( strcmp( var, "tokstart" ) == 0 ) + else if ( strcmp( var, "ts" ) == 0 ) tokstartExpr = inlineList; - else if ( strcmp( var, "tokend" ) == 0 ) + else if ( strcmp( var, "te" ) == 0 ) tokendExpr = inlineList; else set = false; @@ -960,7 +964,7 @@ void ParseData::removeActionDups( FsmAp *graph ) } } -Action *ParseData::newAction( char *name, InlineList *inlineList ) +Action *ParseData::newAction( const char *name, InlineList *inlineList ) { InputLoc loc; loc.line = 1; @@ -991,13 +995,13 @@ void ParseData::initLongestMatchData() /* The setTokStart action sets tokstart. */ InlineList *il5 = new InlineList; il5->append( new InlineItem( InputLoc(), InlineItem::LmSetTokStart ) ); - setTokStart = newAction( "tokstart", il5 ); + setTokStart = newAction( "ts", il5 ); setTokStart->isLmAction = true; /* The setTokEnd action sets tokend. */ InlineList *il3 = new InlineList; il3->append( new InlineItem( InputLoc(), InlineItem::LmSetTokEnd ) ); - setTokEnd = newAction( "tokend", il3 ); + setTokEnd = newAction( "te", il3 ); setTokEnd->isLmAction = true; /* The action will also need an ordering: ahead of all user action @@ -1072,7 +1076,8 @@ FsmAp *ParseData::makeInstance( GraphDictEl *gdNode ) for ( StateList::Iter state = graph->stateList; state.lte(); state++ ) graph->transferErrorActions( state, 0 ); - removeActionDups( graph ); + if ( ::wantDupsRemoved ) + removeActionDups( graph ); /* Remove unreachable states. There should be no dead end states. The * subtract and intersection operators are the only places where they may @@ -1121,7 +1126,7 @@ void ParseData::printNameTree() /* Show that the name index is correct. */ for ( int ni = 0; ni < nextNameId; ni++ ) { cerr << ni << ": "; - char *name = nameIndex[ni]->name; + const char *name = nameIndex[ni]->name; cerr << ( name != 0 ? name : "" ) << endl; } } @@ -1459,6 +1464,7 @@ void writeLanguage( std::ostream &out ) case HostLang::D: out << "D"; break; case HostLang::Java: out << "Java"; break; case HostLang::Ruby: out << "Ruby"; break; + case HostLang::CSharp: out << "C#"; break; } out << "\"";