From 08799792a751fefba5820aa61d5b019f87583deb Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Sat, 25 Apr 2020 23:42:48 +0300 Subject: [PATCH] tests: fix regex test --- cmd/tools/vtest-fixed.v | 2 +- vlib/regex/regex.v | 30 ++++++++++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/cmd/tools/vtest-fixed.v b/cmd/tools/vtest-fixed.v index ce2a38c5c2..b25e4d3f68 100644 --- a/cmd/tools/vtest-fixed.v +++ b/cmd/tools/vtest-fixed.v @@ -11,13 +11,13 @@ const ( 'vlib/json/json_test.v', 'vlib/net/http/http_httpbin_test.v', 'vlib/net/http/http_test.v', - 'vlib/regex/regex_test.v', 'vlib/v/tests/enum_bitfield_test.v', 'vlib/v/tests/num_lit_call_method_test.v', 'vlib/v/tests/pointers_test.v', 'vlib/v/tests/type_test.v', 'vlib/v/tests/valgrind/valgrind_test.v', // ubuntu-musl only 'vlib/v/tests/pointers_str_test.v', + 'vlib/net/http/cookie_test.v', // ok, but should be skipped on ubuntu-musl, since there is no openssl there 'vlib/clipboard/clipboard_test.v', 'vlib/sqlite/sqlite_test.v', diff --git a/vlib/regex/regex.v b/vlib/regex/regex.v index 3ed79141a3..b56476c2d4 100644 --- a/vlib/regex/regex.v +++ b/vlib/regex/regex.v @@ -229,6 +229,7 @@ fn simple_log(txt string) { * Token Structs * ******************************************************************************/ +pub type FnValidator fn (byte) bool struct Token{ mut: ist u32 = u32(0) @@ -249,7 +250,7 @@ mut: rep int = 0 // validator function pointer - validator fn (byte) bool + validator FnValidator // groups variables group_rep int = 0 // repetition of the group @@ -291,6 +292,8 @@ mut: group_stack_index int = -1 // continuous save on capturing groups } +pub type FnLog fn (string) + pub struct RE { pub mut: @@ -321,7 +324,7 @@ pub mut: // Debug/log debug int = 0 // enable in order to have the unroll of the code 0 = NO_DEBUG, 1 = LIGHT 2 = VERBOSE - log_func fn (string) = simple_log // log function, can be customized by the user + log_func FnLog = simple_log // log function, can be customized by the user query string = "" // query string } @@ -376,7 +379,7 @@ pub fn (re RE) get_group(group_name string) (int, int) { ******************************************************************************/ struct BslsStruct { ch u32 // meta char - validator fn (byte) bool // validator function pointer + validator FnValidator // validator function pointer } const( @@ -463,7 +466,7 @@ mut: cc_type int = CC_NULL // type of cc token ch0 u32 = u32(0) // first char of the interval a-b a in this case ch1 u32 = u32(0) // second char of the interval a-b b in this case - validator fn (byte) bool // validator function pointer + validator FnValidator // validator function pointer } enum CharClass_parse_state { @@ -476,7 +479,7 @@ enum CharClass_parse_state { fn (re RE) get_char_class(pc int) string { buf := [byte(0)].repeat(re.cc.len) - mut buf_ptr := *byte(&buf) + mut buf_ptr := &byte(&buf) mut cc_i := re.prog[pc].cc_index mut i := 0 @@ -1224,7 +1227,8 @@ pub fn (re mut RE) compile(in_txt string) (int,int) { // DEBUG PRINT REGEX GENERATED CODE //****************************************** if re.debug > 0 { - re.log_func(re.get_code()) + gc := re.get_code() + re.log_func( gc ) } //****************************************** @@ -1442,7 +1446,6 @@ fn state_str(s Match_state) string { .ist_quant_n { return "ist_quant_n" } .ist_quant_pg { return "ist_quant_pg" } .ist_quant_ng { return "ist_quant_ng" } - else { return "UNKN" } } } @@ -1484,7 +1487,8 @@ pub fn (re mut RE) match_base(in_txt byteptr, in_txt_len int ) (int,int) { h_buf.write("flags: ") h_buf.write("${re.flag:8x}".replace(" ","0")) h_buf.write("\n") - re.log_func(h_buf.str()) + sss := h_buf.str() + re.log_func(sss) } for m_state != .end { @@ -1507,7 +1511,8 @@ pub fn (re mut RE) match_base(in_txt byteptr, in_txt_len int ) (int,int) { // end of the input text if i >= in_txt_len { buf2.write("# ${step_count:3d} END OF INPUT TEXT\n") - re.log_func(buf2.str()) + sss := buf2.str() + re.log_func(sss) }else{ // print only the exe instruction @@ -1559,7 +1564,8 @@ pub fn (re mut RE) match_base(in_txt byteptr, in_txt_len int ) (int,int) { } buf2.write(" (#${group_index})\n") } - re.log_func(buf2.str()) + sss2 := buf2.str() + re.log_func( sss2 ) } } step_count++ @@ -2171,12 +2177,12 @@ pub fn regex(in_query string) (RE,int,int){ return re, re_err, err_pos } -// new_regex create a REgex of small size, usually sufficient for ordinary use +// new_regex create a RE of small size, usually sufficient for ordinary use pub fn new_regex() RE { return new_regex_by_size(1) } -// new_regex_by_size create a REgex of large size, mult specify the scale factor of the memory that will be allocated +// new_regex_by_size create a RE of large size, mult specify the scale factor of the memory that will be allocated pub fn new_regex_by_size(mult int) RE { mut re := RE{} re.prog = [Token{}].repeat(MAX_CODE_LEN*mult) // max program length, default 256 istructions