delete reItem;
break;
case RegExprType:
- delete regExp;
+ delete regExpr;
break;
case ReferenceType:
break;
rtnVal = reItem->walk( pd, 0 );
break;
case RegExprType:
- rtnVal = regExp->walk( pd, 0 );
+ rtnVal = regExpr->walk( pd, 0 );
break;
case ReferenceType:
rtnVal = varDef->walk( pd );
{
switch ( type ) {
case RecurseItem:
- delete regExp;
+ delete regExpr;
delete item;
break;
case Empty:
switch ( type ) {
case RecurseItem: {
/* Walk both items. */
- FsmAp *fsm1 = regExp->walk( pd, rootRegex );
+ rtnVal = regExpr->walk( pd, rootRegex );
FsmAp *fsm2 = item->walk( pd, rootRegex );
- if ( fsm1 == 0 )
- rtnVal = fsm2;
- else {
- fsm1->concatOp( fsm2 );
- rtnVal = fsm1;
- }
+ rtnVal->concatOp( fsm2 );
break;
}
case Empty: {
- /* FIXME: Return something here. */
- rtnVal = 0;
+ rtnVal = new FsmAp();
+ rtnVal->lambdaFsm();
break;
}
}
case OrBlock: {
/* Get the or block and minmize it. */
rtnVal = orBlock->walk( pd, rootRegex );
+ if ( rtnVal == 0 ) {
+ rtnVal = new FsmAp();
+ rtnVal->lambdaFsm();
+ }
rtnVal->minimizePartition2();
break;
}
reItem(reItem), type(OrExprType) { }
/* Construct with a regular expression. */
- Factor( RegExpr *regExp ) :
- regExp(regExp), type(RegExprType) { }
+ Factor( RegExpr *regExpr ) :
+ regExpr(regExpr), type(RegExprType) { }
/* Construct with a reference to a var def. */
Factor( const InputLoc &loc, VarDef *varDef ) :
Literal *literal;
Range *range;
ReItem *reItem;
- RegExpr *regExp;
+ RegExpr *regExpr;
VarDef *varDef;
Join *join;
LongestMatch *longestMatch;
/* Constructors. */
RegExpr() :
type(Empty), caseInsensitive(false) { }
- RegExpr(RegExpr *regExp, ReItem *item) :
- regExp(regExp), item(item),
+ RegExpr(RegExpr *regExpr, ReItem *item) :
+ regExpr(regExpr), item(item),
type(RecurseItem), caseInsensitive(false) { }
~RegExpr();
FsmAp *walk( ParseData *pd, RegExpr *rootRegex );
- RegExpr *regExp;
+ RegExpr *regExpr;
ReItem *item;
RegExpType type;
bool caseInsensitive;