From: John S. <sk...@us...> - 2006-05-21 13:59:47
|
Update of /cvsroot/felix/lpsrc In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv18836 Modified Files: flx_sdl.pak tre.pak Log Message: Basic TRE package now built in core, including unit tests. Index: tre.pak =================================================================== RCS file: /cvsroot/felix/lpsrc/tre.pak,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tre.pak 12 May 2006 00:21:43 -0000 1.4 --- tre.pak 21 May 2006 13:59:39 -0000 1.5 *************** *** 29,34 **** 'tre/tre_mem', 'tre/tre_parse', ! 'tre/tre_stack', ! 'tre/tre_xmalloc', ] --- 29,33 ---- 'tre/tre_mem', 'tre/tre_parse', ! 'tre/tre_stack' ] *************** *** 37,53 **** weaver_directory = 'doc/rtl/tre/' build_macro = "TRE" ! if CYGWIN: ! sflags = '-lintl' ! dflags = '-lintl' @h = tangler('config/tre.fpc') @select(h) ! provides_dlib: -ltre ! provides_slib: -ltre ! @if CYGWIN: ! tangle('requires_dlibs: -lintl') ! tangle('requires slibs: -lintl') @h=tangler('rtl/flx_target_tre_config.hpp') @select(h) --- 36,164 ---- weaver_directory = 'doc/rtl/tre/' build_macro = "TRE" ! unit_tests = glob.glob("test" + os.sep + "tre*.flx") @h = tangler('config/tre.fpc') @select(h) ! provides_dlib: -ltre_dynamic ! provides_slib: -ltre_static ! ! @h=tangler('lib/tre.flx') ! @select(h) ! #import <flx.flxh> ! ! module Tre ! { ! open C_hack; ! requires package 'tre'; ! header '#include "tre_regex.hpp"'; ! type tre_regex_t = "regex_t"; ! ! const tre_version: string = "tre_version()"; ! ! private fun _tre_regcomp: ptr[tre_regex_t] * string -> int = ! "regncomp($1,$2.data(),$2.size(),REG_EXTENDED)" ! ; ! ! fun tre_regcomp (x:string): opt[tre_regex_t] = { ! var cr: tre_regex_t; ! var res = _tre_regcomp(addr cr, x); ! return ! if res == 0 then Some cr else None[tre_regex_t] endif ! ; ! } ! ! fun nsub: ptr[tre_regex_t] -> int = "$1->re_nsub+1"; ! ! ctypes regoff_t; ! cstruct regmatch_t { ! rm_so: regoff_t; ! rm_eo: regoff_t; ! } ! ! fun add: ptr[char] * regoff_t -> ptr[char] = "$1+$2"; ! fun sub: regoff_t * regoff_t -> int = "(int)($1-$2)"; ! fun _ctor_int : regoff_t -> int = "int($1)"; ! ! private fun _tre_regexec: ! ptr[tre_regex_t] * // the compiled regex ! string * // string to search ! int * // number of matches to return ! ptr[regmatch_t] // array to hold matches ! -> int ! = ! "regnexec($1,$2.data(),$2.size(),$3,$4,0);" ! ; + fun tre_regexec (re_in: tre_regex_t) (x:string): int * int * ptr[regmatch_t] = + { + var re = re_in; + val nmatches = nsub$ addr re; + var matches = Carray::array_alloc[regmatch_t] nmatches; + var res = _tre_regexec(addr re, x, nmatches, matches); + return res,nmatches,matches; + } + } + @h=tangler('test/tre_01.flx') + @select(h) + #import <flx.flxh> + include "tre.flx"; + open Tre; + open C_hack; + open Carray; + + print$ "Using tre " tre_version; endl; + + var r = tre_regcomp("(a|b)*abb"); + print "Done tre compile"; endl; + + print + match r with + | Some _ => "Compiled" + | None => "failed" + endmatch + ; + endl; + + + var re : tre_regex_t = + match r with + | Some ?re => re + | None => re // HACK! + endmatch + ; + + var s = "aabbabababb"; + res,n,a := tre_regexec re s; + print "Result = "; print res; endl; + print "nmatches = "; print n; endl; + + var i : int; + for_each { i=0; } { i<n } { ++i; } + { + if int(a.[i].rm_so) == -1 do + print i; print " -> nomatch\n"; + else + print i; print "-> match '"; + start := int(a.[i].rm_so); + finish := int(a.[i].rm_eo); + print s.[start to finish]; + print "'"; endl; + done; + } + ; + + print "Finished"; endl; + + @h=tangler('test/tre_01.expect') + @select(h) + Using tre TRE 0.7.2 (GPL) + Done tre compile + Compiled + Result = 0 + nmatches = 2 + 0-> match 'aabbabababb' + 1-> match 'b' + Finished @h=tangler('rtl/flx_target_tre_config.hpp') @select(h) *************** *** 81,105 **** /* Define to 1 if you have `alloca', as a function or macro. */ ! #define HAVE_ALLOCA 1 /* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). */ ! #define HAVE_ALLOCA_H 1 /* Define if the GNU dcgettext() function is already present or preinstalled. */ ! #define HAVE_DCGETTEXT 1 /* Define to 1 if you have the <dlfcn.h> header file. */ ! #define HAVE_DLFCN_H 1 /* Define to 1 if you have the <getopt.h> header file. */ ! #define HAVE_GETOPT_H 1 /* Define to 1 if you have the `getopt_long' function. */ ! #define HAVE_GETOPT_LONG 1 /* Define if the GNU gettext() function is already present or preinstalled. */ ! #define HAVE_GETTEXT 1 /* Define if you have the iconv() function. */ --- 192,216 ---- /* Define to 1 if you have `alloca', as a function or macro. */ ! //#define HAVE_ALLOCA 1 /* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). */ ! //#define HAVE_ALLOCA_H 1 /* Define if the GNU dcgettext() function is already present or preinstalled. */ ! //#define HAVE_DCGETTEXT 1 /* Define to 1 if you have the <dlfcn.h> header file. */ ! //#define HAVE_DLFCN_H 1 /* Define to 1 if you have the <getopt.h> header file. */ ! //#define HAVE_GETOPT_H 1 /* Define to 1 if you have the `getopt_long' function. */ ! //#define HAVE_GETOPT_LONG 1 /* Define if the GNU gettext() function is already present or preinstalled. */ ! //#define HAVE_GETTEXT 1 /* Define if you have the iconv() function. */ *************** *** 107,111 **** /* Define to 1 if you have the <inttypes.h> header file. */ ! #define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `isascii' function. */ --- 218,222 ---- /* Define to 1 if you have the <inttypes.h> header file. */ ! //#define HAVE_INTTYPES_H 1 /* Define to 1 if you have the `isascii' function. */ *************** *** 119,132 **** /* Define to 1 if you have the `iswblank' function or macro. */ ! #define HAVE_ISWBLANK 1 /* Define to 1 if you have the `iswctype' function or macro. */ ! #define HAVE_ISWCTYPE 1 /* Define to 1 if you have the `iswlower' function or macro. */ ! #define HAVE_ISWLOWER 1 /* Define to 1 if you have the `iswupper' function or macro. */ ! #define HAVE_ISWUPPER 1 /* Define to 1 if you have the <libutf8.h> header file. */ --- 230,243 ---- /* Define to 1 if you have the `iswblank' function or macro. */ ! //#define HAVE_ISWBLANK 1 /* Define to 1 if you have the `iswctype' function or macro. */ ! //#define HAVE_ISWCTYPE 1 /* Define to 1 if you have the `iswlower' function or macro. */ ! //#define HAVE_ISWLOWER 1 /* Define to 1 if you have the `iswupper' function or macro. */ ! //#define HAVE_ISWUPPER 1 /* Define to 1 if you have the <libutf8.h> header file. */ *************** *** 134,141 **** /* Define to 1 if you have the `mbrtowc' function or macro. */ ! #define HAVE_MBRTOWC 1 /* Define to 1 if the system has the type `mbstate_t'. */ ! #define HAVE_MBSTATE_T 1 /* Define to 1 if you have the `mbtowc' function or macro. */ --- 245,252 ---- /* Define to 1 if you have the `mbrtowc' function or macro. */ ! //#define HAVE_MBRTOWC 1 /* Define to 1 if the system has the type `mbstate_t'. */ ! //#define HAVE_MBSTATE_T 1 /* Define to 1 if you have the `mbtowc' function or macro. */ *************** *** 143,147 **** /* Define to 1 if you have the <memory.h> header file. */ ! #define HAVE_MEMORY_H 1 /* Define to 1 if you have the <regex.h> header file. */ --- 254,258 ---- /* Define to 1 if you have the <memory.h> header file. */ ! //#define HAVE_MEMORY_H 1 /* Define to 1 if you have the <regex.h> header file. */ *************** *** 152,156 **** /* Define to 1 if you have the <stdint.h> header file. */ ! #define HAVE_STDINT_H 1 /* Define to 1 if you have the <stdlib.h> header file. */ --- 263,267 ---- /* Define to 1 if you have the <stdint.h> header file. */ ! //#define HAVE_STDINT_H 1 /* Define to 1 if you have the <stdlib.h> header file. */ *************** *** 158,162 **** /* Define to 1 if you have the <strings.h> header file. */ ! #define HAVE_STRINGS_H 1 /* Define to 1 if you have the <string.h> header file. */ --- 269,273 ---- /* Define to 1 if you have the <strings.h> header file. */ ! //#define HAVE_STRINGS_H 1 /* Define to 1 if you have the <string.h> header file. */ *************** *** 164,201 **** /* Define to 1 if you have the <sys/stat.h> header file. */ ! #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the <sys/types.h> header file. */ ! #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `towlower' function or macro. */ ! #define HAVE_TOWLOWER 1 /* Define to 1 if you have the `towupper' function or macro. */ ! #define HAVE_TOWUPPER 1 /* Define to 1 if you have the <unistd.h> header file. */ ! #define HAVE_UNISTD_H 1 /* Define to 1 if you have the <wchar.h> header file. */ ! #define HAVE_WCHAR_H 1 /* Define to 1 if the system has the type `wchar_t'. */ ! #define HAVE_WCHAR_T 1 /* Define to 1 if you have the `wcschr' function or macro. */ ! #define HAVE_WCSCHR 1 /* Define to 1 if you have the `wcscpy' function or macro. */ ! #define HAVE_WCSCPY 1 /* Define to 1 if you have the `wcslen' function or macro. */ ! #define HAVE_WCSLEN 1 /* Define to 1 if you have the `wcsncpy' function or macro. */ ! #define HAVE_WCSNCPY 1 /* Define to 1 if you have the `wcsrtombs' function or macro. */ ! #define HAVE_WCSRTOMBS 1 /* Define to 1 if you have the `wcstombs' function or macro. */ --- 275,312 ---- /* Define to 1 if you have the <sys/stat.h> header file. */ ! //#define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the <sys/types.h> header file. */ ! //#define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `towlower' function or macro. */ ! //#define HAVE_TOWLOWER 1 /* Define to 1 if you have the `towupper' function or macro. */ ! //#define HAVE_TOWUPPER 1 /* Define to 1 if you have the <unistd.h> header file. */ ! //#define HAVE_UNISTD_H 1 /* Define to 1 if you have the <wchar.h> header file. */ ! //#define HAVE_WCHAR_H 1 /* Define to 1 if the system has the type `wchar_t'. */ ! //#define HAVE_WCHAR_T 1 /* Define to 1 if you have the `wcschr' function or macro. */ ! //#define HAVE_WCSCHR 1 /* Define to 1 if you have the `wcscpy' function or macro. */ ! //#define HAVE_WCSCPY 1 /* Define to 1 if you have the `wcslen' function or macro. */ ! //#define HAVE_WCSLEN 1 /* Define to 1 if you have the `wcsncpy' function or macro. */ ! //#define HAVE_WCSNCPY 1 /* Define to 1 if you have the `wcsrtombs' function or macro. */ ! //#define HAVE_WCSRTOMBS 1 /* Define to 1 if you have the `wcstombs' function or macro. */ *************** *** 203,213 **** /* Define to 1 if you have the `wctype' function or macro. */ ! #define HAVE_WCTYPE 1 /* Define to 1 if you have the <wctype.h> header file. */ ! #define HAVE_WCTYPE_H 1 /* Define to 1 if the system has the type `wint_t'. */ ! #define HAVE_WINT_T 1 /* Define if you want to disable debug assertions. */ --- 314,324 ---- /* Define to 1 if you have the `wctype' function or macro. */ ! //#define HAVE_WCTYPE 1 /* Define to 1 if you have the <wctype.h> header file. */ ! //#define HAVE_WCTYPE_H 1 /* Define to 1 if the system has the type `wint_t'. */ ! //#define HAVE_WINT_T 1 /* Define if you want to disable debug assertions. */ *************** *** 250,254 **** /* Define to enable multibyte character set support. */ ! #define TRE_MULTIBYTE 1 /* Define to a field in the regex_t struct where TRE should store a pointer to --- 361,365 ---- /* Define to enable multibyte character set support. */ ! #define TRE_MULTIBYTE 0 /* Define to a field in the regex_t struct where TRE should store a pointer to *************** *** 261,265 **** /* Define if you want TRE to use alloca() instead of malloc() when allocating memory needed for regexec operations. */ ! #define TRE_USE_ALLOCA 1 /* Define to include the system regex.h from TRE regex.h */ --- 372,376 ---- /* Define if you want TRE to use alloca() instead of malloc() when allocating memory needed for regexec operations. */ ! //#define TRE_USE_ALLOCA 1 /* Define to include the system regex.h from TRE regex.h */ *************** *** 279,283 **** /* Define to enable wide character (wchar_t) support. */ ! #define TRE_WCHAR 1 /* Version number of package */ --- 390,394 ---- /* Define to enable wide character (wchar_t) support. */ ! //#define TRE_WCHAR 1 /* Version number of package */ *************** *** 297,301 **** /* Define to enable GNU extensions in glibc */ ! #define _GNU_SOURCE 1 /* Define for large files, on AIX-style hosts. */ --- 408,412 ---- /* Define to enable GNU extensions in glibc */ ! //#define _GNU_SOURCE 1 /* Define for large files, on AIX-style hosts. */ *************** *** 492,496 **** xfree(wregex); #else /* !TRE_WCHAR */ ! ret = tre_compile(preg, regex, n, cflags); #endif /* !TRE_WCHAR */ --- 603,607 ---- xfree(wregex); #else /* !TRE_WCHAR */ ! ret = tre_compile(preg, (const tre_char_t*)regex, n, cflags); #endif /* !TRE_WCHAR */ *************** *** 4011,4015 **** /* Define to 1 if you have the <wchar.h> header file. */ ! #define HAVE_WCHAR_H 1 /* Define if you want to enable approximate matching functionality. */ --- 4122,4126 ---- /* Define to 1 if you have the <wchar.h> header file. */ ! #define HAVE_WCHAR_H 0 /* Define if you want to enable approximate matching functionality. */ *************** *** 4017,4021 **** /* Define to enable multibyte character set support. */ ! #define TRE_MULTIBYTE 1 /* Define to the absolute path to the system regex.h */ --- 4128,4132 ---- /* Define to enable multibyte character set support. */ ! #define TRE_MULTIBYTE 0 /* Define to the absolute path to the system regex.h */ *************** *** 4026,4030 **** /* Define to enable wide character (wchar_t) support. */ ! #define TRE_WCHAR 1 /* TRE version string. */ --- 4137,4141 ---- /* Define to enable wide character (wchar_t) support. */ ! //#define TRE_WCHAR 0 /* TRE version string. */ *************** *** 4744,4748 **** buf = (unsigned char*)alloca(total_bytes); #else /* !TRE_USE_ALLOCA */ ! buf = xmalloc(total_bytes); #endif /* !TRE_USE_ALLOCA */ if (!buf) --- 4855,4859 ---- buf = (unsigned char*)alloca(total_bytes); #else /* !TRE_USE_ALLOCA */ ! buf = (unsigned char*)xmalloc(total_bytes); #endif /* !TRE_USE_ALLOCA */ if (!buf) *************** *** 5568,5572 **** states_seen = (int*)alloca(sizeof(*states_seen) * tnfa->num_states); #else /* !TRE_USE_ALLOCA */ ! tags = xmalloc(sizeof(*tags) * tnfa->num_tags); if (!tags) { --- 5679,5683 ---- states_seen = (int*)alloca(sizeof(*states_seen) * tnfa->num_states); #else /* !TRE_USE_ALLOCA */ ! tags = (int*)xmalloc(sizeof(*tags) * tnfa->num_tags); if (!tags) { *************** *** 5574,5578 **** goto error_exit; } ! pmatch = xmalloc(sizeof(*pmatch) * tnfa->num_submatches); if (!pmatch) { --- 5685,5689 ---- goto error_exit; } ! pmatch = (regmatch_t*)xmalloc(sizeof(*pmatch) * tnfa->num_submatches); if (!pmatch) { *************** *** 5580,5584 **** goto error_exit; } ! states_seen = xmalloc(sizeof(*states_seen) * tnfa->num_states); if (!states_seen) { --- 5691,5695 ---- goto error_exit; } ! states_seen = (int*)xmalloc(sizeof(*states_seen) * tnfa->num_states); if (!states_seen) { *************** *** 6132,6136 **** buf = (char*)alloca(total_bytes); #else /* !TRE_USE_ALLOCA */ ! buf = xmalloc(total_bytes); #endif /* !TRE_USE_ALLOCA */ if (buf == NULL) --- 6243,6247 ---- buf = (char*)alloca(total_bytes); #else /* !TRE_USE_ALLOCA */ ! buf = (char*)xmalloc(total_bytes); #endif /* !TRE_USE_ALLOCA */ if (buf == NULL) *************** *** 7041,7045 **** } #else /* !TRE_WCHAR */ ! match = strncmp(tre_macros[i], regex, strlen(tre_macros[i])); #endif /* !TRE_WCHAR */ if (match == 0) --- 7152,7156 ---- } #else /* !TRE_WCHAR */ ! match = strncmp(tre_macros[i], (const char*)regex, strlen(tre_macros[i])); #endif /* !TRE_WCHAR */ if (match == 0) *************** *** 7296,7300 **** } #else /* !TRE_WCHAR */ ! strncpy(tmp_str, re + 2, len); #endif /* !TRE_WCHAR */ tmp_str[len] = '\0'; --- 7407,7411 ---- } #else /* !TRE_WCHAR */ ! strncpy(tmp_str, (const char*)re + 2, len); #endif /* !TRE_WCHAR */ tmp_str[len] = '\0'; *************** *** 8311,8315 **** memcpy(&subctx, ctx, sizeof(subctx)); subctx.re = buf; ! subctx.len = tre_strlen(buf); subctx.nofirstsub = 1; status = tre_parse(&subctx); --- 8422,8426 ---- memcpy(&subctx, ctx, sizeof(subctx)); subctx.re = buf; ! subctx.len = tre_strlen((const char*)buf); subctx.nofirstsub = 1; status = tre_parse(&subctx); Index: flx_sdl.pak =================================================================== RCS file: /cvsroot/felix/lpsrc/flx_sdl.pak,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** flx_sdl.pak 18 May 2006 08:59:57 -0000 1.16 --- flx_sdl.pak 21 May 2006 13:59:39 -0000 1.17 *************** *** 2,5 **** --- 2,8 ---- @head(1,'SDL') $Log$ + Revision 1.17 2006/05/21 13:59:39 skaller + Basic TRE package now built in core, including unit tests. + Revision 1.16 2006/05/18 08:59:57 skaller Fixed make script so static link tests work. It's a hack, *************** *** 252,259 **** ! @h=tangler('rtl/flx_sdl_run.cxx') @select(h) #include "SDL.h" ! #include "flx_run.cxx" @h = tangler('spkgs/sdl.py') --- 255,263 ---- ! @h=tangler('rtl/flx_sdl_arun.cxx') @select(h) #include "SDL.h" ! #define FLX_SUPPORT_ASYNC ! #include "flx_run.cpp" @h = tangler('spkgs/sdl.py') |