/*
- * Copyright 2002-2004 Adrian Thurston <thurston@cs.queensu.ca>
+ * Copyright 2002-2004 Adrian Thurston <thurston@complang.org>
*/
/* This file is part of Ragel.
/* If the new start state is final then set the out priority. This follows
* the same convention as setting start action in the out action table of
* a final start state. */
- if ( startState->stateBits & SB_ISFINAL )
+ if ( startState->stateBits & STB_ISFINAL )
startState->outPriorTable.setPrior( ordering, prior );
}
/* If start state is final then add the action to the out action table.
* This means that when the null string is accepted the start action will
* not be bypassed. */
- if ( startState->stateBits & SB_ISFINAL )
+ if ( startState->stateBits & STB_ISFINAL )
startState->outActionTable.setAction( ordering, action );
}
}
}
+void FsmAp::setErrorActions( StateAp *state, const ActionTable &other )
+{
+ /* Fill any gaps in the out list with an error transition. */
+ fillGaps( state );
+
+ /* Set error transitions in the transitions that go to error. */
+ for ( TransList::Iter trans = state->outList; trans.lte(); trans++ ) {
+ if ( trans->toState == 0 )
+ trans->actionTable.setActions( other );
+ }
+}
+
void FsmAp::setErrorAction( StateAp *state, int ordering, Action *action )
{
/* Fill any gaps in the out list with an error transition. */
{
for ( StateList::Iter state = stateList; state.lte(); state++ ) {
/* Non final states should not have leaving data. */
- if ( ! (state->stateBits & SB_ISFINAL) ) {
+ if ( ! (state->stateBits & STB_ISFINAL) ) {
assert( state->outActionTable.length() == 0 );
assert( state->outCondSet.length() == 0 );
assert( state->outPriorTable.length() == 0 );
}
/* Data used in algorithms should be cleared. */
- assert( (state->stateBits & SB_BOTH) == 0 );
+ assert( (state->stateBits & STB_BOTH) == 0 );
assert( state->foreignInTrans > 0 );
}
}