Merge lp:~zorba-coders/zorba/bug-1123161 into lp:zorba

Proposed by Paul J. Lucas
Status: Merged
Approved by: Chris Hillery
Approved revision: 11286
Merged at revision: 11258
Proposed branch: lp:~zorba-coders/zorba/bug-1123161
Merge into: lp:zorba
Diff against target: 922 lines (+383/-229)
12 files modified
ChangeLog (+6/-2)
src/diagnostics/diagnostic_en.xml (+18/-2)
src/diagnostics/pregenerated/dict_en.cpp (+10/-0)
src/diagnostics/pregenerated/dict_zed_keys.h (+5/-1)
src/util/ascii_util.cpp (+11/-5)
src/util/regex.cpp (+321/-108)
test/fots/CMakeLists.txt (+9/-106)
test/rbkt/ExpQueryResults/zorba/string/Regex/regex_m54.xml.res (+1/-0)
test/rbkt/ExpQueryResults/zorba/string/Regex/regex_m55.xml.res (+1/-0)
test/rbkt/Queries/CMakeLists.txt (+1/-3)
test/rbkt/Queries/zorba/string/Regex/regex_err25.spec (+0/-1)
test/rbkt/Queries/zorba/string/Regex/regex_err7.spec (+0/-1)
To merge this branch: bzr merge lp:~zorba-coders/zorba/bug-1123161
Reviewer Review Type Date Requested Status
Chris Hillery Approve
Paul J. Lucas Approve
Matthias Brantner Approve
Review via email: mp+148773@code.launchpad.net

Commit message

Fixed 100 FOTS failures, aka, bugs.

Description of the change

Fixed 100 FOTS failures, aka, bugs.

To post a comment you must log in.
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

Validation queue job bug-1123161-2013-02-15T17-50-43.223Z is finished. The final status was:

All tests succeeded!

Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

Voting does not meet specified criteria. Required: Approve > 1, Disapprove < 1, Needs Fixing < 1, Pending < 1. Got: 1 Pending.

Revision history for this message
Chris Hillery (ceejatec) wrote :

More detailed commit message and Changelog entry, please.

Revision history for this message
Paul J. Lucas (paul-lucas) wrote :

> More detailed commit message and Changelog entry, please.

I'm not finished yet. It was just to see if I broke anything.

Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

The attempt to merge lp:~zorba-coders/zorba/bug-1123161 into lp:zorba failed. Below is the output from the failed tests.

CMake Error at /home/ceej/zo/testing/zorbatest/tester/TarmacLander.cmake:275 (message):
  Validation queue job bug-1123161-2013-02-20T17-01-04.41Z is finished. The
  final status was:

  1 tests did not succeed - changes not commited.

Error in read script: /home/ceej/zo/testing/zorbatest/tester/TarmacLander.cmake

Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

Validation queue job bug-1123161-2013-02-20T17-53-49.766Z is finished. The final status was:

All tests succeeded!

Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

Voting does not meet specified criteria. Required: Approve > 1, Disapprove < 1, Needs Fixing < 1, Pending < 1. Got: 1 Pending.

Revision history for this message
Paul J. Lucas (paul-lucas) :
review: Approve
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

The attempt to merge lp:~zorba-coders/zorba/bug-1123161 into lp:zorba failed. Below is the output from the failed tests.

CMake Error at /home/ceej/zo/testing/zorbatest/tester/TarmacLander.cmake:275 (message):
  Validation queue job bug-1123161-2013-02-23T00-36-03.688Z is finished. The
  final status was:

  2 tests did not succeed - changes not commited.

Error in read script: /home/ceej/zo/testing/zorbatest/tester/TarmacLander.cmake

Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

The attempt to merge lp:~zorba-coders/zorba/bug-1123161 into lp:zorba failed. Below is the output from the failed tests.

CMake Error at /home/ceej/zo/testing/zorbatest/tester/TarmacLander.cmake:275 (message):
  Validation queue job bug-1123161-2013-02-23T14-57-54.588Z is finished. The
  final status was:

  8 tests did not succeed - changes not commited.

Error in read script: /home/ceej/zo/testing/zorbatest/tester/TarmacLander.cmake

Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

Validation queue job bug-1123161-2013-02-23T16-05-49.851Z is finished. The final status was:

All tests succeeded!

Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

Voting does not meet specified criteria. Required: Approve > 1, Disapprove < 1, Needs Fixing < 1, Pending < 1. Got: 1 Approve.

Revision history for this message
Chris Hillery (ceejatec) wrote :

I do have two minor points, but they're just about comments so I'll go ahead and leave my Approve vote too.

First, one minor typo: "ahe" instead of "the" in regex.cpp.

Second, question about comment:

     //
     // The '=' is neither the first or last character within a
     // character range (i.e., a literal '-') so therefore it's
     // indicating a character range.
     //

Is there some context about '=' that I'm missing, or is that just a typo and it should be '-'?

review: Approve
Revision history for this message
Matthias Brantner (matthias-brantner) :
review: Approve
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :
Revision history for this message
Paul J. Lucas (paul-lucas) :
review: Needs Fixing
Revision history for this message
Paul J. Lucas (paul-lucas) wrote :

> Is there some context about '=' that I'm missing, or is that just a typo and
> it should be '-'?

Typo.

Revision history for this message
Paul J. Lucas (paul-lucas) :
review: Approve
Revision history for this message
Chris Hillery (ceejatec) :
review: Needs Fixing
Revision history for this message
Chris Hillery (ceejatec) wrote :

I re-voted to prevent this RQ run from succeeding, because it won't have Paul's typo fixes in it. I'll re-start it in a bit.

Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

Validation queue job bug-1123161-2013-02-26T01-29-52.766Z is finished. The final status was:

All tests succeeded!

Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

Voting does not meet specified criteria. Required: Approve > 1, Disapprove < 1, Needs Fixing < 1, Pending < 1. Got: 2 Approve, 1 Needs Fixing.

Revision history for this message
Chris Hillery (ceejatec) :
review: Approve
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :
Revision history for this message
Zorba Build Bot (zorba-buildbot) wrote :

Validation queue job bug-1123161-2013-02-26T01-52-54.087Z is finished. The final status was:

All tests succeeded!

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'ChangeLog'
--- ChangeLog 2013-02-15 21:39:41 +0000
+++ ChangeLog 2013-02-26 01:37:22 +0000
@@ -28,10 +28,14 @@
28 * Fixed bug #1111786 (xml/json parse error location in catch clause).28 * Fixed bug #1111786 (xml/json parse error location in catch clause).
29 * NaN items are considered equal to each other during grouping29 * NaN items are considered equal to each other during grouping
30 * Fixed bug #855481 (Too small time types on Windows).30 * Fixed bug #855481 (Too small time types on Windows).
31 * Fixed bug #1132032 (Certain regexes involving ^ should be legal)
32 * Fixed bug #1023168 (Non-single-char-escapes in regex character ranges not
33 caught)
34 * Fixed bug #866874 (regex "range subtraction" not supported for ICU)
31 * Fixed bug in computing the static type of an allowing-empty FOR variable.35 * Fixed bug in computing the static type of an allowing-empty FOR variable.
32 * Fixed bug #1099648 and #1088886 (XML parsing failures on Red Hat)36 * Fixed bug #1099648 and #1088886 (XML parsing failures on Red Hat)
33 * Fixed bug #1099535 (xml:parse endless loop)37 * Fixed bug #1099535 (xml:parse endless loop)
34 * Fixed bug #866958 (Parsing error not explicit enough)38 * Fixed bug #866958 (Parsing error not explicit enough)
35 * Fixed bug #867068 (Incorrect usage of XQDY0027)39 * Fixed bug #867068 (Incorrect usage of XQDY0027)
36 * Fixed bug #1023362 (xsi:type attribute ignored during validation)40 * Fixed bug #1023362 (xsi:type attribute ignored during validation)
3741
3842
=== modified file 'src/diagnostics/diagnostic_en.xml'
--- src/diagnostics/diagnostic_en.xml 2013-02-21 14:33:24 +0000
+++ src/diagnostics/diagnostic_en.xml 2013-02-26 01:37:22 +0000
@@ -3222,6 +3222,10 @@
3222 <value>'$3': illegal character within { }</value>3222 <value>'$3': illegal character within { }</value>
3223 </entry>3223 </entry>
32243224
3225 <entry key="BadEndCharInRange_34">
3226 <value>'$3': invalid end character in range (less than '$4' start character)</value>
3227 </entry>
3228
3225 <entry key="BadDecDigit_3">3229 <entry key="BadDecDigit_3">
3226 <value>'$3': invalid decimal digit</value>3230 <value>'$3': invalid decimal digit</value>
3227 </entry>3231 </entry>
@@ -3246,12 +3250,20 @@
3246 <value>invalid library module</value>3250 <value>invalid library module</value>
3247 </entry>3251 </entry>
32483252
3253 <entry key="BadPath">
3254 <value>invalid path</value>
3255 </entry>
3256
3257 <entry key="BadQuantifierHere_3" if="!defined(ZORBA_NO_ICU)">
3258 <value>'$3': quantifier illegal here</value>
3259 </entry>
3260
3249 <entry key="BadRegexEscape_3" if="!defined(ZORBA_NO_ICU)">3261 <entry key="BadRegexEscape_3" if="!defined(ZORBA_NO_ICU)">
3250 <value>"$3": illegal escape character</value>3262 <value>"$3": illegal escape character</value>
3251 </entry>3263 </entry>
32523264
3253 <entry key="BadPath">3265 <entry key="BadRegexParen_3" if="!defined(ZORBA_NO_ICU)">
3254 <value>invalid path</value>3266 <value>"$3": illegal character after "(?"</value>
3255 </entry>3267 </entry>
32563268
3257 <entry key="BadStreamState">3269 <entry key="BadStreamState">
@@ -3626,6 +3638,10 @@
3626 <value>can not treat as "$4"</value>3638 <value>can not treat as "$4"</value>
3627 </entry>3639 </entry>
36283640
3641 <entry key="NotSingleCharEsc_3" if="!defined(ZORBA_NO_ICU)">
3642 <value>"\\$3": multi-character and category escapes not permitted in character range</value>
3643 </entry>
3644
3629 <entry key="NoTypeInMainModule_4">3645 <entry key="NoTypeInMainModule_4">
3630 <value>type of variable "$4" is not among the in-scope types of the main module</value>3646 <value>type of variable "$4" is not among the in-scope types of the main module</value>
3631 </entry>3647 </entry>
36323648
=== modified file 'src/diagnostics/pregenerated/dict_en.cpp'
--- src/diagnostics/pregenerated/dict_en.cpp 2013-02-21 14:33:24 +0000
+++ src/diagnostics/pregenerated/dict_en.cpp 2013-02-26 01:37:22 +0000
@@ -549,6 +549,7 @@
549 { "~BadCharAfter_34", "'$3': illegal character after '$4'" },549 { "~BadCharAfter_34", "'$3': illegal character after '$4'" },
550 { "~BadCharInBraces_3", "'$3': illegal character within { }" },550 { "~BadCharInBraces_3", "'$3': illegal character within { }" },
551 { "~BadDecDigit_3", "'$3': invalid decimal digit" },551 { "~BadDecDigit_3", "'$3': invalid decimal digit" },
552 { "~BadEndCharInRange_34", "'$3': invalid end character in range (less than '$4' start character)" },
552 { "~BadFileURIAuthority_2", "\"$2\": invalid authority for \"file\" scheme" },553 { "~BadFileURIAuthority_2", "\"$2\": invalid authority for \"file\" scheme" },
553 { "~BadHexSequence", "invalid hexedecimal sequence" },554 { "~BadHexSequence", "invalid hexedecimal sequence" },
554 { "~BadItem", "invalid item" },555 { "~BadItem", "invalid item" },
@@ -556,8 +557,14 @@
556 { "~BadLibraryModule", "invalid library module" },557 { "~BadLibraryModule", "invalid library module" },
557 { "~BadPath", "invalid path" },558 { "~BadPath", "invalid path" },
558#if !defined(ZORBA_NO_ICU)559#if !defined(ZORBA_NO_ICU)
560 { "~BadQuantifierHere_3", "'$3': quantifier illegal here" },
561#endif
562#if !defined(ZORBA_NO_ICU)
559 { "~BadRegexEscape_3", "\"$3\": illegal escape character" },563 { "~BadRegexEscape_3", "\"$3\": illegal escape character" },
560#endif564#endif
565#if !defined(ZORBA_NO_ICU)
566 { "~BadRegexParen_3", "\"$3\": illegal character after \"(?\"" },
567#endif
561 { "~BadStreamState", "bad I/O stream state" },568 { "~BadStreamState", "bad I/O stream state" },
562 { "~BadTokenInBraces_3", "\"$3\": illegal token within { }" },569 { "~BadTokenInBraces_3", "\"$3\": illegal token within { }" },
563 { "~BadTraceStream", "trace stream not retrievable using SerializationCallback" },570 { "~BadTraceStream", "trace stream not retrievable using SerializationCallback" },
@@ -726,6 +733,9 @@
726 { "~NotDocOrElementNode", "not a document or element node" },733 { "~NotDocOrElementNode", "not a document or element node" },
727 { "~NotInStaticCtx", "not found in static context" },734 { "~NotInStaticCtx", "not found in static context" },
728 { "~NotPlainFile", "not plain file" },735 { "~NotPlainFile", "not plain file" },
736#if !defined(ZORBA_NO_ICU)
737 { "~NotSingleCharEsc_3", "\"\\\\$3\": multi-character and category escapes not permitted in character range" },
738#endif
729 { "~NotSpecified", "not specified" },739 { "~NotSpecified", "not specified" },
730 { "~OpIsSameNodeMustHaveNodes", "op:is-same-node() must have nodes as parameters" },740 { "~OpIsSameNodeMustHaveNodes", "op:is-same-node() must have nodes as parameters" },
731 { "~OpNodeAfterMustHaveNodes", "op:node-after() must have nodes as parameters" },741 { "~OpNodeAfterMustHaveNodes", "op:node-after() must have nodes as parameters" },
732742
=== modified file 'src/diagnostics/pregenerated/dict_zed_keys.h'
--- src/diagnostics/pregenerated/dict_zed_keys.h 2013-02-09 00:26:52 +0000
+++ src/diagnostics/pregenerated/dict_zed_keys.h 2013-02-26 01:37:22 +0000
@@ -129,14 +129,17 @@
129#define ZED_BadArgTypeForFn_2o34o "~BadArgTypeForFn_2o34o"129#define ZED_BadArgTypeForFn_2o34o "~BadArgTypeForFn_2o34o"
130#define ZED_BadCharAfter_34 "~BadCharAfter_34"130#define ZED_BadCharAfter_34 "~BadCharAfter_34"
131#define ZED_BadCharInBraces_3 "~BadCharInBraces_3"131#define ZED_BadCharInBraces_3 "~BadCharInBraces_3"
132#define ZED_BadEndCharInRange_34 "~BadEndCharInRange_34"
132#define ZED_BadDecDigit_3 "~BadDecDigit_3"133#define ZED_BadDecDigit_3 "~BadDecDigit_3"
133#define ZED_BadFileURIAuthority_2 "~BadFileURIAuthority_2"134#define ZED_BadFileURIAuthority_2 "~BadFileURIAuthority_2"
134#define ZED_BadHexSequence "~BadHexSequence"135#define ZED_BadHexSequence "~BadHexSequence"
135#define ZED_BadItem "~BadItem"136#define ZED_BadItem "~BadItem"
136#define ZED_BadIterator "~BadIterator"137#define ZED_BadIterator "~BadIterator"
137#define ZED_BadLibraryModule "~BadLibraryModule"138#define ZED_BadLibraryModule "~BadLibraryModule"
139#define ZED_BadPath "~BadPath"
140#define ZED_BadQuantifierHere_3 "~BadQuantifierHere_3"
138#define ZED_BadRegexEscape_3 "~BadRegexEscape_3"141#define ZED_BadRegexEscape_3 "~BadRegexEscape_3"
139#define ZED_BadPath "~BadPath"142#define ZED_BadRegexParen_3 "~BadRegexParen_3"
140#define ZED_BadStreamState "~BadStreamState"143#define ZED_BadStreamState "~BadStreamState"
141#define ZED_BadTokenInBraces_3 "~BadTokenInBraces_3"144#define ZED_BadTokenInBraces_3 "~BadTokenInBraces_3"
142#define ZED_BadTraceStream "~BadTraceStream"145#define ZED_BadTraceStream "~BadTraceStream"
@@ -230,6 +233,7 @@
230#define ZED_NoSerializationCallbackForTraceStream "~NoSerializationCallbackForTraceStream"233#define ZED_NoSerializationCallbackForTraceStream "~NoSerializationCallbackForTraceStream"
231#define ZED_NoSourceURI "~NoSourceURI"234#define ZED_NoSourceURI "~NoSourceURI"
232#define ZED_NoTreatAs_4 "~NoTreatAs_4"235#define ZED_NoTreatAs_4 "~NoTreatAs_4"
236#define ZED_NotSingleCharEsc_3 "~NotSingleCharEsc_3"
233#define ZED_NoTypeInMainModule_4 "~NoTypeInMainModule_4"237#define ZED_NoTypeInMainModule_4 "~NoTypeInMainModule_4"
234#define ZED_NoTypeInModule_45 "~NoTypeInModule_45"238#define ZED_NoTypeInModule_45 "~NoTypeInModule_45"
235#define ZED_NoURIAuthority "~NoURIAuthority"239#define ZED_NoURIAuthority "~NoURIAuthority"
236240
=== modified file 'src/util/ascii_util.cpp'
--- src/util/ascii_util.cpp 2012-11-29 05:00:43 +0000
+++ src/util/ascii_util.cpp 2013-02-26 01:37:22 +0000
@@ -40,11 +40,17 @@
40ostream& printable_char( ostream &o, char c ) {40ostream& printable_char( ostream &o, char c ) {
41 if ( ascii::is_print( c ) )41 if ( ascii::is_print( c ) )
42 o << c;42 o << c;
43 else {43 else
44 ios::fmtflags const old_flags = o.flags();44 switch ( c ) {
45 o << "#x" << uppercase << hex << (static_cast<unsigned>( c ) & 0xFF);45 case '\n': o << "\\n"; break;
46 o.flags( old_flags );46 case '\r': o << "\\r"; break;
47 }47 case '\t': o << "\\t"; break;
48 default: {
49 ios::fmtflags const old_flags = o.flags();
50 o << "#x" << uppercase << hex << (static_cast<unsigned>( c ) & 0xFF);
51 o.flags( old_flags );
52 }
53 }
48 return o;54 return o;
49}55}
5056
5157
=== modified file 'src/util/regex.cpp'
--- src/util/regex.cpp 2012-10-08 12:09:36 +0000
+++ src/util/regex.cpp 2013-02-26 01:37:22 +0000
@@ -51,17 +51,46 @@
5151
52using namespace std;52using namespace std;
5353
54#define bs_c "\\p{L}\\d.:\\p{M}-" /* \c equivalent contents */54#define bs_c "\\p{L}_\\d.:\\p{M}-" /* \c equivalent contents */
55#define bs_i "\\p{L}_:" /* \i equivalent contents */55#define bs_i "\\p{L}_:" /* \i equivalent contents */
56#define bs_W "\\p{P}\\p{Z}\\p{C}" /* \W equivalent contents */
57
58template<typename IntegralType> inline
59typename std::enable_if<ZORBA_TR1_NS::is_integral<IntegralType>::value,
60 void>::type
61dec_limit( IntegralType *i, IntegralType limit = 0 ) {
62 if ( *i > limit )
63 --*i;
64}
65
66static unsigned digits( long n ) {
67 unsigned d = 0;
68 do {
69 ++d;
70 } while ( n /= 10 );
71 return d;
72}
73
74template<class C> inline
75typename C::value_type peek( C const &c, typename C::const_iterator i ) {
76 typedef typename C::value_type value_type;
77 return ++i != c.end() ? *i : value_type();
78}
79
80template<class C> inline
81typename C::value_type peek_back( C const &c, typename C::const_iterator i ) {
82 typedef typename C::value_type value_type;
83 return i != c.begin() ? *--i : value_type();
84}
5685
57namespace zorba {86namespace zorba {
5887
59///////////////////////////////////////////////////////////////////////////////88///////////////////////////////////////////////////////////////////////////////
6089
61typedef uint32_t icu_flags_t;90typedef uint32_t icu_flags_type;
6291
63static icu_flags_t convert_xquery_flags( char const *xq_flags ) {92static icu_flags_type convert_xquery_flags( char const *xq_flags ) {
64 icu_flags_t icu_flags = 0;93 icu_flags_type icu_flags = 0;
65 if ( xq_flags ) {94 if ( xq_flags ) {
66 for ( char const *f = xq_flags; *f; ++f ) {95 for ( char const *f = xq_flags; *f; ++f ) {
67 switch ( *f ) {96 switch ( *f ) {
@@ -89,9 +118,22 @@
89 return icu_flags;118 return icu_flags;
90}119}
91120
121inline bool is_char_range_begin( zstring const &s,
122 zstring::const_iterator const &i ) {
123 return peek( s, i ) == '-' && peek( s, i + 1 ) != '[';
124}
125
126inline bool is_non_capturing_begin( zstring const &s,
127 zstring::const_iterator const &i ) {
128 return peek_back( s, i ) == '?' && peek_back( s, i - 1 ) == '(';
129}
130
131#define IS_CHAR_RANGE_BEGIN (in_char_class && is_char_range_begin( xq_re, i ))
132#define PEEK_C peek( xq_re, i )
133
92void convert_xquery_re( zstring const &xq_re, zstring *icu_re,134void convert_xquery_re( zstring const &xq_re, zstring *icu_re,
93 char const *xq_flags ) {135 char const *xq_flags ) {
94 icu_flags_t const icu_flags = convert_xquery_flags( xq_flags );136 icu_flags_type const icu_flags = convert_xquery_flags( xq_flags );
95 bool const i_flag = (icu_flags & UREGEX_CASE_INSENSITIVE) != 0;137 bool const i_flag = (icu_flags & UREGEX_CASE_INSENSITIVE) != 0;
96 bool const m_flag = (icu_flags & UREGEX_MULTILINE) != 0;138 bool const m_flag = (icu_flags & UREGEX_MULTILINE) != 0;
97 bool const q_flag = (icu_flags & UREGEX_LITERAL) != 0;139 bool const q_flag = (icu_flags & UREGEX_LITERAL) != 0;
@@ -100,32 +142,44 @@
100 icu_re->clear();142 icu_re->clear();
101 icu_re->reserve( xq_re.length() ); // approximate143 icu_re->reserve( xq_re.length() ); // approximate
102144
145 char c; // current (raw) XQuery char
146 char c_cooked; // current cooked XQuery char
147 char prev_c_cooked = 0; // previous c_cooked
148 char char_range_begin_cooked; // the 'a' in [a-b]
149
103 bool got_backslash = false;150 bool got_backslash = false;
104 bool in_char_class = false; // within [...]151 int got_quantifier = 0;
105 bool is_first_char = true; // to check ^ placement152 int in_char_class = 0; // within [...]
153 int in_char_range = 0; // within a-b within [...]
154 int is_first_char = 1; // to check ^ placement
106155
107 bool in_backref = false; // '\'[1-9][0-9]*156 bool in_backref = false; // '\'[1-9][0-9]*
108 unsigned backref_no = 0; // 1-based157 unsigned backref_no = 0; // 1-based
158
159 // capture subgroup: true = open; false = closed
160 vector<bool> cap_sub; // 0-based
109 unsigned cur_cap_sub = 0; // 1-based161 unsigned cur_cap_sub = 0; // 1-based
110 unsigned open_cap_subs = 0;162 unsigned open_cap_subs = 0;
111163
112 // capture subgroup: true = open; false = closed164 // parentheses balancing: true = is capture subgroup; false = non-capturing
113 vector<bool> cap_sub; // 0-based165 vector<bool> paren; // 0-based
166 unsigned cur_paren = 0; // 1-based
114167
115 FOR_EACH( zstring, xq_c, xq_re ) {168 FOR_EACH( zstring, i, xq_re ) {
169 c = c_cooked = *i;
116 if ( got_backslash ) {170 if ( got_backslash ) {
117 if ( x_flag && !in_char_class && ascii::is_space( *xq_c ) ) {171 if ( x_flag && !in_char_class && ascii::is_space( c ) ) {
118 //172 //
119 // XQuery 3.0 F&O 5.6.1.1: If [the 'x' flag is] present, whitespace173 // XQuery 3.0 F&O 5.6.1.1: If [the 'x' flag is] present, whitespace
120 // characters ... in the regular expression are removed prior to174 // characters ... in the regular expression are removed prior to
121 // matching with one exception: whitespace characters within character175 // matching with one exception: whitespace characters within character
122 // class expressions ... are not removed.176 // class expressions ... are not removed.
123 //177 //
124 continue;178 goto next;
125 }179 }
126 got_backslash = false;180 got_backslash = false;
127181
128 switch ( *xq_c ) {182 switch ( c ) {
129183
130 ////////// Back-References ////////////////////////////////////////////184 ////////// Back-References ////////////////////////////////////////////
131185
@@ -139,7 +193,7 @@
139 case '7':193 case '7':
140 case '8':194 case '8':
141 case '9':195 case '9':
142 backref_no = *xq_c - '0';196 backref_no = c - '0';
143 if ( !backref_no ) // \0 is illegal197 if ( !backref_no ) // \0 is illegal
144 throw INVALID_RE_EXCEPTION( xq_re, ZED( BackRef0Illegal ) );198 throw INVALID_RE_EXCEPTION( xq_re, ZED( BackRef0Illegal ) );
145 if ( in_char_class ) {199 if ( in_char_class ) {
@@ -168,41 +222,73 @@
168 case '\\':222 case '\\':
169 case ']':223 case ']':
170 case '^':224 case '^':
225 case '{':
226 case '|':
227 case '}':
228 *icu_re += '\\';
229 break;
230
231 ////////// Multi-Character & Category Escapes /////////////////////////
232
171 case 'n': // newline233 case 'n': // newline
234 *icu_re += '\\';
235 c_cooked = '\n';
236 break;
172 case 'r': // carriage return237 case 'r': // carriage return
238 *icu_re += '\\';
239 c_cooked = '\r';
240 break;
173 case 't': // tab241 case 't': // tab
174 case '{':242 *icu_re += '\\';
175 case '|':243 c_cooked = '\t';
176 case '}':244 break;
177 // no break;
178
179 ////////// Multi-Character & Category Escapes /////////////////////////
180
181 case 'd': // [0-9]245 case 'd': // [0-9]
182 case 'D': // [^\d]246 case 'D': // [^\d]
183 case 'p': // category escape247 case 'p': // category escape
184 case 'P': // [^\p]248 case 'P': // [^\p]
185 case 's': // whitespace249 case 's': // whitespace
186 case 'S': // [^\s]250 case 'S': // [^\s]
251 if ( in_char_range || IS_CHAR_RANGE_BEGIN )
252 goto not_single_char_esc;
253 *icu_re += '\\';
254 break;
187 case 'w': // word char255 case 'w': // word char
256 if ( in_char_range || IS_CHAR_RANGE_BEGIN )
257 goto not_single_char_esc;
258 //
259 // Note that we can't simply pass \w through to ICU because what it
260 // considers a "word character" is different from what XQuery does.
261 //
262 *icu_re += "[^" bs_W "]";
263 goto next;
188 case 'W': // [^\w]264 case 'W': // [^\w]
189 *icu_re += '\\';265 if ( in_char_range || IS_CHAR_RANGE_BEGIN )
190 break;266 goto not_single_char_esc;
267 *icu_re += "[" bs_W "]";
268 goto next;
191 case 'c': // NameChar269 case 'c': // NameChar
270 if ( in_char_range || IS_CHAR_RANGE_BEGIN )
271 goto not_single_char_esc;
192 *icu_re += "[" bs_c "]";272 *icu_re += "[" bs_c "]";
193 continue;273 goto next;
194 case 'C': // [^\c]274 case 'C': // [^\c]
275 if ( in_char_range || IS_CHAR_RANGE_BEGIN )
276 goto not_single_char_esc;
195 *icu_re += "[^" bs_c "]";277 *icu_re += "[^" bs_c "]";
196 continue;278 goto next;
197 case 'i': // initial NameChar279 case 'i': // initial NameChar
280 if ( in_char_range || IS_CHAR_RANGE_BEGIN )
281 goto not_single_char_esc;
198 *icu_re += "[" bs_i "]";282 *icu_re += "[" bs_i "]";
199 continue;283 goto next;
200 case 'I': // [^\i]284 case 'I': // [^\i]
285 if ( in_char_range || IS_CHAR_RANGE_BEGIN )
286 goto not_single_char_esc;
201 *icu_re += "[^" bs_i "]";287 *icu_re += "[^" bs_i "]";
202 continue;288 goto next;
203289
204 default:290 default:
205 throw INVALID_RE_EXCEPTION( xq_re, ZED( BadRegexEscape_3 ), *xq_c );291 throw INVALID_RE_EXCEPTION( xq_re, ZED( BadRegexEscape_3 ), c );
206 }292 }
207 } else {293 } else {
208 if ( in_backref ) {294 if ( in_backref ) {
@@ -214,10 +300,26 @@
214 // back-reference is preceded by NN or more unescaped opening300 // back-reference is preceded by NN or more unescaped opening
215 // parentheses.301 // parentheses.
216 //302 //
217 if ( cap_sub.size() > 9 && ascii::is_digit( *xq_c ) )303 bool prevent_multidigit_backref = false;
218 backref_no = backref_no * 10 + (*xq_c - '0');304 if ( ascii::is_digit( c ) ) {
219 else305 if ( digits( cap_sub.size() ) > digits( backref_no ) )
306 backref_no = backref_no * 10 + (c - '0');
307 else {
308 in_backref = false;
309 //
310 // Unlike XQuery, ICU always takes further digits to be part of the
311 // backreference so we have to prevent ICU from doing that. One
312 // way to do that is by enclosing said digits in a single-character
313 // character class, i.e., [N].
314 //
315 *icu_re += '[';
316 *icu_re += c;
317 *icu_re += ']';
318 prevent_multidigit_backref = true;
319 }
320 } else
220 in_backref = false;321 in_backref = false;
322
221 //323 //
222 // XQuery 3.0 F&O 5.6.1: The regular expression is invalid if a back-324 // XQuery 3.0 F&O 5.6.1: The regular expression is invalid if a back-
223 // reference refers to a subexpression that does not exist or whose325 // reference refers to a subexpression that does not exist or whose
@@ -231,85 +333,170 @@
231 throw INVALID_RE_EXCEPTION(333 throw INVALID_RE_EXCEPTION(
232 xq_re, ZED( NonClosedBackRef_3 ), backref_no334 xq_re, ZED( NonClosedBackRef_3 ), backref_no
233 );335 );
336
337 if ( prevent_multidigit_backref )
338 goto next;
234 }339 }
235 switch ( *xq_c ) {340
341 switch ( c ) {
342 case '$':
343 if ( q_flag )
344 *icu_re += '\\';
345 else if ( !m_flag && i + 1 == xq_re.end() ) {
346 //
347 // XQuery 3.0 F&O 5.6.1: By default, ... $ matches the end of the
348 // entire string. [Newlines are treated as any other character.]
349 //
350 // However, in ICU, $ always matches before any trailing newlines.
351 //
352 // To make ICU work as XQuery needs it to, substitute \z for $ when
353 // it is the last character in the regular expression (and multi-
354 // line mode is not set).
355 //
356 icu_re->append( "\\z" );
357 goto next;
358 }
359 break;
360 case '(':
361 if ( q_flag )
362 *icu_re += '\\';
363 else {
364 cur_paren = paren.size() + 1;
365 zstring::const_iterator j = i;
366 if ( ++j != xq_re.end() && *j == '?' && ++j != xq_re.end() ) {
367 //
368 // Got "(?" sequence: potentially start of "(?:", a non-capturing
369 // subgroup. ICU also allows other characters after the "(?"
370 // that XQuery does not, so we have to report those as errors.
371 //
372 if ( *j != ':' )
373 throw INVALID_RE_EXCEPTION( xq_re, ZED( BadRegexParen_3 ), *j );
374 //
375 // Start of non-capturing subgroup.
376 //
377 paren.push_back( false );
378 } else {
379 //
380 // Start of capturing subgroup.
381 //
382 paren.push_back( true );
383 ++open_cap_subs;
384 cap_sub.push_back( true );
385 cur_cap_sub = cap_sub.size();
386 is_first_char = 2;
387 }
388 }
389 break;
390 case ')':
391 if ( q_flag )
392 *icu_re += '\\';
393 else {
394 if ( !cur_paren )
395 goto unbalanced_char;
396 if ( paren[ --cur_paren ] ) {
397 if ( !open_cap_subs || !cur_cap_sub )
398 goto unbalanced_char;
399 cap_sub[ --cur_cap_sub ] = false;
400 }
401 }
402 break;
403 case ':':
404 if ( is_non_capturing_begin( xq_re, i ) ) {
405 //
406 // This ':' is part of a "(?:" sequence, i.e., a non-capturing
407 // subgroup. Therefore, the *next* character will be a "first
408 // character" for the purposes of '^'.
409 //
410 is_first_char = 2;
411 }
412 break;
413 case '*':
414 case '+':
415 case '?':
416 case '{':
417 if ( q_flag )
418 *icu_re += '\\';
419 else {
420 //
421 // ICU allows the multiple quantifiers *+, ++, and ?+, but XQuery
422 // does not so we have to check for them.
423 //
424 if ( got_quantifier && c != '?' )
425 throw INVALID_RE_EXCEPTION(
426 xq_re, ZED( BadQuantifierHere_3 ), c
427 );
428 got_quantifier = 2;
429 }
430 break;
431 case '-':
432 if ( in_char_class && !in_char_range ) {
433 char const next_c = PEEK_C;
434 if ( next_c == '[' ) {
435 //
436 // ICU uses "--" to indicate range subtraction, e.g.,
437 // XQuery [A-Z-[OI]] becomes ICU [A-Z--[OI]].
438 //
439 *icu_re += '-';
440 } else if ( prev_c_cooked != '[' && next_c != ']' ) {
441 //
442 // The '-' is neither the first or last character within a
443 // character range (i.e., a literal '-') so therefore it's
444 // indicating a character range.
445 //
446 char_range_begin_cooked = prev_c_cooked;
447 in_char_range = 2;
448 }
449 }
450 break;
451 case '.':
452 case '}':
453 if ( q_flag )
454 *icu_re += '\\';
455 break;
456 case '[':
457 if ( q_flag )
458 *icu_re += '\\';
459 else {
460 if ( in_char_class && prev_c_cooked != '-' )
461 goto unescaped_char;
462 ++in_char_class;
463 is_first_char = 2;
464 }
465 break;
236 case '\\':466 case '\\':
237 got_backslash = true;467 got_backslash = true;
238 continue;468 if ( in_char_range )
239 case '$':469 ++in_char_range;
240 if ( q_flag )470 goto next;
241 *icu_re += '\\';
242 else if ( !m_flag ) {
243 zstring::const_iterator const temp = xq_c + 1;
244 if ( temp == xq_re.end() ) {
245 //
246 // XQuery 3.0 F&O 5.6.1: By default, ... $ matches the end of the
247 // entire string. [Newlines are treated as any other character.]
248 //
249 // However, in ICU, $ always matches before any trailing
250 // newlines.
251 //
252 // To make ICU work as XQuery needs it to, substitute \z for $
253 // when it is the last character in the regular expression (and
254 // multi-line mode is not set).
255 //
256 icu_re->append( "\\z" );
257 continue;
258 }
259 }
260 break;
261 case '(':
262 if ( q_flag )
263 *icu_re += '\\';
264 else {
265 ++open_cap_subs;
266 cap_sub.push_back( true );
267 cur_cap_sub = cap_sub.size();
268 is_first_char = true;
269 goto append;
270 }
271 break;
272 case ')':
273 if ( q_flag )
274 *icu_re += '\\';
275 else {
276 if ( !open_cap_subs || cur_cap_sub == 0 )
277 throw INVALID_RE_EXCEPTION( xq_re, ZED( UnbalancedChar_3 ), ')' );
278 cap_sub[ --cur_cap_sub ] = false;
279 }
280 break;
281 case '[':
282 if ( q_flag )
283 *icu_re += '\\';
284 else {
285 in_char_class = true;
286 goto append;
287 }
288 break;
289 case ']':471 case ']':
290 if ( q_flag )472 if ( q_flag )
291 *icu_re += '\\';473 *icu_re += '\\';
474 else {
475 if ( !in_char_class )
476 goto unbalanced_char;
477 --in_char_class;
478 in_char_range = 0;
479 }
480 break;
481 case '^':
482 if ( q_flag )
483 *icu_re += '\\';
484 else if ( !is_first_char ) {
485 if ( in_char_class )
486 goto unescaped_char;
487 *icu_re += '\\';
488 }
489 break;
490 case '|':
491 if ( q_flag )
492 *icu_re += '\\';
292 else493 else
293 in_char_class = false;494 is_first_char = 2;
294 break;
295 case '^':
296 if ( q_flag )
297 *icu_re += '\\';
298 else if ( !is_first_char && !in_char_class )
299 throw INVALID_RE_EXCEPTION( xq_re, ZED( UnescapedChar_3 ), *xq_c );
300 break;
301 case '|':
302 if ( q_flag )
303 *icu_re += '\\';
304 else {
305 is_first_char = true;
306 goto append;
307 }
308 break;495 break;
309 default:496 default:
310 if ( x_flag && ascii::is_space( *xq_c ) ) {497 if ( x_flag && ascii::is_space( c ) ) {
311 if ( !in_char_class )498 if ( !in_char_class )
312 continue;499 goto next;
313 //500 //
314 // This is similar to the above case for removing whitespace except501 // This is similar to the above case for removing whitespace except
315 // ICU removes *all* whitespace (even within character classes)502 // ICU removes *all* whitespace (even within character classes)
@@ -319,11 +506,28 @@
319 }506 }
320 } // switch507 } // switch
321 } // else508 } // else
322 is_first_char = false;509
323append:510 if ( in_char_range == 1 && c_cooked < char_range_begin_cooked )
324 *icu_re += *xq_c;511 throw INVALID_RE_EXCEPTION(
512 xq_re, ZED( BadEndCharInRange_34 ),
513 ascii::printable_char( c_cooked ),
514 char_range_begin_cooked
515 );
516
517 *icu_re += c;
518
519next:
520 dec_limit( &in_char_range );
521 dec_limit( &got_quantifier );
522 dec_limit( &is_first_char );
523 prev_c_cooked = c_cooked;
325 } // FOR_EACH524 } // FOR_EACH
326525
526 if ( got_backslash )
527 throw INVALID_RE_EXCEPTION( xq_re, ZED( TrailingChar_3 ), '\\' );
528 if ( in_char_class )
529 throw INVALID_RE_EXCEPTION( xq_re, ZED( UnbalancedChar_3 ), '[' );
530
327 if ( !q_flag ) {531 if ( !q_flag ) {
328 if ( i_flag ) {532 if ( i_flag ) {
329 //533 //
@@ -332,12 +536,13 @@
332 // only.536 // only.
333 //537 //
334 // However, ICU lower-cases everything for the 'i' flag; hence we have to538 // However, ICU lower-cases everything for the 'i' flag; hence we have to
335 // turn off the 'i' flag for just the \p{Lu}.539 // turn off the 'i' flag for the \p{Lu} and \P{Lu}.
336 //540 //
337 // Note that the "6" and "12" below are correct since "\\" represents a541 // Note that the "6" and "12" below are correct since "\\" represents a
338 // single '\'.542 // single '\'.
339 //543 //
340 ascii::replace_all( *icu_re, "\\p{Lu}", 6, "(?-i:\\p{Lu})", 12 );544 ascii::replace_all( *icu_re, "\\p{Lu}", 6, "(?-i:\\p{Lu})", 12 );
545 ascii::replace_all( *icu_re, "\\P{Lu}", 6, "(?-i:\\P{Lu})", 12 );
341 }546 }
342547
343 //548 //
@@ -352,7 +557,16 @@
352 // Note that the "5" below is correct since "\\" represents a single '\'.557 // Note that the "5" below is correct since "\\" represents a single '\'.
353 //558 //
354 ascii::replace_all( *icu_re, "\\p{Is", 5, "\\p{In", 5 );559 ascii::replace_all( *icu_re, "\\p{Is", 5, "\\p{In", 5 );
560 ascii::replace_all( *icu_re, "\\P{Is", 5, "\\P{In", 5 );
355 } // q_flag561 } // q_flag
562 return;
563
564not_single_char_esc:
565 throw INVALID_RE_EXCEPTION( xq_re, ZED( NotSingleCharEsc_3 ), c );
566unbalanced_char:
567 throw INVALID_RE_EXCEPTION( xq_re, ZED( UnbalancedChar_3 ), c );
568unescaped_char:
569 throw INVALID_RE_EXCEPTION( xq_re, ZED( UnescapedChar_3 ), c );
356}570}
357571
358///////////////////////////////////////////////////////////////////////////////572///////////////////////////////////////////////////////////////////////////////
@@ -362,7 +576,8 @@
362576
363void regex::compile( string const &u_pattern, char const *flags,577void regex::compile( string const &u_pattern, char const *flags,
364 char const *pattern ) {578 char const *pattern ) {
365 icu_flags_t const icu_flags = convert_xquery_flags( flags ) & ~UREGEX_LITERAL;579 icu_flags_type const icu_flags =
580 convert_xquery_flags( flags ) & ~UREGEX_LITERAL;
366 delete matcher_;581 delete matcher_;
367 UErrorCode status = U_ZERO_ERROR;582 UErrorCode status = U_ZERO_ERROR;
368 matcher_ = new RegexMatcher( u_pattern, icu_flags, status );583 matcher_ = new RegexMatcher( u_pattern, icu_flags, status );
@@ -375,9 +590,7 @@
375 icu_error_key = ZED_PREFIX;590 icu_error_key = ZED_PREFIX;
376 icu_error_key += u_errorName( status );591 icu_error_key += u_errorName( status );
377 }592 }
378 throw XQUERY_EXCEPTION(593 throw INVALID_RE_EXCEPTION( pattern, icu_error_key );
379 err::FORX0002, ERROR_PARAMS( pattern, icu_error_key )
380 );
381 }594 }
382}595}
383596
384597
=== modified file 'test/fots/CMakeLists.txt'
--- test/fots/CMakeLists.txt 2013-02-25 16:18:58 +0000
+++ test/fots/CMakeLists.txt 2013-02-26 01:37:22 +0000
@@ -344,112 +344,15 @@
344EXPECTED_FOTS_FAILURE (fn-iri-to-uri fn-iri-to-uri-18A 0)344EXPECTED_FOTS_FAILURE (fn-iri-to-uri fn-iri-to-uri-18A 0)
345EXPECTED_FOTS_FAILURE (fn-last last-11 0)345EXPECTED_FOTS_FAILURE (fn-last last-11 0)
346EXPECTED_FOTS_FAILURE (fn-last last-24 0)346EXPECTED_FOTS_FAILURE (fn-last last-24 0)
347EXPECTED_FOTS_FAILURE (fn-matches caselessmatch10 0)347EXPECTED_FOTS_FAILURE (fn-matches cbcl-matches-038 1131304)
348EXPECTED_FOTS_FAILURE (fn-matches caselessmatch11 0)348EXPECTED_FOTS_FAILURE (fn-matches.re re00056 1131984)
349EXPECTED_FOTS_FAILURE (fn-matches cbcl-matches-038 0)349EXPECTED_FOTS_FAILURE (fn-matches.re re00086 1131984)
350EXPECTED_FOTS_FAILURE (fn-matches cbcl-matches-039 0)350EXPECTED_FOTS_FAILURE (fn-matches.re re00288 1131985)
351EXPECTED_FOTS_FAILURE (fn-matches.re re00041 0)351EXPECTED_FOTS_FAILURE (fn-matches.re re00370 1131985)
352EXPECTED_FOTS_FAILURE (fn-matches.re re00055 0)352EXPECTED_FOTS_FAILURE (fn-matches.re re00480 1131985)
353EXPECTED_FOTS_FAILURE (fn-matches.re re00058 0)353EXPECTED_FOTS_FAILURE (fn-matches.re re00732 1131988)
354EXPECTED_FOTS_FAILURE (fn-matches.re re00059 0)354EXPECTED_FOTS_FAILURE (fn-matches.re re00737 1131990)
355EXPECTED_FOTS_FAILURE (fn-matches.re re00060 0)355EXPECTED_FOTS_FAILURE (fn-matches.re re00987 1131313)
356EXPECTED_FOTS_FAILURE (fn-matches.re re00063 0)
357EXPECTED_FOTS_FAILURE (fn-matches.re re00071 0)
358EXPECTED_FOTS_FAILURE (fn-matches.re re00072 0)
359EXPECTED_FOTS_FAILURE (fn-matches.re re00288 0)
360EXPECTED_FOTS_FAILURE (fn-matches.re re00370 0)
361EXPECTED_FOTS_FAILURE (fn-matches.re re00480 0)
362EXPECTED_FOTS_FAILURE (fn-matches.re re00498 0)
363EXPECTED_FOTS_FAILURE (fn-matches.re re00501 0)
364EXPECTED_FOTS_FAILURE (fn-matches.re re00506 0)
365EXPECTED_FOTS_FAILURE (fn-matches.re re00589 0)
366EXPECTED_FOTS_FAILURE (fn-matches.re re00590 0)
367EXPECTED_FOTS_FAILURE (fn-matches.re re00613 0)
368EXPECTED_FOTS_FAILURE (fn-matches.re re00680 0)
369EXPECTED_FOTS_FAILURE (fn-matches.re re00693 0)
370EXPECTED_FOTS_FAILURE (fn-matches.re re00694 0)
371EXPECTED_FOTS_FAILURE (fn-matches.re re00695 0)
372EXPECTED_FOTS_FAILURE (fn-matches.re re00696 0)
373EXPECTED_FOTS_FAILURE (fn-matches.re re00697 0)
374EXPECTED_FOTS_FAILURE (fn-matches.re re00698 0)
375EXPECTED_FOTS_FAILURE (fn-matches.re re00702 0)
376EXPECTED_FOTS_FAILURE (fn-matches.re re00703 0)
377EXPECTED_FOTS_FAILURE (fn-matches.re re00704 0)
378EXPECTED_FOTS_FAILURE (fn-matches.re re00705 0)
379EXPECTED_FOTS_FAILURE (fn-matches.re re00706 0)
380EXPECTED_FOTS_FAILURE (fn-matches.re re00707 0)
381EXPECTED_FOTS_FAILURE (fn-matches.re re00708 0)
382EXPECTED_FOTS_FAILURE (fn-matches.re re00709 0)
383EXPECTED_FOTS_FAILURE (fn-matches.re re00710 0)
384EXPECTED_FOTS_FAILURE (fn-matches.re re00711 0)
385EXPECTED_FOTS_FAILURE (fn-matches.re re00712 0)
386EXPECTED_FOTS_FAILURE (fn-matches.re re00713 0)
387EXPECTED_FOTS_FAILURE (fn-matches.re re00717 0)
388EXPECTED_FOTS_FAILURE (fn-matches.re re00718 0)
389EXPECTED_FOTS_FAILURE (fn-matches.re re00719 0)
390EXPECTED_FOTS_FAILURE (fn-matches.re re00720 0)
391EXPECTED_FOTS_FAILURE (fn-matches.re re00721 0)
392EXPECTED_FOTS_FAILURE (fn-matches.re re00722 0)
393EXPECTED_FOTS_FAILURE (fn-matches.re re00723 0)
394EXPECTED_FOTS_FAILURE (fn-matches.re re00730 0)
395EXPECTED_FOTS_FAILURE (fn-matches.re re00732 0)
396EXPECTED_FOTS_FAILURE (fn-matches.re re00736 0)
397EXPECTED_FOTS_FAILURE (fn-matches.re re00739 0)
398EXPECTED_FOTS_FAILURE (fn-matches.re re00740 0)
399EXPECTED_FOTS_FAILURE (fn-matches.re re00744 0)
400EXPECTED_FOTS_FAILURE (fn-matches.re re00745 0)
401EXPECTED_FOTS_FAILURE (fn-matches.re re00746 0)
402EXPECTED_FOTS_FAILURE (fn-matches.re re00749 0)
403EXPECTED_FOTS_FAILURE (fn-matches.re re00750 0)
404EXPECTED_FOTS_FAILURE (fn-matches.re re00754 0)
405EXPECTED_FOTS_FAILURE (fn-matches.re re00763 0)
406EXPECTED_FOTS_FAILURE (fn-matches.re re00767 0)
407EXPECTED_FOTS_FAILURE (fn-matches.re re00768 0)
408EXPECTED_FOTS_FAILURE (fn-matches.re re00769 0)
409EXPECTED_FOTS_FAILURE (fn-matches.re re00770 0)
410EXPECTED_FOTS_FAILURE (fn-matches.re re00771 0)
411EXPECTED_FOTS_FAILURE (fn-matches.re re00779 0)
412EXPECTED_FOTS_FAILURE (fn-matches.re re00780 0)
413EXPECTED_FOTS_FAILURE (fn-matches.re re00795 0)
414EXPECTED_FOTS_FAILURE (fn-matches.re re00804 0)
415EXPECTED_FOTS_FAILURE (fn-matches.re re00805 0)
416EXPECTED_FOTS_FAILURE (fn-matches.re re00806 0)
417EXPECTED_FOTS_FAILURE (fn-matches.re re00814 0)
418EXPECTED_FOTS_FAILURE (fn-matches.re re00867 0)
419EXPECTED_FOTS_FAILURE (fn-matches.re re00868 0)
420EXPECTED_FOTS_FAILURE (fn-matches.re re00869 0)
421EXPECTED_FOTS_FAILURE (fn-matches.re re00870 0)
422EXPECTED_FOTS_FAILURE (fn-matches.re re00871 0)
423EXPECTED_FOTS_FAILURE (fn-matches.re re00872 0)
424EXPECTED_FOTS_FAILURE (fn-matches.re re00873 0)
425EXPECTED_FOTS_FAILURE (fn-matches.re re00874 0)
426EXPECTED_FOTS_FAILURE (fn-matches.re re00875 0)
427EXPECTED_FOTS_FAILURE (fn-matches.re re00876 0)
428EXPECTED_FOTS_FAILURE (fn-matches.re re00881 0)
429EXPECTED_FOTS_FAILURE (fn-matches.re re00882 0)
430EXPECTED_FOTS_FAILURE (fn-matches.re re00890 0)
431EXPECTED_FOTS_FAILURE (fn-matches.re re00891 0)
432EXPECTED_FOTS_FAILURE (fn-matches.re re00905 0)
433EXPECTED_FOTS_FAILURE (fn-matches.re re00912 0)
434EXPECTED_FOTS_FAILURE (fn-matches.re re00913 0)
435EXPECTED_FOTS_FAILURE (fn-matches.re re00914 0)
436EXPECTED_FOTS_FAILURE (fn-matches.re re00919 0)
437EXPECTED_FOTS_FAILURE (fn-matches.re re00939 0)
438EXPECTED_FOTS_FAILURE (fn-matches.re re00940 0)
439EXPECTED_FOTS_FAILURE (fn-matches.re re00941 0)
440EXPECTED_FOTS_FAILURE (fn-matches.re re00957 0)
441EXPECTED_FOTS_FAILURE (fn-matches.re re00970 0)
442EXPECTED_FOTS_FAILURE (fn-matches.re re00977 0)
443EXPECTED_FOTS_FAILURE (fn-matches.re re00978 0)
444EXPECTED_FOTS_FAILURE (fn-matches.re re00982 0)
445EXPECTED_FOTS_FAILURE (fn-matches.re re00983 0)
446EXPECTED_FOTS_FAILURE (fn-matches.re re00984 0)
447EXPECTED_FOTS_FAILURE (fn-matches.re re00987 0)
448EXPECTED_FOTS_FAILURE (fn-matches.re re00988 0)
449EXPECTED_FOTS_FAILURE (fn-matches.re re00989 0)
450EXPECTED_FOTS_FAILURE (fn-matches.re re00994 0)
451EXPECTED_FOTS_FAILURE (fn-matches.re re00998 0)
452EXPECTED_FOTS_FAILURE (fn-matches.re re00999 0)
453EXPECTED_FOTS_FAILURE (fn-nilled fn-nilled-33 0)356EXPECTED_FOTS_FAILURE (fn-nilled fn-nilled-33 0)
454EXPECTED_FOTS_FAILURE (fn-nilled fn-nilled-35 0)357EXPECTED_FOTS_FAILURE (fn-nilled fn-nilled-35 0)
455EXPECTED_FOTS_FAILURE (fn-nilled fn-nilled-37 0)358EXPECTED_FOTS_FAILURE (fn-nilled fn-nilled-37 0)
456359
=== added file 'test/rbkt/ExpQueryResults/zorba/string/Regex/regex_m54.xml.res'
--- test/rbkt/ExpQueryResults/zorba/string/Regex/regex_m54.xml.res 1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/string/Regex/regex_m54.xml.res 2013-02-26 01:37:22 +0000
@@ -0,0 +1,1 @@
1false
02
=== added file 'test/rbkt/ExpQueryResults/zorba/string/Regex/regex_m55.xml.res'
--- test/rbkt/ExpQueryResults/zorba/string/Regex/regex_m55.xml.res 1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/string/Regex/regex_m55.xml.res 2013-02-26 01:37:22 +0000
@@ -0,0 +1,1 @@
1false
02
=== modified file 'test/rbkt/Queries/CMakeLists.txt'
--- test/rbkt/Queries/CMakeLists.txt 2013-02-12 08:27:39 +0000
+++ test/rbkt/Queries/CMakeLists.txt 2013-02-26 01:37:22 +0000
@@ -549,15 +549,13 @@
549EXPECTED_FAILURE(test/rbkt/zorba/http-client/post/post3_binary_element 3391756)549EXPECTED_FAILURE(test/rbkt/zorba/http-client/post/post3_binary_element 3391756)
550IF(NOT ZORBA_NO_ICU)550IF(NOT ZORBA_NO_ICU)
551 IF ( ${ICU_VERSION} VERSION_LESS 4.0.0 )551 IF ( ${ICU_VERSION} VERSION_LESS 4.0.0 )
552 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_m11 866874)
552 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_m40 866874)553 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_m40 866874)
553 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_m41 866874)554 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_m41 866874)
554 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_err17 1023168)
555 ELSE ( ${ICU_VERSION} VERSION_LESS 4.0.0 )555 ELSE ( ${ICU_VERSION} VERSION_LESS 4.0.0 )
556 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_err10 994610)556 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_err10 994610)
557 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_err15 866874)557 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_err15 866874)
558 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_err16 1023168)
559 ENDIF ( ${ICU_VERSION} VERSION_LESS 4.0.0 )558 ENDIF ( ${ICU_VERSION} VERSION_LESS 4.0.0 )
560 EXPECTED_FAILURE(test/rbkt/zorba/string/Regex/regex_m11 866874)
561ENDIF(NOT ZORBA_NO_ICU)559ENDIF(NOT ZORBA_NO_ICU)
562560
563IF(ZORBA_NO_ICU)561IF(ZORBA_NO_ICU)
564562
=== removed file 'test/rbkt/Queries/zorba/string/Regex/regex_err25.spec'
--- test/rbkt/Queries/zorba/string/Regex/regex_err25.spec 2011-10-13 15:47:39 +0000
+++ test/rbkt/Queries/zorba/string/Regex/regex_err25.spec 1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
1Error: http://www.w3.org/2005/xqt-errors:FORX0002
20
=== removed file 'test/rbkt/Queries/zorba/string/Regex/regex_err7.spec'
--- test/rbkt/Queries/zorba/string/Regex/regex_err7.spec 2011-10-13 15:47:39 +0000
+++ test/rbkt/Queries/zorba/string/Regex/regex_err7.spec 1970-01-01 00:00:00 +0000
@@ -1,1 +0,0 @@
1Error: http://www.w3.org/2005/xqt-errors:FORX0002
20
=== renamed file 'test/rbkt/Queries/zorba/string/Regex/regex_err7.xq' => 'test/rbkt/Queries/zorba/string/Regex/regex_m54.xq'
=== renamed file 'test/rbkt/Queries/zorba/string/Regex/regex_err25.xq' => 'test/rbkt/Queries/zorba/string/Regex/regex_m55.xq'

Subscribers

People subscribed via source and target branches