From: Sam S. <sd...@gn...> - 2008-09-23 20:48:06
|
Raymond Toy wrote: > Sam Steingold wrote: >> Raymond Toy wrote: >>>>>> I hope there is a regex compile flag which would make the tests pass - >>>>>> could you please investigate? >>>>>> alternatively, you can pass --with-included-regex to the top-level >>>>> Without --with-included-regex, does clisp use the system regex library? >>>> yes, if the clisp/src/glm4/regex.m4 test passes. >>>> >>>>> If so, there are no flags. regex only support ed-style regexes. >>>> there is no re_set_syntax? >>> Nope. And I see the man page for regex(3) differs from what regex.h >>> defines. regex.h defines regcomp which allows some flags to set the >>> syntax. As best as I can tell, clisp is using regexec/regcomp. >>> >>> Some simple tests (in C) with regcomp/regexec shows that it works. >>> Perhaps, clisp isn't calling regcomp/regexec quite right? Where is this >>> defined? >> clisp/modules/regexp/regexi.c >> >> REGEXP::REGEXP-COMPILE calls regcomp >> REGEXP::REGEXP-EXEC calls regexec >> > > This behaves in a funny way. > > (regexp:regexp-compile "[a-{]*") > > produces an error: > > *** - REGEXP:REGEXP-COMPILE ("[a-{]*"): "Invalid range end" > wfm: [9]> (regexp:regexp-exec p "}" ) #S(REGEXP:MATCH :START 0 :END 0) [10]> (regexp:regexp-compile "[a-{]") #<FOREIGN-POINTER #x000000001E210B90> [11]> (setq p *) #<FOREIGN-POINTER #x000000001E210B90> [12]> (regexp:regexp-exec p "z" :boolean t) T [13]> (regexp:regexp-exec p "}" :boolean t) [14]> > AFAICT, [a-{] should be a valid range, and a simple C program works. > Same thing if the pattern is "[a-~]*". (clisp errors, C program ok.) are you sure that regexec and regcompile receive the exact same arguments from the C program and from clisp? please try gdb. > Could this be related to the GL0(misc_encoding) used before the call to > regexec and regcomp? what is GL0(misc_encoding) for you? (this is the same as *misc-encoding* and should be 1:1) > Also, the implementation doesn't quite match the documentation. > > The impnotes says imply that there is a :boolean keyword for > regexp-exec, but function signature doesn't mention it. WFM: (describe #'regexp:regexp-exec) #<ADD-ON-SYSTEM-FUNCTION REGEXP:REGEXP-EXEC> is a built-in system function. Argument list: (#:ARG0 #:ARG1 &KEY :BOOLEAN :START :END :NOTBOL :NOTEOL) For more information, evaluate (DISASSEMBLE #'REGEXP:REGEXP-EXEC). |