summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2015-01-05 10:25:21 -0500
committerAdrian Thurston <thurston@complang.org>2015-01-05 10:25:21 -0500
commit54cda6a9e917e9631c5ac21e6159c5753df3d58a (patch)
treea63a918554a504e99dbfb2a5bed37dda44262928
parent4accc36ee55e6ce863ec2e1940ca84b776442e1f (diff)
downloadcolm-54cda6a9e917e9631c5ac21e6159c5753df3d58a.tar.gz
removed the generic pointer from LangEl
-rw-r--r--src/compiler.h3
-rw-r--r--src/pdabuild.cc4
-rw-r--r--src/pdacodegen.cc1
-rw-r--r--src/pdarun.h4
-rw-r--r--src/synthesis.cc74
-rw-r--r--src/tree.c111
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
diff --git a/src/tree.c b/src/tree.c
index e292873a..e40c9a0f 100644
--- a/src/tree.c
+++ b/src/tree.c
@@ -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 ) {