diff options
author | Adrian Thurston <thurston@complang.org> | 2015-01-05 10:25:21 -0500 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2015-01-05 10:25:21 -0500 |
commit | 54cda6a9e917e9631c5ac21e6159c5753df3d58a (patch) | |
tree | a63a918554a504e99dbfb2a5bed37dda44262928 | |
parent | 4accc36ee55e6ce863ec2e1940ca84b776442e1f (diff) | |
download | colm-54cda6a9e917e9631c5ac21e6159c5753df3d58a.tar.gz |
removed the generic pointer from LangEl
-rw-r--r-- | src/compiler.h | 3 | ||||
-rw-r--r-- | src/pdabuild.cc | 4 | ||||
-rw-r--r-- | src/pdacodegen.cc | 1 | ||||
-rw-r--r-- | src/pdarun.h | 4 | ||||
-rw-r--r-- | src/synthesis.cc | 74 | ||||
-rw-r--r-- | src/tree.c | 111 |
6 files changed, 85 insertions, 112 deletions
diff --git a/src/compiler.h b/src/compiler.h index 7d3d6229..19874a8a 100644 --- a/src/compiler.h +++ b/src/compiler.h @@ -232,7 +232,6 @@ struct LangEl : public DListEl<LangEl> Type type; long id; - bool isContext; String displayString; long numAppearances; bool commit; @@ -267,8 +266,6 @@ struct LangEl : public DListEl<LangEl> long thisSize; long ofiOffset; - GenericType *generic; - long parserId; PredType predType; diff --git a/src/pdabuild.cc b/src/pdabuild.cc index 6652d45a..f2621166 100644 --- a/src/pdabuild.cc +++ b/src/pdabuild.cc @@ -46,8 +46,6 @@ LangEl::LangEl( Namespace *nspace, const String &name, Type type ) lit(name), type(type), id(-1), - isContext(false), - //displayString(0), numAppearances(0), commit(false), isIgnore(false), @@ -69,7 +67,6 @@ LangEl::LangEl( Namespace *nspace, const String &name, Type type ) objectDef(0), thisSize(0), ofiOffset(0), - generic(0), parserId(-1), predType(PredNone), predValue(0), @@ -1462,7 +1459,6 @@ void Compiler::makeRuntimeData() // } runtimeData->lelInfo[i].termDupId = lel->termDup == 0 ? 0 : lel->termDup->id; - runtimeData->lelInfo[i].genericId = lel->generic == 0 ? 0 : lel->generic->id; if ( lel->tokenDef != 0 && lel->tokenDef->join != 0 && lel->tokenDef->join->context != 0 ) diff --git a/src/pdacodegen.cc b/src/pdacodegen.cc index 1821accc..a2fe0a4a 100644 --- a/src/pdacodegen.cc +++ b/src/pdacodegen.cc @@ -174,7 +174,6 @@ void PdaCodeGen::writeRuntimeData( RuntimeData *runtimeData, PdaTables *pdaTable out << el->ofiOffset << ", "; out << el->objectLength << ", "; out << el->termDupId << ", "; - out << el->genericId << ", "; out << el->markId << ", "; out << el->captureAttr << ", "; out << el->numCaptureAttr; diff --git a/src/pdarun.h b/src/pdarun.h index 14f1ffc9..104b8ee3 100644 --- a/src/pdarun.h +++ b/src/pdarun.h @@ -155,11 +155,7 @@ typedef struct _LangElInfo long ofiOffset; long objectLength; -// long contextTypeId; -// long contextLength; - long termDupId; - long genericId; long markId; long captureAttr; long numCaptureAttr; diff --git a/src/synthesis.cc b/src/synthesis.cc index 62078475..9300e457 100644 --- a/src/synthesis.cc +++ b/src/synthesis.cc @@ -772,9 +772,9 @@ ObjectField **LangVarRef::evaluateArgs( Compiler *pd, CodeVect &code, for ( CallArgVect::Iter pe = *args; pe.lte(); pe++ ) { CodeVect unused; UniqueType *ut = (*pe)->expr->evaluate( pd, unused ); - if ( ut->typeId == TYPE_PTR && ut->langEl->generic != 0 && + if ( ut->typeId == TYPE_PTR /* && ut->langEl->generic != 0 && ( ut->langEl->generic->typeId == GEN_LIST || - ut->langEl->generic->typeId == GEN_MAP ) ) + ut->langEl->generic->typeId == GEN_MAP ) */ ) { derefs[pe.pos()] = true; } @@ -1202,23 +1202,23 @@ UniqueType *LangTerm::evaluateNewstruct( Compiler *pd, CodeVect &code ) const if ( replUT->typeId == TYPE_STRUCT ) error(loc) << "cannot new a struct, use new2" << endp; - if ( replUT->langEl->generic != 0 ) { - /* Use the new generic. */ - code.append( IN_CONS_GENERIC ); - code.appendHalf( replUT->langEl->generic->id ); - - if ( replUT->langEl->generic->typeId == GEN_PARSER ) { - code.append( IN_DUP_TOP ); - code.append( IN_CONSTRUCT_INPUT ); - code.append( IN_TOP_SWAP ); - code.append( IN_SET_INPUT ); - } - } - else { +// if ( replUT->langEl->generic != 0 ) { +// /* Use the new generic. */ +// code.append( IN_CONS_GENERIC ); +// code.appendHalf( replUT->langEl->generic->id ); +// +// if ( replUT->langEl->generic->typeId == GEN_PARSER ) { +// code.append( IN_DUP_TOP ); +// code.append( IN_CONSTRUCT_INPUT ); +// code.append( IN_TOP_SWAP ); +// code.append( IN_SET_INPUT ); +// } +// } +// else { /* New object (tree-based). */ code.append( IN_CONS_OBJECT ); code.appendHalf( replUT->langEl->id ); - } +// } if ( varRef != 0 ) { code.append( IN_DUP_TOP ); @@ -1600,31 +1600,33 @@ void LangTerm::evaluateSendParser( Compiler *pd, CodeVect &code, bool strings ) UniqueType *LangTerm::evaluateSend( Compiler *pd, CodeVect &code ) const { - UniqueType *varUt = varRef->lookup( pd ); - GenericType *generic = varUt->langEl->generic; - - if ( varUt == pd->uniqueTypeStream ) - evaluateSendStream( pd, code ); - else if ( generic != 0 && generic->typeId == GEN_PARSER ) - evaluateSendParser( pd, code, true ); - else - error(loc) << "can only send to parsers and streams" << endl; - - return varUt; +// UniqueType *varUt = varRef->lookup( pd ); +// GenericType *generic = varUt->langEl->generic; +// +// if ( varUt == pd->uniqueTypeStream ) +// evaluateSendStream( pd, code ); +// else if ( generic != 0 && generic->typeId == GEN_PARSER ) +// evaluateSendParser( pd, code, true ); +// else +// error(loc) << "can only send to parsers and streams" << endl; +// +// return varUt; + return 0; } UniqueType *LangTerm::evaluateSendTree( Compiler *pd, CodeVect &code ) const { - UniqueType *varUt = varRef->lookup( pd ); - GenericType *generic = varUt->langEl->generic; - - if ( generic != 0 && generic->typeId == GEN_PARSER ) - evaluateSendParser( pd, code, false ); - else - error(loc) << "can only send_tree to parsers" << endl; - - return varUt; +// UniqueType *varUt = varRef->lookup( pd ); +// GenericType *generic = varUt->langEl->generic; +// +// if ( generic != 0 && generic->typeId == GEN_PARSER ) +// evaluateSendParser( pd, code, false ); +// else +// error(loc) << "can only send_tree to parsers" << endl; +// +// return varUt; + return 0; } UniqueType *LangTerm::evaluateEmbedString( Compiler *pd, CodeVect &code ) const @@ -912,10 +912,10 @@ Map *copyMap( Program *prg, Map *map, Kid *oldNextDown, Kid **newNextDown ) Tree *copyTree( Program *prg, Tree *tree, Kid *oldNextDown, Kid **newNextDown ) { LangElInfo *lelInfo = prg->rtd->lelInfo; - long genericId = lelInfo[tree->id].genericId; - if ( genericId > 0 ) - assert(false); - else if ( tree->id == LEL_ID_PTR ) +// long genericId = lelInfo[tree->id].genericId; +// if ( genericId > 0 ) +// assert(false); + if ( tree->id == LEL_ID_PTR ) assert(false); else if ( tree->id == LEL_ID_BOOL ) assert(false); @@ -1002,8 +1002,8 @@ void treeFreeRec( Program *prg, Tree **sp, Tree *tree ) free_tree: lelInfo = prg->rtd->lelInfo; - genericId = lelInfo[tree->id].genericId; - assert( genericId == 0 ); +// genericId = lelInfo[tree->id].genericId; +// assert( genericId == 0 ); switch ( tree->id ) { case LEL_ID_BOOL: @@ -1072,67 +1072,50 @@ void objectFreeRec( Program *prg, Tree **sp, Tree *tree ) free_tree: lelInfo = prg->rtd->lelInfo; - genericId = lelInfo[tree->id].genericId; - if ( genericId > 0 ) { - GenericInfo *generic = &prg->rtd->genericInfo[genericId]; - switch ( generic->type ) { - case GEN_LIST: - break; - case GEN_LIST_EL: - break; - case GEN_MAP: - break; - case GEN_MAP_EL: - break; - case GEN_PARSER: - break; - } + + switch ( tree->id ) { + case LEL_ID_STR: { + Str *str = (Str*) tree; + stringFree( prg, str->value ); + treeFree( prg, tree ); + break; } - else { - switch ( tree->id ) { - case LEL_ID_STR: { - Str *str = (Str*) tree; - stringFree( prg, str->value ); - treeFree( prg, tree ); - break; - } - case LEL_ID_BOOL: - case LEL_ID_INT: { - treeFree( prg, tree ); - break; - } - case LEL_ID_PTR: { - treeFree( prg, tree ); - break; + case LEL_ID_BOOL: + case LEL_ID_INT: { + treeFree( prg, tree ); + break; + } + case LEL_ID_PTR: { + treeFree( prg, tree ); + break; + } +// case LEL_ID_STREAM: { +// Stream *stream = (Stream*)tree; +// clearSourceStream( prg, sp, stream->in ); +// if ( stream->in->file != 0 ) +// fclose( stream->in->file ); +// else if ( stream->in->fd >= 0 ) +// close( stream->in->fd ); +// free( stream->in ); +// streamFree( prg, stream ); +// break; +// } + default: { + if ( tree->id != LEL_ID_IGNORE ) + stringFree( prg, tree->tokdata ); + + /* Attributes and grammar-based children. */ + Kid *child = tree->child; + while ( child != 0 ) { + Kid *next = child->next; + vm_push( child->tree ); + kidFree( prg, child ); + child = next; } -// case LEL_ID_STREAM: { -// Stream *stream = (Stream*)tree; -// clearSourceStream( prg, sp, stream->in ); -// if ( stream->in->file != 0 ) -// fclose( stream->in->file ); -// else if ( stream->in->fd >= 0 ) -// close( stream->in->fd ); -// free( stream->in ); -// streamFree( prg, stream ); -// break; -// } - default: { - if ( tree->id != LEL_ID_IGNORE ) - stringFree( prg, tree->tokdata ); - - /* Attributes and grammar-based children. */ - Kid *child = tree->child; - while ( child != 0 ) { - Kid *next = child->next; - vm_push( child->tree ); - kidFree( prg, child ); - child = next; - } - treeFree( prg, tree ); - break; - }} - } + treeFree( prg, tree ); + break; + }} /* Any trees to downref? */ while ( sp != top ) { |