summaryrefslogtreecommitdiff
path: root/colm/tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'colm/tree.c')
-rw-r--r--colm/tree.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/colm/tree.c b/colm/tree.c
index edd0dc79..341aad8d 100644
--- a/colm/tree.c
+++ b/colm/tree.c
@@ -986,14 +986,12 @@ Tree *createGeneric( Program *prg, long genericId )
Parser *parser = (Parser*)mapElAllocate( prg );
parser->id = genericInfo->langElId;
parser->genericInfo = genericInfo;
- parser->fsmRun = malloc( sizeof(FsmRun) );
parser->pdaRun = malloc( sizeof(PdaRun) );
+ parser->pdaRun->fsmRun = malloc( sizeof(FsmRun) );
/* Start off the parsing process. */
- initPdaRun( parser->pdaRun, prg, prg->rtd->pdaTables,
- parser->fsmRun, genericInfo->parserId, false, false, 0 );
- initFsmRun( parser->fsmRun, prg );
- newToken( prg, parser->pdaRun, parser->fsmRun );
+ initPdaRun( prg, parser->pdaRun, parser->pdaRun->fsmRun, prg->rtd->pdaTables,
+ genericInfo->parserId, false, false, 0 );
newGeneric = (Tree*) parser;
break;
@@ -1045,10 +1043,10 @@ free_tree:
}
else if ( generic->type == GEN_PARSER ) {
Parser *parser = (Parser*)tree;
- clearFsmRun( prg, parser->fsmRun );
+ clearFsmRun( prg, parser->pdaRun->fsmRun );
clearPdaRun( prg, sp, parser->pdaRun );
+ free( parser->pdaRun->fsmRun );
free( parser->pdaRun );
- free( parser->fsmRun );
treeDownref( prg, sp, (Tree*)parser->input );
mapElFree( prg, (MapEl*)parser );
}
@@ -2054,7 +2052,10 @@ void appendFile( struct ColmPrintArgs *args, const char *data, int length )
void appendFd( struct ColmPrintArgs *args, const char *data, int length )
{
- write( (long)args->arg, data, length );
+ int res = write( (long)args->arg, data, length );
+ if ( res != 0 ) {
+ message( "write error\n" );
+ }
}
Tree *treeTrim( struct ColmProgram *prg, Tree **sp, Tree *tree )