Hello community, here is the log from the commit of package colm for openSUSE:Factory checked in at 2016-12-02 16:41:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/colm (Old) and /work/SRC/openSUSE:Factory/.colm.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "colm" Changes: -------- --- /work/SRC/openSUSE:Factory/colm/colm.changes 2016-07-01 09:58:22.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.colm.new/colm.changes 2016-12-02 16:41:46.000000000 +0100 @@ -1,0 +2,7 @@ +Mon Nov 28 11:26:37 UTC 2016 - [email protected] + +- Update to new upstream release 0.13.0.4 + * No changelog was provided +- Drop colm-type.diff, colm-shared.diff (applied upstream) + +------------------------------------------------------------------- Old: ---- colm-0.13.0.3.tar.gz colm-shared.diff colm-type.diff New: ---- colm-0.13.0.4.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ colm.spec ++++++ --- /var/tmp/diff_new_pack.tr18oV/_old 2016-12-02 16:41:47.000000000 +0100 +++ /var/tmp/diff_new_pack.tr18oV/_new 2016-12-02 16:41:47.000000000 +0100 @@ -15,18 +15,17 @@ # Please submit bugfixes or comments via http://bugs.opensuse.org/ # + Name: colm -Version: 0.13.0.3 -%define lname libcolm-0_13_0_3 +Version: 0.13.0.4 Release: 0 +%define lname libcolm-0_13_0_4 Summary: The Colm programming language License: GPL-2.0+ Group: Development/Languages -URL: http://www.colm.net/open-source/colm/ +Url: http://www.colm.net/open-source/colm/ Source: http://www.colm.net/files/colm/%name-%version.tar.gz -Patch1: colm-type.diff -Patch2: colm-shared.diff BuildRequires: gcc-c++ BuildRequires: libtool BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -61,7 +60,6 @@ %prep %setup -q -%patch -P 1 -P 2 -p1 %build autoreconf -fi @@ -88,8 +86,7 @@ %doc COPYING %_bindir/colm %_includedir/* -%_libdir/libcolmd.so -%_libdir/libcolmp.so +%_libdir/libcolm.so %_datadir/vim/ %changelog ++++++ colm-0.13.0.3.tar.gz -> colm-0.13.0.4.tar.gz ++++++ ++++ 2039 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/configure.ac new/colm-0.13.0.4/configure.ac --- old/colm-0.13.0.3/configure.ac 2016-01-28 14:08:55.000000000 +0100 +++ new/colm-0.13.0.4/configure.ac 2016-07-11 21:29:35.000000000 +0200 @@ -18,8 +18,8 @@ dnl along with Colm; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -AC_INIT(colm, 0.13.0.3) -PUBDATE="Jan 2016" +AC_INIT(colm, 0.13.0.4) +PUBDATE="July 2016" AM_INIT_AUTOMAKE([foreign]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/Makefile.am new/colm-0.13.0.4/src/Makefile.am --- old/colm-0.13.0.3/src/Makefile.am 2015-10-06 23:10:30.000000000 +0200 +++ new/colm-0.13.0.4/src/Makefile.am 2016-06-29 18:45:49.000000000 +0200 @@ -18,7 +18,7 @@ # along with Colm; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -AM_CPPFLAGS = -I$(top_srcdir)/aapl +AM_CPPFLAGS = -I$(top_srcdir)/aapl -Iinclude AUTOMAKE_OPTIONS = subdir-objects @@ -34,15 +34,12 @@ bytecode.h config.h defs.h debug.h pool.h input.h \ pdarun.h map.h type.h tree.h struct.h program.h colm.h internal.h -lib_LIBRARIES = libcolmp.a libcolmd.a +lib_LTLIBRARIES = libcolm.la noinst_LIBRARIES = libprog.a -libcolmp_a_SOURCES = $(RUNTIME_SRC) -libcolmp_a_CFLAGS = -Iinclude - -libcolmd_a_SOURCES = $(RUNTIME_SRC) -libcolmd_a_CFLAGS = -Iinclude +libcolm_la_SOURCES = $(RUNTIME_SRC) +libcolm_la_LDFLAGS = -release ${PACKAGE_VERSION} common_CFLAGS = \ -Wall \ @@ -67,7 +64,7 @@ bootstrap0_CXXFLAGS = $(common_CFLAGS) -DCONS_INIT bootstrap0_SOURCES = consinit.cc consinit.h main.cc -bootstrap0_LDADD = libprog.a libcolmd.a +bootstrap0_LDADD = libprog.a libcolm.la bootstrap1_CXXFLAGS = $(common_CFLAGS) -DLOAD_INIT bootstrap1_CFLAGS = $(common_CFLAGS) @@ -75,7 +72,7 @@ loadinit.h loadinit.cc main.cc nodist_bootstrap1_SOURCES = \ gen/if1.h gen/if1.cc gen/parse1.c -bootstrap1_LDADD = libprog.a libcolmd.a +bootstrap1_LDADD = libprog.a libcolm.la colm_CXXFLAGS = $(common_CFLAGS) -DLOAD_COLM colm_CFLAGS = $(common_CFLAGS) @@ -83,7 +80,7 @@ loadcolm.h loadcolm.cc main.cc nodist_colm_SOURCES = \ gen/if2.h gen/if2.cc gen/parse2.c -colm_LDADD = libprog.a libcolmd.a +colm_LDADD = libprog.a libcolm.la colmincdir = $(includedir)/colm diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/bytecode.c new/colm-0.13.0.4/src/bytecode.c --- old/colm-0.13.0.3/src/bytecode.c 2015-12-15 21:55:52.000000000 +0100 +++ new/colm-0.13.0.4/src/bytecode.c 2016-06-29 18:20:03.000000000 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2006-2012 Adrian Thurston <[email protected]> + * Copyright 2006-2016 Adrian Thurston <[email protected]> */ /* This file is part of Colm. @@ -37,8 +37,6 @@ typedef struct colm_struct struct_t; -tree_t **host_call( program_t *prg, long code, tree_t **sp ); - #define TRUE_VAL 1 #define FALSE_VAL 0 @@ -70,7 +68,7 @@ i = (type) w; \ } while(0) - #define read_type_p( type, i, p ) do { \ + #define read_type_p( Type, i, p ) do { \ i = ((Type) p[0]); \ i |= ((Type) p[1]) << 8; \ i |= ((Type) p[2]) << 16; \ @@ -699,6 +697,8 @@ for ( i = 0; i < n; i++ ) { if ( si->file != 0 ) print_tree_file( prg, sp, si, arg[i], false ); + else if ( si->collect != 0 ) + print_tree_collect( prg, sp, si->collect, arg[i], false ); } for ( i = 0; i < n; i++ ) @@ -1257,7 +1257,21 @@ debug( prg, REALM_BYTECODE, "IN_NEW_STRUCT %hd\n", id ); struct_t *item = colm_struct_new( prg, id ); - vm_push_type( struct_t*, item ); + vm_push_struct( item ); + break; + } + case IN_NEW_STREAM: { + debug( prg, REALM_BYTECODE, "IN_NEW_STREAM\n" ); + stream_t *item = colm_stream_open_collect( prg ); + vm_push_stream( item ); + break; + } + case IN_GET_COLLECT_STRING: { + debug( prg, REALM_BYTECODE, "IN_GET_COLLECT_STRING\n" ); + stream_t *stream = vm_pop_stream(); + str_t *str = collect_string( prg, stream ); + colm_tree_upref( (tree_t*)str ); + vm_push_string( str ); break; } case IN_GET_STRUCT_R: { @@ -3379,7 +3393,7 @@ debug( prg, REALM_BYTECODE, "IN_HOST %hd\n", func_id ); - sp = host_call( prg, func_id, sp ); + sp = prg->rtd->host_call( prg, func_id, sp ); break; } case IN_CALL_WV: { @@ -3665,6 +3679,8 @@ int res = system( cmd0 ); + free( cmd0 ); + if ( WIFSIGNALED( res ) ) raise( WTERMSIG( res ) ); res = WEXITSTATUS( res ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/bytecode.h new/colm-0.13.0.4/src/bytecode.h --- old/colm-0.13.0.3/src/bytecode.h 2015-12-15 21:51:37.000000000 +0100 +++ new/colm-0.13.0.4/src/bytecode.h 2016-04-04 15:55:00.000000000 +0200 @@ -37,9 +37,6 @@ typedef unsigned long colm_value_t; -/* - */ - #define IN_LOAD_INT 0x01 #define IN_LOAD_STR 0x02 @@ -358,6 +355,9 @@ #define IN_GET_LOCAL_VAL_R 0x91 #define IN_SET_LOCAL_VAL_WC 0x92 +#define IN_NEW_STREAM 0x24 +#define IN_GET_COLLECT_STRING 0x68 + /* * IN_FN instructions. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/colm.h new/colm-0.13.0.4/src/colm.h --- old/colm-0.13.0.3/src/colm.h 2015-12-02 14:55:47.000000000 +0100 +++ new/colm-0.13.0.4/src/colm.h 2016-04-04 15:55:00.000000000 +0200 @@ -106,6 +106,8 @@ /* Set the pointer to the reduce struct used. */ void colm_set_reduce_ctx( struct colm_program *prg, void *ctx ); +const char **colm_extract_fns( struct colm_program *prg ); + #ifdef __cplusplus } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/commit.c new/colm-0.13.0.4/src/commit.c --- old/colm-0.13.0.3/src/commit.c 2015-12-02 14:55:41.000000000 +0100 +++ new/colm-0.13.0.4/src/commit.c 2016-04-04 15:55:00.000000000 +0200 @@ -105,7 +105,7 @@ while ( sp != root ) { pt = vm_pop_ptree(); - commit_reduce_forward( prg, sp, pda_run, pt ); + prg->rtd->commit_reduce_forward( prg, sp, pda_run, pt ); pt->child = 0; pt->flags |= PF_COMMITTED; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/compiler.cc new/colm-0.13.0.4/src/compiler.cc --- old/colm-0.13.0.3/src/compiler.cc 2015-11-30 16:20:12.000000000 +0100 +++ new/colm-0.13.0.4/src/compiler.cc 2016-04-04 15:55:00.000000000 +0200 @@ -415,6 +415,15 @@ /* Delete all the nodes in the action list. Will cause all the * string data that represents the actions to be deallocated. */ actionList.empty(); + + for ( CharVectVect::Iter fns = streamFileNames; fns.lte(); fns++ ) { + const char **ptr = *fns; + while ( *ptr != 0 ) { + ::free( (void*)*ptr ); + ptr += 1; + } + free( (void*) *fns ); + } } ostream &operator<<( ostream &out, const Token &token ) @@ -990,7 +999,7 @@ pda_run *Compiler::parsePattern( program_t *prg, tree_t **sp, const InputLoc &loc, int parserId, struct stream_impl *sourceStream ) { - struct stream_impl *in = colm_impl_new_generic( "<internal>" ); + struct stream_impl *in = colm_impl_new_generic( strdup("<internal>") ); struct pda_run *pdaRun = new pda_run; colm_pda_init( prg, pdaRun, pdaTables, parserId, 0, false, 0, false ); @@ -1035,13 +1044,13 @@ for ( ConsList::Iter cons = replList; cons.lte(); cons++ ) { if ( cons->langEl != 0 ) { - struct stream_impl *in = colm_impl_new_cons( "<internal>", cons ); + struct stream_impl *in = colm_impl_new_cons( strdup("<internal>"), cons ); cons->pdaRun = parsePattern( prg, sp, cons->loc, cons->langEl->parserId, in ); } } for ( PatList::Iter pat = patternList; pat.lte(); pat++ ) { - struct stream_impl *in = colm_impl_new_pat( "<internal>", pat ); + struct stream_impl *in = colm_impl_new_pat( strdup("<internal>"), pat ); pat->pdaRun = parsePattern( prg, sp, pat->loc, pat->langEl->parserId, in ); } @@ -1102,7 +1111,7 @@ } *outStream << - "tree_t **host_call( program_t *prg, long code, tree_t **sp )\n" + "tree_t **" << objectName << "_host_call( program_t *prg, long code, tree_t **sp )\n" "{\n" " value_t rtn = 0;\n" " switch ( code ) {\n"; @@ -1111,8 +1120,8 @@ *outStream << " case " << hc->funcId << ": {\n"; - int pos = 0; - for ( ParameterList::Iter p = *hc->paramList; p.lte(); p++, pos++ ) { + int pos = hc->paramList->length() - 1; + for ( ParameterList::Iter p = *hc->paramList; p.lte(); p++, pos-- ) { *outStream << " value_t p" << pos << " = vm_pop_value();\n"; } @@ -1154,10 +1163,9 @@ /* Write the runtime data. */ pdaGen->writeRuntimeData( runtimeData, pdaTables ); - if ( hostAdapters ) - writeHostCall(); + writeHostCall(); - if ( hostAdapters && includeCommit ) + if ( includeCommit ) writeCommitStub(); if ( !gblLibrary ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/compiler.h new/colm-0.13.0.4/src/compiler.h --- old/colm-0.13.0.3/src/compiler.h 2015-11-30 16:52:05.000000000 +0100 +++ new/colm-0.13.0.4/src/compiler.h 2016-04-04 15:55:00.000000000 +0200 @@ -64,6 +64,8 @@ #define REDUCE_CODE 0x2 #define SHIFT_REDUCE_CODE 0x3 +typedef Vector<const char**> CharVectVect; + /* This is used for tracking the current stack of include file/machine pairs. It is * is used to detect and recursive include structure. */ struct IncludeStackItem @@ -644,6 +646,8 @@ UniqueType *mainReturnUT; + CharVectVect streamFileNames; + /* CONTEXT FREE */ ProdElList *makeProdElList( LangEl *langEl ); void wrapNonTerminals(); @@ -938,7 +942,10 @@ void declareGlobalFields(); void declareStrFields(); + + void declareStreamField( ObjectDef *objDef, code_t getLength ); void declareStreamFields(); + void declareIntFields(); void declareTokenFields(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/config.h new/colm-0.13.0.4/src/config.h --- old/colm-0.13.0.3/src/config.h 2016-01-28 14:07:33.000000000 +0100 +++ new/colm-0.13.0.4/src/config.h 2016-07-11 21:36:52.000000000 +0200 @@ -2,7 +2,7 @@ /* src/config.h.in. Generated from configure.ac by autoheader. */ /* enable debug statements */ -/* #undef DEBUG */ +#define DEBUG 1 /* Define to 1 if you have the <dlfcn.h> header file. */ #define HAVE_DLFCN_H 1 @@ -48,7 +48,7 @@ #define PACKAGE_NAME "colm" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "colm 0.13.0.3" +#define PACKAGE_STRING "colm 0.13.0.4" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "colm" @@ -57,7 +57,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "0.13.0.3" +#define PACKAGE_VERSION "0.13.0.4" /* allocate pool objects with malloc */ /* #undef POOL_MALLOC */ @@ -69,4 +69,4 @@ #define STDC_HEADERS 1 /* Version number of package */ -#define VERSION "0.13.0.3" +#define VERSION "0.13.0.4" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/consinit.cc new/colm-0.13.0.4/src/consinit.cc --- old/colm-0.13.0.3/src/consinit.cc 2015-11-30 18:01:32.000000000 +0100 +++ new/colm-0.13.0.4/src/consinit.cc 2016-04-04 15:55:00.000000000 +0200 @@ -31,23 +31,6 @@ #include "input.h" #include "consinit.h" -extern "C" tree_t **host_call( program_t *prg, long code, tree_t **sp ) -{ - return 0; -} - -extern "C" void commit_reduce_forward( program_t *prg, tree_t **root, - struct pda_run *pda_run, parse_tree_t *pt ) -{ - commit_clear_parse_tree( prg, root, pda_run, pt->child ); -} - -extern "C" long commit_union_sz( int reducer ) { return 0; } - -extern "C" void init_need() {} -extern "C" int reducer_need_tok( program_t *prg, struct pda_run *, int id ) { return 3; } -extern "C" int reducer_need_ign( program_t *prg, struct pda_run * ) { return 3; } - using std::cout; using std::cerr; using std::endl; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/ctinput.cc new/colm-0.13.0.4/src/ctinput.cc --- old/colm-0.13.0.3/src/ctinput.cc 2015-11-30 17:32:37.000000000 +0100 +++ new/colm-0.13.0.4/src/ctinput.cc 2016-04-04 15:55:00.000000000 +0200 @@ -38,7 +38,7 @@ * Pattern */ -struct stream_impl *colm_impl_new_pat( const char *name, Pattern *pattern ) +struct stream_impl *colm_impl_new_pat( char *name, Pattern *pattern ) { struct stream_impl *ss = (struct stream_impl*)malloc(sizeof(struct stream_impl)); memset( ss, 0, sizeof(struct stream_impl) ); @@ -239,7 +239,7 @@ * Constructor */ -struct stream_impl *colm_impl_new_cons( const char *name, Constructor *constructor ) +struct stream_impl *colm_impl_new_cons( char *name, Constructor *constructor ) { struct stream_impl *ss = (struct stream_impl*)malloc(sizeof(struct stream_impl)); memset( ss, 0, sizeof(struct stream_impl) ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/declare.cc new/colm-0.13.0.4/src/declare.cc --- old/colm-0.13.0.3/src/declare.cc 2015-10-05 17:02:52.000000000 +0200 +++ new/colm-0.13.0.4/src/declare.cc 2016-04-04 15:55:00.000000000 +0200 @@ -844,6 +844,19 @@ addLengthField( strObj, IN_STR_LENGTH ); } +void Compiler::declareStreamField( ObjectDef *objDef, code_t getLength ) +{ + /* Create the "length" field. */ + TypeRef *typeRef = TypeRef::cons( internal, uniqueTypeStr ); + ObjectField *el = ObjectField::cons( internal, + ObjectField::InbuiltFieldType, typeRef, "tree" ); + el->isConst = true; + el->inGetR = IN_GET_COLLECT_STRING; + el->inGetValR = IN_GET_COLLECT_STRING; + + objDef->rootScope->insertField( el->name, el ); +} + void Compiler::declareStreamFields( ) { streamObj = streamSel->structDef->objectDef; @@ -862,6 +875,8 @@ initFunction( uniqueTypeVoid, streamObj, "close", IN_INPUT_CLOSE_WC, IN_INPUT_CLOSE_WC, false ); + + declareStreamField( streamObj, 0 ); } ObjectField *Compiler::makeDataEl() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/input.c new/colm-0.13.0.4/src/input.c --- old/colm-0.13.0.3/src/input.c 2016-01-04 17:27:09.000000000 +0100 +++ new/colm-0.13.0.4/src/input.c 2016-04-04 15:55:00.000000000 +0200 @@ -35,6 +35,26 @@ #include <unistd.h> #include <stdbool.h> +char *colm_filename_add( program_t *prg, const char *fn ) +{ + /* Search for it. */ + const char **ptr = prg->stream_fns; + while ( *ptr != 0 ) { + if ( strcmp( *ptr, fn ) == 0 ) + return (char*)*ptr; + ptr += 1; + } + + /* Not present, find. */ + int items = ptr - prg->stream_fns; + + prg->stream_fns = realloc( prg->stream_fns, sizeof(char*) * ( items + 2 ) ); + prg->stream_fns[items] = strdup( fn ); + prg->stream_fns[items+1] = 0; + + return (char*)prg->stream_fns[items]; +} + struct run_buf *new_run_buf( int sz ) { struct run_buf *rb; @@ -112,11 +132,21 @@ if ( stream->impl->file != 0 ) fclose( stream->impl->file ); + + if ( stream->impl->collect != 0 ) { + str_collect_destroy( stream->impl->collect ); + free( stream->impl->collect ); + } + + /* FIXME: Need to leak this for now. Until we can return strings to a + * program loader and free them at a later date (after the colm program is + * deleted). */ + // if ( stream->impl->name != 0 ) + // free( stream->impl->name ); free( stream->impl ); } - /* Keep the position up to date after consuming text. */ void update_position( struct stream_impl *is, const char *data, long length ) { @@ -367,7 +397,7 @@ * StreamImpl struct, this wraps the list of input streams. */ -void init_stream_impl( struct stream_impl *is, const char *name ) +void init_stream_impl( struct stream_impl *is, char *name ) { memset( is, 0, sizeof(struct stream_impl) ); @@ -662,6 +692,13 @@ else if ( buf->type == RunBufIgnoreType ) break; else { + if ( !loc_set( loc ) ) { + if ( is->line > 0 ) + transfer_loc( loc, is ); + else + default_loc( loc ); + } + /* Anything available in the current buffer. */ int avail = buf->length - buf->offset; if ( avail > 0 ) { @@ -669,16 +706,11 @@ int slen = avail <= length ? avail : length; consumed += slen; length -= slen; + update_position( is, buf->data + buf->offset, slen ); buf->offset += slen; is->consumed += slen; } - if ( !loc_set( loc ) ) { - if ( is->line > 0 ) - transfer_loc( loc, is ); - else - default_loc( loc ); - } } if ( length == 0 ) { @@ -783,14 +815,14 @@ } else { if ( is_source_stream( is ) ) { - // message( "sourcing line info\n" ); - - /* steal the location information. */ + /* Steal the location information. Note that name allocations are + * managed separately from streams and so ptr overwrite transfer is + * safe. */ stream_t *s = ((stream_t*)is->queue->tree); is->line = s->impl->line; is->column = s->impl->column; is->byte = s->impl->byte; - is->name = s->impl->name; + is->name = strdup(s->impl->name); } /* Create a new buffer for the data. This is the easy implementation. @@ -1027,37 +1059,43 @@ }; -struct stream_impl *colm_impl_new_file( const char *name, FILE *file ) +static struct stream_impl *colm_impl_new_file( char *name, FILE *file ) { struct stream_impl *ss = (struct stream_impl*)malloc(sizeof(struct stream_impl)); init_stream_impl( ss, name ); ss->funcs = &file_funcs; - ss->file = file; - return ss; } -struct stream_impl *colm_impl_new_fd( const char *name, long fd ) +static struct stream_impl *colm_impl_new_fd( char *name, long fd ) { struct stream_impl *ss = (struct stream_impl*)malloc(sizeof(struct stream_impl)); init_stream_impl( ss, name ); ss->funcs = &file_funcs; - ss->file = fdopen( fd, ( fd == 0 ) ? "r" : "w" ); - return ss; } -struct stream_impl *colm_impl_new_generic( const char *name ) +struct stream_impl *colm_impl_new_generic( char *name ) { struct stream_impl *ss = (struct stream_impl*)malloc(sizeof(struct stream_impl)); init_stream_impl( ss, name ); ss->funcs = &stream_funcs; + return ss; +} +struct stream_impl *colm_impl_new_collect( char *name ) +{ + struct stream_impl *ss = (struct stream_impl*)malloc(sizeof(struct stream_impl)); + init_stream_impl( ss, name ); + ss->funcs = &stream_funcs; + ss->collect = (StrCollect*) malloc( sizeof( StrCollect ) ); + init_str_collect( ss->collect ); return ss; } + stream_t *colm_stream_new_struct( program_t *prg ) { size_t memsize = sizeof(struct colm_stream); @@ -1071,7 +1109,7 @@ stream_t *colm_stream_open_fd( program_t *prg, char *name, long fd ) { - struct stream_impl *impl = colm_impl_new_fd( name, fd ); + struct stream_impl *impl = colm_impl_new_fd( colm_filename_add( prg, name ), fd ); struct colm_stream *s = colm_stream_new_struct( prg ); s->impl = impl; @@ -1100,19 +1138,37 @@ char *file_name = (char*)malloc(string_length(head_name)+1); memcpy( file_name, string_data(head_name), string_length(head_name) ); file_name[string_length(head_name)] = 0; + FILE *file = fopen( file_name, fopen_mode ); if ( file != 0 ) { stream = colm_stream_new_struct( prg ); - stream->impl = colm_impl_new_file( file_name, file ); + stream->impl = colm_impl_new_file( colm_filename_add( prg, file_name ), file ); } + free( file_name ); + return stream; } stream_t *colm_stream_new( program_t *prg ) { - struct stream_impl *impl = colm_impl_new_generic( "<internal>" ); + struct stream_impl *impl = colm_impl_new_generic( colm_filename_add( prg, "<internal>" ) ); + struct colm_stream *stream = colm_stream_new_struct( prg ); + stream->impl = impl; + return stream; +} +str_t *collect_string( program_t *prg, stream_t *s ) +{ + head_t *head = string_alloc_full( prg, s->impl->collect->data, s->impl->collect->length ); + str_t *str = (str_t*)construct_string( prg, head ); + return str; +} + + +stream_t *colm_stream_open_collect( program_t *prg ) +{ + struct stream_impl *impl = colm_impl_new_collect( colm_filename_add( prg, "<internal>" ) ); struct colm_stream *stream = colm_stream_new_struct( prg ); stream->impl = impl; return stream; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/input.h new/colm-0.13.0.4/src/input.h --- old/colm-0.13.0.3/src/input.h 2015-11-12 20:56:55.000000000 +0100 +++ new/colm-0.13.0.4/src/input.h 2016-04-04 15:55:00.000000000 +0200 @@ -50,6 +50,8 @@ struct colm_location; struct colm_program; struct colm_struct; +struct colm_str; +struct colm_stream; struct stream_impl; @@ -137,9 +139,11 @@ long column; long byte; - const char *name; + char *name; FILE *file; + struct _StrCollect *collect; + struct Pattern *pattern; struct PatternItem *pat_item; struct Constructor *constructor; @@ -152,17 +156,19 @@ int indent; }; -struct stream_impl *colm_impl_new_pat( const char *name, struct Pattern *pattern ); -struct stream_impl *colm_impl_new_cons( const char *name, struct Constructor *constructor ); -struct stream_impl *colm_impl_new_file( const char *name, FILE *file ); -struct stream_impl *colm_impl_new_fd( const char *name, long fd ); -struct stream_impl *colm_impl_new_generic( const char *name ); +struct stream_impl *colm_impl_new_pat( char *name, struct Pattern *pattern ); +struct stream_impl *colm_impl_new_cons( char *name, struct Constructor *constructor ); +struct stream_impl *colm_impl_new_generic( char *name ); + void update_position( struct stream_impl *input_stream, const char *data, long length ); void undo_position( struct stream_impl *input_stream, const char *data, long length ); struct stream_impl *colm_stream_impl( struct colm_struct *s ); +struct colm_str *collect_string( struct colm_program *prg, struct colm_stream *s ); +struct colm_stream *colm_stream_open_collect( struct colm_program *prg ); + #ifdef __cplusplus } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/loadcolm.cc new/colm-0.13.0.4/src/loadcolm.cc --- old/colm-0.13.0.3/src/loadcolm.cc 2015-12-15 21:47:45.000000000 +0100 +++ new/colm-0.13.0.4/src/loadcolm.cc 2016-04-04 15:55:00.000000000 +0200 @@ -790,6 +790,7 @@ } StmtList *stmtList = walkRootItemList( Start.RootItemList() ); + pd->streamFileNames.append( colm_extract_fns( program ) ); colm_delete_program( program ); return stmtList; } @@ -2703,6 +2704,7 @@ } StmtList *stmtList = walkRootItemList( Start.RootItemList() ); + pd->streamFileNames.append( colm_extract_fns( program ) ); colm_delete_program( program ); pd->rootCodeBlock = CodeBlock::cons( stmtList, 0 ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/loadinit.cc new/colm-0.13.0.4/src/loadinit.cc --- old/colm-0.13.0.3/src/loadinit.cc 2015-11-05 18:42:58.000000000 +0100 +++ new/colm-0.13.0.4/src/loadinit.cc 2016-04-04 15:55:00.000000000 +0200 @@ -408,6 +408,7 @@ ItemList = ItemList.next(); } + pd->streamFileNames.append( colm_extract_fns( program ) ); colm_delete_program( program ); consParseStmt( stmtList ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/main.cc new/colm-0.13.0.4/src/main.cc --- old/colm-0.13.0.3/src/main.cc 2015-11-27 23:48:03.000000000 +0100 +++ new/colm-0.13.0.4/src/main.cc 2016-07-06 22:53:35.000000000 +0200 @@ -440,7 +440,7 @@ " -o %s" " %s" " -L" PREFIX "/lib" - " -lcolmd", + " -lcolm", binaryFn, intermedFn ); for ( ArgsVector::Iter af = additionalCodeFiles; af.lte(); af++ ) { @@ -475,7 +475,7 @@ " -o %s" " %s" " -L%s" - " -lcolmd", + " -lcolm", location, location, binaryFn, intermedFn, location ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/pdabuild.cc new/colm-0.13.0.4/src/pdabuild.cc --- old/colm-0.13.0.3/src/pdabuild.cc 2015-11-30 16:19:37.000000000 +0100 +++ new/colm-0.13.0.4/src/pdabuild.cc 2016-04-04 15:55:00.000000000 +0200 @@ -44,6 +44,36 @@ char startDefName[] = "start"; +extern "C" tree_t **internal_host_call( program_t *prg, long code, tree_t **sp ) +{ + return 0; +} + +extern "C" void internal_commit_reduce_forward( program_t *prg, tree_t **root, + struct pda_run *pda_run, parse_tree_t *pt ) +{ + commit_clear_parse_tree( prg, root, pda_run, pt->child ); +} + +extern "C" long internal_commit_union_sz( int reducer ) +{ + return 0; +} + +extern "C" void internal_init_need() +{ +} + +extern "C" int internal_reducer_need_tok( program_t *prg, struct pda_run *, int id ) +{ + return 3; +} + +extern "C" int internal_reducer_need_ign( program_t *prg, struct pda_run * ) +{ + return 3; +} + /* Count the transitions in the fsm by walking the state list. */ int countTransitions( PdaGraph *fsm ) { @@ -1687,6 +1717,12 @@ runtimeData->init_bindings = &internalInitBindings; runtimeData->pop_binding = &internalPopBinding; + runtimeData->host_call = &internal_host_call; + runtimeData->commit_reduce_forward = &internal_commit_reduce_forward; + runtimeData->commit_union_sz = &internal_commit_union_sz; + runtimeData->init_need = &internal_init_need; + runtimeData->reducer_need_tok = &internal_reducer_need_tok; + runtimeData->reducer_need_ign = &internal_reducer_need_ign; } /* Borrow alg->state for mapsTo. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/pdacodegen.cc new/colm-0.13.0.4/src/pdacodegen.cc --- old/colm-0.13.0.3/src/pdacodegen.cc 2015-11-27 22:46:17.000000000 +0100 +++ new/colm-0.13.0.4/src/pdacodegen.cc 2016-04-04 15:55:00.000000000 +0200 @@ -66,7 +66,7 @@ void PdaCodeGen::defineRuntime() { out << - "extern struct colm_sections colm_program_text;\n" + "extern struct colm_sections " << objectName << ";\n" "\n"; } @@ -445,6 +445,18 @@ out << "};\n\n"; out << + "tree_t **" << objectName << "_host_call( program_t *prg, long code, tree_t **sp );\n" + "void " << objectName << "_commit_reduce_forward( program_t *prg, tree_t **root,\n" + " struct pda_run *pda_run, parse_tree_t *pt );\n" + "long " << objectName << "_commit_union_sz( int reducer );\n" + "void " << objectName << "_init_need();\n" + "int " << objectName << "_reducer_need_tok( program_t *prg, " + "struct pda_run *pda_run, int id );\n" + "int " << objectName << "_reducer_need_ign( program_t *prg, " + "struct pda_run *pda_run );\n" + "\n"; + + out << "struct colm_sections " << objectName << " = \n" "{\n" " " << lelInfo() << ",\n" @@ -505,6 +517,12 @@ " &sendNamedLangEl,\n" " &initBindings,\n" " &popBinding,\n" + " &" << objectName << "_host_call,\n" + " &" << objectName << "_commit_reduce_forward,\n" + " &" << objectName << "_commit_union_sz,\n" + " &" << objectName << "_init_need,\n" + " &" << objectName << "_reducer_need_tok,\n" + " &" << objectName << "_reducer_need_ign,\n" "};\n" "\n"; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/pdarun.c new/colm-0.13.0.4/src/pdarun.c --- old/colm-0.13.0.3/src/pdarun.c 2015-11-30 22:25:10.000000000 +0100 +++ new/colm-0.13.0.4/src/pdarun.c 2016-06-29 18:14:23.000000000 +0200 @@ -877,7 +877,7 @@ static void send_ignore( program_t *prg, tree_t **sp, struct pda_run *pda_run, struct stream_impl *is, long id ) { - if ( reducer_need_ign( prg, pda_run ) == RN_NONE ) { + if ( prg->rtd->reducer_need_ign( prg, pda_run ) == RN_NONE ) { consume_match( prg, sp, pda_run, is ); } else { @@ -905,7 +905,7 @@ /* Make the token data. */ head_t *tokdata = 0; - int rn = reducer_need_tok( prg, pda_run, id ); + int rn = prg->rtd->reducer_need_tok( prg, pda_run, id ); switch ( rn ) { case RN_NONE: @@ -1312,9 +1312,14 @@ pda_run->target_steps = -1; pda_run->reducer = reducer; + /* An initial commit shift count of -1 means we won't ever back up to zero + * shifts and think parsing cannot continue. */ + pda_run->shift_count = 0; + pda_run->commit_shift_count = -1; + if ( reducer ) { init_pool_alloc( &pda_run->local_pool, sizeof(parse_tree_t) + - commit_union_sz(reducer) ); + prg->rtd->commit_union_sz(reducer) ); pda_run->parse_tree_pool = &pda_run->local_pool; } else { @@ -1508,11 +1513,16 @@ */ if ( pda_run->pda_tables->commit_len[pos] != 0 ) { + debug( prg, REALM_PARSE, "commit point\n" ); pda_run->commit_shift_count = pda_run->shift_count; /* Not in a reverting context and the parser result is not used. */ if ( pda_run->reducer ) commit_reduce( prg, sp, pda_run ); + + if ( pda_run->fail_parsing ) + goto fail; + } /* @@ -2182,6 +2192,12 @@ debug( prg, REALM_PARSE, "parsing stopped by a parse error\n" ); break; } + + /* Disregard any alternate parse paths, just go right to failure. */ + if ( pda_run->fail_parsing ) { + debug( prg, REALM_PARSE, "parsing failed by explicit request\n" ); + break; + } } /* COROUTINE */ @@ -2267,6 +2283,10 @@ /* Flush out anything not committed. */ if ( pda_run->reducer ) commit_reduce( prg, sp, pda_run ); + + /* What to do here. + * if ( pda_run->fail_parsing ) + * goto fail; */ if ( !revert_on ) colm_rcode_downref_all( prg, sp, &pda_run->reverse_code ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/pdarun.h new/colm-0.13.0.4/src/pdarun.h --- old/colm-0.13.0.3/src/pdarun.h 2015-12-01 16:15:13.000000000 +0100 +++ new/colm-0.13.0.4/src/pdarun.h 2016-04-04 15:55:00.000000000 +0200 @@ -317,6 +317,12 @@ long steps; long target_steps; + + + /* The shift count simply tracks the number of shifts that have happend. + * The commit shift count is the shift count when the last commit occurred. + * If we back up to this number of shifts then we decide we cannot proceed. + * The commit shift count is initialized to -1. */ long shift_count; long commit_shift_count; @@ -363,6 +369,9 @@ struct pool_alloc *parse_tree_pool; struct pool_alloc local_pool; + + /* Disregard any alternate parse paths, just go right to failure. */ + int fail_parsing; }; void colm_pda_init( struct colm_program *prg, struct pda_run *pda_run, @@ -458,15 +467,6 @@ void commit_reduce( program_t *prg, tree_t **root, struct pda_run *pda_run ); -/* Supplied by generated code. */ -void commit_reduce_forward( program_t *prg, tree_t **root, - struct pda_run *pda_run, parse_tree_t *pt ); - -long commit_union_sz( int reducer ); -void init_need(); -int reducer_need_tok( program_t *prg, struct pda_run *pda_run, int id ); -int reducer_need_ign( program_t *prg, struct pda_run *pda_run ); - #ifdef __cplusplus } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/program.c new/colm-0.13.0.4/src/program.c --- old/colm-0.13.0.3/src/program.c 2015-11-30 17:12:55.000000000 +0100 +++ new/colm-0.13.0.4/src/program.c 2016-04-04 15:55:00.000000000 +0200 @@ -194,7 +194,10 @@ /* Allocate the VM stack. */ vm_init( prg ); - init_need(); + rtd->init_need(); + + prg->stream_fns = malloc( sizeof(char*) * 1 ); + prg->stream_fns[0] = 0; return prg; } @@ -233,6 +236,13 @@ prg->red_ctx = ctx; } +const char **colm_extract_fns( struct colm_program *prg ) +{ + const char **fns = prg->stream_fns; + prg->stream_fns = 0; + return fns; +} + int colm_delete_program( program_t *prg ) { tree_t **sp = prg->stack_root; @@ -281,6 +291,16 @@ vm_clear( prg ); + if ( prg->stream_fns ) { + char **ptr = prg->stream_fns; + while ( *ptr != 0 ) { + free( *ptr ); + ptr += 1; + } + + free( prg->stream_fns ); + } + free( prg ); return exit_status; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/program.h new/colm-0.13.0.4/src/program.h --- old/colm-0.13.0.3/src/program.h 2015-11-30 17:11:53.000000000 +0100 +++ new/colm-0.13.0.4/src/program.h 2016-04-04 15:55:00.000000000 +0200 @@ -100,7 +100,13 @@ void (*init_bindings)( struct pda_run *pda_run ); void (*pop_binding)( struct pda_run *pda_run, parse_tree_t *tree ); + tree_t **(*host_call)( program_t *prg, long code, tree_t **sp ); + + void (*commit_reduce_forward)( program_t *prg, tree_t **root, struct pda_run *pda_run, parse_tree_t *pt ); + long (*commit_union_sz)( int reducer ); void (*init_need)(); + int (*reducer_need_tok)( program_t *prg, struct pda_run *pda_run, int id ); + int (*reducer_need_ign)( program_t *prg, struct pda_run *pda_run ); }; struct heap_list @@ -153,6 +159,9 @@ tree_t *return_val; void *red_ctx; + + /* This can be extracted for ownership transfer before a program is deleted. */ + const char **stream_fns; }; #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/reduce.cc new/colm-0.13.0.4/src/reduce.cc --- old/colm-0.13.0.3/src/reduce.cc 2015-12-02 21:51:04.000000000 +0100 +++ new/colm-0.13.0.4/src/reduce.cc 2016-04-04 15:55:00.000000000 +0200 @@ -43,17 +43,17 @@ void Compiler::writeCommitStub() { *outStream << - "void commit_reduce_forward( program_t *prg, tree_t **root,\n" + "void " << objectName << "_commit_reduce_forward( program_t *prg, tree_t **root,\n" " struct pda_run *pda_run, parse_tree_t *pt )\n" "{\n" " commit_clear_parse_tree( prg, root, pda_run, pt->child );\n" "}\n" "\n" - "long commit_union_sz( int reducer ) { return 0; }\n" - "void init_need() {}\n" - "int reducer_need_tok( program_t *prg, " + "long " << objectName << "_commit_union_sz( int reducer ) { return 0; }\n" + "void " << objectName << "_init_need() {}\n" + "int " << objectName << "_reducer_need_tok( program_t *prg, " "struct pda_run *pda_run, int id ) { return COLM_RN_BOTH; }\n" - "int reducer_need_ign( program_t *prg, " + "int " << objectName << "_reducer_need_ign( program_t *prg, " "struct pda_run *pda_run ) { return COLM_RN_BOTH; }\n" "\n"; ; @@ -346,7 +346,7 @@ "\n"; *outStream << - "extern \"C\" void init_need()\n" + "extern \"C\" void " << objectName << "_init_need()\n" "{\n"; for ( ReductionVect::Iter r = rootNamespace->reductions; r.lte(); r++ ) { @@ -374,7 +374,7 @@ "}\n"; *outStream << - "extern \"C\" int reducer_need_tok( program_t *prg, " + "extern \"C\" int " << objectName << "_reducer_need_tok( program_t *prg, " "struct pda_run *pda_run, int id )\n" "{\n" " if ( pda_run->reducer > 0 ) {\n" @@ -386,7 +386,7 @@ " return COLM_RN_BOTH;\n" "}\n" "\n" - "extern \"C\" int reducer_need_ign( program_t *prg, struct pda_run *pda_run )\n" + "extern \"C\" int " << objectName << "_reducer_need_ign( program_t *prg, struct pda_run *pda_run )\n" "{\n" // Using this requires finding a solution for backtracking push back. //" if ( pda_run->reducer > 0 )\n" @@ -453,14 +453,14 @@ "\n"; *outStream << - "long commit_union_sz( int reducer )\n" + "extern \"C\" long " << objectName << "_commit_union_sz( int reducer )\n" "{\n" " return sizeof( commit_reduce_union );\n" "}\n"; *outStream << "\n" - "void commit_reduce_forward( program_t *prg, tree_t **root,\n" + "extern \"C\" void " << objectName << "_commit_reduce_forward( program_t *prg, tree_t **root,\n" " struct pda_run *pda_run, parse_tree_t *pt )\n" "{\n" " switch ( pda_run->reducer ) {\n"; @@ -500,7 +500,7 @@ " vm_push_kid( kid );\n" "\n" " lel = lel->child;\n" - " kid = kid->tree->child;\n" + " kid = tree_child( prg, kid->tree );\n" " while ( lel != 0 ) {\n" " goto recurse;\n" " resume:\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/synthesis.cc new/colm-0.13.0.4/src/synthesis.cc --- old/colm-0.13.0.3/src/synthesis.cc 2015-12-15 21:48:24.000000000 +0100 +++ new/colm-0.13.0.4/src/synthesis.cc 2016-04-04 15:55:00.000000000 +0200 @@ -1235,6 +1235,9 @@ } } + else if ( newUT->typeId == TYPE_STRUCT && newUT->structEl == pd->streamSel ) { + code.append( IN_NEW_STREAM ); + } else { code.append( IN_NEW_STRUCT ); code.appendHalf( newUT->structEl->id ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/colm-0.13.0.3/src/version.h new/colm-0.13.0.4/src/version.h --- old/colm-0.13.0.3/src/version.h 2016-01-28 14:09:05.000000000 +0100 +++ new/colm-0.13.0.4/src/version.h 2016-07-11 21:36:53.000000000 +0200 @@ -1,2 +1,2 @@ -#define VERSION "0.13.0.3" -#define PUBDATE "Jan 2016" +#define VERSION "0.13.0.4" +#define PUBDATE "July 2016"
