summaryrefslogtreecommitdiff
path: root/colm/pdabuild.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'colm/pdabuild.cpp')
-rw-r--r--colm/pdabuild.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/colm/pdabuild.cpp b/colm/pdabuild.cpp
index 07449330..d824c7d5 100644
--- a/colm/pdabuild.cpp
+++ b/colm/pdabuild.cpp
@@ -1506,7 +1506,29 @@ void ParseData::makeRuntimeData()
runtimeData->litlen[el->value] = el->key.length();
}
- /* FIXME: Captured attributes go here. */
+ /* Captured attributes. Loop over tokens and count first. */
+ long numCapturedAttr = 0;
+ for ( RegionList::Iter reg = regionList; reg.lte(); reg++ ) {
+ for ( TokenDefList::Iter td = reg->tokenDefList; td.lte(); td++ )
+ numCapturedAttr += td->reCaptureVect.length();
+ }
+ runtimeData->captureAttr = new CaptureAttr[numCapturedAttr];
+ runtimeData->numCapturedAttr = numCapturedAttr;
+
+ count = 0;
+ for ( RegionList::Iter reg = regionList; reg.lte(); reg++ ) {
+ for ( TokenDefList::Iter td = reg->tokenDefList; td.lte(); td++ ) {
+ runtimeData->lelInfo[td->token->id].captureAttr = count;
+ runtimeData->lelInfo[td->token->id].numCaptureAttr = td->reCaptureVect.length();
+ for ( ReCaptureVect::Iter c = td->reCaptureVect; c.lte(); c++ ) {
+ runtimeData->captureAttr[count].mark_enter = c->markEnter->markId;
+ runtimeData->captureAttr[count].mark_leave = c->markLeave->markId;
+ runtimeData->captureAttr[count].offset = c->objField->offset;
+
+ count += 1;
+ }
+ }
+ }
runtimeData->fsmTables = fsmTables;
runtimeData->pdaTables = pdaTables;
@@ -1520,7 +1542,6 @@ void ParseData::makeRuntimeData()
runtimeData->eofLelIds[lel->parserId] = lel->eofLel->id;
}
}
-
runtimeData->globalSize = globalObjectDef->size();