summaryrefslogtreecommitdiff
path: root/src/tree.c
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 /src/tree.c
parent4accc36ee55e6ce863ec2e1940ca84b776442e1f (diff)
downloadcolm-54cda6a9e917e9631c5ac21e6159c5753df3d58a.tar.gz
removed the generic pointer from LangEl
Diffstat (limited to 'src/tree.c')
-rw-r--r--src/tree.c111
1 files changed, 47 insertions, 64 deletions
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 ) {