summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@colm.net>2018-06-18 14:39:56 +0700
committerAdrian Thurston <thurston@colm.net>2018-06-18 14:39:56 +0700
commit947f47fa390a262c101822df2b181c807bd861bc (patch)
treeffe01b598e3c3bcdeb5cd5dfa75137db87a0f73e /src
parente706bc4c2a396c3a60658072412e26d9bee83fca (diff)
downloadcolm-947f47fa390a262c101822df2b181c807bd861bc.tar.gz
added close_stream to stream funcs
Diffstat (limited to 'src')
-rw-r--r--src/bytecode.c5
-rw-r--r--src/ctinput.cc4
-rw-r--r--src/input.c15
-rw-r--r--src/input.h1
4 files changed, 19 insertions, 6 deletions
diff --git a/src/bytecode.c b/src/bytecode.c
index 502be2e6..6c68135c 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -2532,10 +2532,7 @@ again:
stream_t *stream = vm_pop_stream();
struct stream_impl *si = stream->impl;
- if ( si->file != 0 ) {
- colm_close_stream_file( si->file );
- si->file = 0;
- }
+ si->funcs->close_stream( si );
vm_push_stream( stream );
break;
diff --git a/src/ctinput.cc b/src/ctinput.cc
index bab9ac5d..a53760fc 100644
--- a/src/ctinput.cc
+++ b/src/ctinput.cc
@@ -246,7 +246,7 @@ stream_funcs_ct patternFuncs =
&inputStreamPatternDestructor,
- 0, 0, 0
+ 0, 0, 0, 0
};
@@ -465,7 +465,7 @@ stream_funcs_ct replFuncs =
&inputStreamConsDestructor,
- 0, 0, 0
+ 0, 0, 0, 0
};
void pushBinding( pda_run *pdaRun, parse_tree_t *parseTree )
diff --git a/src/input.c b/src/input.c
index 6474ba19..2fd1d65a 100644
--- a/src/input.c
+++ b/src/input.c
@@ -337,6 +337,14 @@ static void data_flush_stream( struct stream_impl_data *si )
fflush( si->file );
}
+static void data_close_stream( struct stream_impl_data *si )
+{
+ if ( si->file != 0 ) {
+ colm_close_stream_file( si->file );
+ si->file = 0;
+ }
+}
+
static void data_print_tree( struct colm_program *prg, tree_t **sp,
struct stream_impl_data *si, tree_t *tree, int trim )
{
@@ -631,6 +639,10 @@ static void stream_flush_stream( struct stream_impl_seq *si )
{
}
+static void stream_close_stream( struct stream_impl_seq *si )
+{
+}
+
static void stream_print_tree( struct colm_program *prg, tree_t **sp,
struct stream_impl_seq *si, tree_t *tree, int trim )
{
@@ -1207,6 +1219,7 @@ struct stream_funcs_seq stream_funcs =
.destructor = &stream_destructor,
.get_collect = &stream_get_collect,
.flush_stream = &stream_flush_stream,
+ .close_stream = &stream_close_stream,
.print_tree = &stream_print_tree,
};
@@ -1220,6 +1233,7 @@ struct stream_funcs_data file_funcs =
.destructor = &data_destructor,
.get_collect = &data_get_collect,
.flush_stream = &data_flush_stream,
+ .close_stream = &data_close_stream,
.print_tree = &data_print_tree,
};
@@ -1233,6 +1247,7 @@ struct stream_funcs_data text_funcs =
.destructor = &data_destructor,
.get_collect = &data_get_collect,
.flush_stream = &data_flush_stream,
+ .close_stream = &data_close_stream,
.print_tree = &data_print_tree,
};
diff --git a/src/input.h b/src/input.h
index bef76dae..1c2dae61 100644
--- a/src/input.h
+++ b/src/input.h
@@ -104,6 +104,7 @@ struct stream_funcs \
void (*destructor)( struct colm_program *prg, struct colm_tree **sp, struct stream_impl *si ); \
struct colm_str_collect *(*get_collect)( struct stream_impl *si ); \
void (*flush_stream)( struct stream_impl *si ); \
+ void (*close_stream)( struct stream_impl *si ); \
void (*print_tree)( struct colm_program *prg, struct colm_tree **sp, \
struct stream_impl *impl, struct colm_tree *tree, int trim ); \
}