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

Proposed by Ghislain Fourny on 2013-04-19
Status: Merged
Approved by: Ghislain Fourny on 2013-04-23
Approved revision: 11398
Merged at revision: 11399
Proposed branch: lp:~zorba-coders/zorba/bug-1123165
Merge into: lp:zorba
Diff against target: 490 lines (+312/-43)
8 files modified
include/zorba/pregenerated/diagnostic_list.h (+8/-0)
modules/w3c/pregenerated/xqt-errors.xq (+35/-0)
src/compiler/translator/translator.cpp (+203/-3)
src/context/static_context.cpp (+13/-3)
src/diagnostics/diagnostic_en.xml (+35/-4)
src/diagnostics/pregenerated/diagnostic_list.cpp (+12/-0)
src/diagnostics/pregenerated/dict_en.cpp (+4/-0)
test/fots/CMakeLists.txt (+2/-33)
To merge this branch: bzr merge lp:~zorba-coders/zorba/bug-1123165
Reviewer Review Type Date Requested Status
Ghislain Fourny Approve on 2013-04-23
Matthias Brantner Approve on 2013-04-23
Nicolae Brinza 2013-04-19 Approve on 2013-04-23
Sorin Marian Nasoi 2013-04-19 Approve on 2013-04-19
Review via email: mp+159822@code.launchpad.net

Commit message

Fixing bug 1123165 (prohibit/require feature tests).

Description of the change

Fixing bug 1123165 (prohibit/require feature tests).

To post a comment you must log in.
review: Approve
Zorba Build Bot (zorba-buildbot) wrote :

The attempt to merge lp:~zorba-coders/zorba/bug-1123165 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-1123165-2013-04-19T14-11-47.953Z 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

- The fix for dynamic_function_invocation seems to be orthogonal. Why is this fixed in this merge proposal? I couldn't find a test to cover this behavior.

- The function check_xquery_feature_options is too long. Could this be simplified and/or split into multiple functions? It feels like most of the implementation should go into the translator and not into the static context.

- The style of the error messages is not consistent with the other error messages. They should be changed as follows:
  XQST0120 "$1": feature not supported
  XQST0128 "$1": unable to disable a supported feature
  XQST0126 impossible to activate all extension features

review: Needs Fixing
Nicolae Brinza (nbrinza) wrote :

Ghislain, could you also please remove the fix that you submitted for scanner.l problem? Your proposal works, but on linux the GCC gives off a warning for that code. I have a proposal that fixes the issue in another branch, which Matthias will approve and merge soon.

Nicolae Brinza (nbrinza) wrote :

I too agree that it should be moved to the translator. That's where all the similar code currently is. Other than this and the scanner issue, it looks good for me.

Nicolae Brinza (nbrinza) :
review: Approve
Ghislain Fourny (gislenius) wrote :

- The fix for dynamic_function_invocation seems to be orthogonal. Why is this fixed in this merge proposal? I couldn't find a test to cover this behavior.

It does fix some of the W3C tests:

      for $f in () return $f(1, ?)

Raised an error in zorba because it was considered an object lookup. But it looks like valid XQuery to me?

Ghislain Fourny (gislenius) wrote :

- The function check_xquery_feature_options is too long. Could this be simplified and/or split into multiple functions?

DONE

Ghislain Fourny (gislenius) wrote :

- It feels like most of the implementation should go into the translator and not into the static context.

DONE

Ghislain Fourny (gislenius) wrote :

- The style of the error messages is not consistent with the other error messages. They should be changed as follows:
  XQST0120 "$1": feature not supported
  XQST0128 "$1": unable to disable a supported feature
  XQST0126 impossible to activate all extension features

DONE

Ghislain Fourny (gislenius) wrote :

I think I addressed all comments.

There are three expected failures left:

EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-higher-order-function-5-s 0)
EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-higher-order-function-10-s 0)

-> This is the for $f in () return $f(1, ?) issue, which needs to be solved separately.

EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-all-optional-features-5-s 0)

-> This is because the new package with the W3C-FOTS fix is not there yet.

Ghislain Fourny (gislenius) wrote :

I opened the bug for the first two expected failures here: bug 1171860.

Ghislain Fourny (gislenius) wrote :

EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-all-optional-features-5-s 0)

-> I removed it because the test suite got updated in the trunk.

Ghislain Fourny (gislenius) wrote :

Disapproving to allow running tests without merging.

review: Disapprove
Zorba Build Bot (zorba-buildbot) wrote :

Validation queue job bug-1123165-2013-04-23T13-54-43.634Z is finished. The final status was:

All tests succeeded!

Zorba Build Bot (zorba-buildbot) wrote :

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

Nicolae Brinza (nbrinza) :
review: Approve

> - The fix for dynamic_function_invocation seems to be orthogonal. Why is this
> fixed in this merge proposal? I couldn't find a test to cover this behavior.
>
> It does fix some of the W3C tests:
>
> for $f in () return $f(1, ?)
>
> Raised an error in zorba because it was considered an object lookup. But it
> looks like valid XQuery to me?
This is one of the cases that we will have to live with. It's a conflict between
JSONiq and HOF. We were trying to push the W3C to make the dynamic function invocation
a map (i.e. $f could be () or a sequence of function items). However, the w3c didn't
want to go this way.

awesome

review: Approve
review: Approve
Ghislain Fourny (gislenius) wrote :

This is one of the cases that we will have to live with. It's a conflict between
JSONiq and HOF. We were trying to push the W3C to make the dynamic function invocation
a map (i.e. $f could be () or a sequence of function items). However, the w3c didn't
want to go this way.

-> In this case, $f is not the empty object - it is just a virtual single item (as is always the case for a for variable, without "allowing empty") that it will never get bound to.

We do not have to consider $f an object lookup in this case, right? I have the more general feeling that there might be something wrong in type inference regarding for loops on empty sequences.

Nicolae Brinza (nbrinza) wrote :

> We do not have to consider $f an object lookup in this case, right? I have the more general feeling that there might be something wrong in type inference regarding for loops on empty sequences.

Since there is a partial application "?", it definitely cannot be an object lookup.

Zorba Build Bot (zorba-buildbot) wrote :

Validation queue job bug-1123165-2013-04-23T15-14-42.012Z 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
1=== modified file 'include/zorba/pregenerated/diagnostic_list.h'
2--- include/zorba/pregenerated/diagnostic_list.h 2013-04-04 04:14:46 +0000
3+++ include/zorba/pregenerated/diagnostic_list.h 2013-04-23 14:00:36 +0000
4@@ -162,8 +162,16 @@
5
6 extern ZORBA_DLL_PUBLIC XQueryErrorCode XQST0114;
7
8+extern ZORBA_DLL_PUBLIC XQueryErrorCode XQST0120;
9+
10 extern ZORBA_DLL_PUBLIC XQueryErrorCode XQST0123;
11
12+extern ZORBA_DLL_PUBLIC XQueryErrorCode XQST0126;
13+
14+extern ZORBA_DLL_PUBLIC XQueryErrorCode XQST0127;
15+
16+extern ZORBA_DLL_PUBLIC XQueryErrorCode XQST0128;
17+
18 extern ZORBA_DLL_PUBLIC XQueryErrorCode XPDY0002;
19
20 extern ZORBA_DLL_PUBLIC XQueryErrorCode XPDY0050;
21
22=== modified file 'modules/w3c/pregenerated/xqt-errors.xq'
23--- modules/w3c/pregenerated/xqt-errors.xq 2013-04-04 04:14:46 +0000
24+++ modules/w3c/pregenerated/xqt-errors.xq 2013-04-23 14:00:36 +0000
25@@ -692,6 +692,15 @@
26
27 (:~
28 :
29+ : It is a static error if a feature required by require-feature is not
30+ : supported by the implementation.
31+ :
32+ : @see http://www.w3.org/2005/xqt-errors
33+:)
34+declare variable $err:XQST0120 as xs:QName := fn:QName($err:NS, "err:XQST0120");
35+
36+(:~
37+ :
38 : It is a static error if the name of a feature in require-feature is not
39 : recognized by the implementation.
40 :
41@@ -701,6 +710,32 @@
42
43 (:~
44 :
45+ : It is a static error if all-extensions appears in a require-feature option declaration.
46+ :
47+ : @see http://www.w3.org/2005/xqt-errors
48+:)
49+declare variable $err:XQST0126 as xs:QName := fn:QName($err:NS, "err:XQST0126");
50+
51+(:~
52+ :
53+ : It is a static error if a given feature is both required and prohibited, directly or indirectly, in a module.
54+ :
55+ : @see http://www.w3.org/2005/xqt-errors
56+:)
57+declare variable $err:XQST0127 as xs:QName := fn:QName($err:NS, "err:XQST0127");
58+
59+(:~
60+ :
61+ : It is a static error if a feature name that an implementation supports appears
62+ : in a prohibit-feature option declaration, and the implementation is unable to
63+ : disable the feature.
64+ :
65+ : @see http://www.w3.org/2005/xqt-errors
66+:)
67+declare variable $err:XQST0128 as xs:QName := fn:QName($err:NS, "err:XQST0128");
68+
69+(:~
70+ :
71 : It is a dynamic error if evaluation of an expression relies on some part
72 : of the dynamic context that has not been assigned a value.
73 :
74
75=== modified file 'src/compiler/translator/translator.cpp'
76--- src/compiler/translator/translator.cpp 2013-04-18 08:47:43 +0000
77+++ src/compiler/translator/translator.cpp 2013-04-23 14:00:36 +0000
78@@ -15,11 +15,12 @@
79 */
80 #include "stdafx.h"
81
82+#include <bitset>
83+#include <iterator>
84+#include <map>
85 #include <sstream>
86-#include <iterator>
87 #include <stack>
88-#include <map>
89-#include <bitset>
90+#include <vector>
91
92 #include <zorba/config.h>
93 #include <zorba/diagnostic_list.h>
94@@ -3856,9 +3857,208 @@
95 bind_fn(f, numParams, loc);
96 }
97
98+ check_xquery_feature_options(loc);
99+
100 return no_state;
101 }
102
103+store::Item_t parse_and_expand_qname(
104+ const zstring& value,
105+ const char* default_ns,
106+ const QueryLoc& loc) const
107+{
108+ zstring lPrefix;
109+ zstring lLocalName;
110+
111+ zstring::size_type n = value.rfind(':');
112+
113+ if ( n == zstring::npos )
114+ {
115+ lLocalName = value;
116+ }
117+ else
118+ {
119+ lPrefix = value.substr( 0, n );
120+ lLocalName = value.substr( n+1 );
121+ }
122+ store::Item_t lQName;
123+ theSctx->expand_qname( lQName, default_ns, lPrefix, lLocalName, loc );
124+
125+ return lQName;
126+}
127+
128+void parse_feature_list(
129+ const zstring& anOptionName,
130+ std::map<zstring, bool>* aFeatures,
131+ bool aRequired,
132+ const QueryLoc& loc)
133+{
134+ // Looking up feature options.
135+ zstring lFeatureList;
136+ store::Item_t lFeatureQName = parse_and_expand_qname(
137+ anOptionName,
138+ static_context::XQUERY_NS,
139+ loc);
140+ theSctx->lookup_option(lFeatureQName, lFeatureList);
141+
142+ if (aFeatures == NULL || lFeatureList.empty())
143+ {
144+ return;
145+ }
146+ size_t lPositionLeft = 0;
147+ size_t lPositionRight = lFeatureList.find(" ", lPositionLeft);
148+ bool lLastTime = lPositionRight == zstring::npos;
149+ while (lPositionRight != zstring::npos || lLastTime)
150+ {
151+ zstring lFeature = lFeatureList.substr(
152+ lPositionLeft,
153+ lPositionRight - lPositionLeft);
154+ store::Item_t lFeatureQName = parse_and_expand_qname(
155+ lFeature,
156+ static_context::XQUERY_NS,
157+ loc);
158+ // Requiring a non-recognized feature.
159+ if (aRequired && lFeatureQName->getNamespace() != static_context::XQUERY_NS)
160+ {
161+ RAISE_ERROR(err::XQST0123, loc, ERROR_PARAMS(lFeature));
162+ }
163+ zstring lFeatureName = lFeatureQName->getLocalName();
164+ if (aRequired && !is_recognized_feature(lFeatureName))
165+ {
166+ RAISE_ERROR(err::XQST0123, loc, ERROR_PARAMS(lFeature));
167+ }
168+
169+ // Only adding to the feature matrix if recognized.
170+ if (is_recognized_feature(lFeatureName))
171+ {
172+ // Error in case of conflicting flags.
173+ std::map<zstring, bool>::iterator lIt = aFeatures->find(lFeatureName);
174+ if (lIt != aFeatures->end() && lIt->second != aRequired)
175+ {
176+ RAISE_ERROR(err::XQST0127, loc, ERROR_PARAMS(lFeature));
177+ }
178+ (*aFeatures)[lFeatureName] = aRequired;
179+ }
180+ if (lLastTime)
181+ {
182+ break;
183+ }
184+ lPositionLeft = lPositionRight + 1;
185+ lPositionRight = lFeatureList.find(" ", lPositionLeft);
186+ if (lPositionRight == zstring::npos)
187+ {
188+ lLastTime = true;
189+ }
190+ }
191+}
192+
193+bool is_recognized_feature(const zstring& aFeatureName)
194+{
195+ return aFeatureName == "static-typing" ||
196+ aFeatureName == "module" ||
197+ aFeatureName == "higher-order-function" ||
198+ aFeatureName == "schema-aware" ||
199+ aFeatureName == "all-extensions" ||
200+ aFeatureName == "all-optional-features";
201+}
202+
203+bool is_required_feature(
204+ const std::map<zstring, bool>& aFeatureMatrix,
205+ const zstring& aFeatureName
206+)
207+{
208+ std::map<zstring, bool>::const_iterator lIt =
209+ aFeatureMatrix.find(aFeatureName);
210+ if (lIt == aFeatureMatrix.end())
211+ {
212+ return false;
213+ }
214+ return lIt->second;
215+}
216+
217+bool is_prohibited_feature(
218+ const std::map<zstring, bool>& aFeatureMatrix,
219+ const zstring& aFeatureName
220+)
221+{
222+ std::map<zstring, bool>::const_iterator lIt =
223+ aFeatureMatrix.find(aFeatureName);
224+ if (lIt == aFeatureMatrix.end())
225+ {
226+ return false;
227+ }
228+ return !lIt->second;
229+}
230+
231+void check_xquery_feature_options(const QueryLoc& loc)
232+{
233+ // Constructing feature vectors.
234+ std::map<zstring, bool> lFeatures;
235+ parse_feature_list("require-feature", &lFeatures, true, loc);
236+ parse_feature_list("prohibit-feature", &lFeatures, false, loc);
237+
238+ std::vector<zstring> lSupportedFeatures;
239+ lSupportedFeatures.push_back("module");
240+ lSupportedFeatures.push_back("higher-order-function");
241+ lSupportedFeatures.push_back("schema-aware");
242+ std::vector<zstring> lNonSupportedFeatures;
243+ lNonSupportedFeatures.push_back("static-typing");
244+
245+ // Non supported features cannot be required.
246+ for (std::vector<zstring>::iterator lIt = lNonSupportedFeatures.begin();
247+ lIt != lNonSupportedFeatures.end();
248+ ++lIt)
249+ {
250+ if (is_required_feature(lFeatures, *lIt))
251+ {
252+ RAISE_ERROR(err::XQST0120, loc, ERROR_PARAMS(*lIt));
253+ }
254+ }
255+ // It is not possible to require all extensions.
256+ if (is_required_feature(lFeatures, "all-extensions"))
257+ {
258+ RAISE_ERROR(err::XQST0126, loc, ERROR_PARAMS("all-extensions"));
259+ }
260+ // All optional features can only be required if all unsupported features are
261+ // prohibited.
262+ if (is_required_feature(lFeatures, "all-optional-features"))
263+ {
264+ for (std::vector<zstring>::iterator lIt = lNonSupportedFeatures.begin();
265+ lIt != lNonSupportedFeatures.end();
266+ ++lIt)
267+ {
268+ if (!is_prohibited_feature(lFeatures, *lIt))
269+ {
270+ RAISE_ERROR(err::XQST0120, loc, ERROR_PARAMS(*lIt));
271+ }
272+ }
273+ }
274+ // Supported features cannot be prohibited.
275+ for (std::vector<zstring>::iterator lIt = lSupportedFeatures.begin();
276+ lIt != lSupportedFeatures.end();
277+ ++lIt)
278+ {
279+ if (is_prohibited_feature(lFeatures, *lIt))
280+ {
281+ RAISE_ERROR(err::XQST0128, loc, ERROR_PARAMS(*lIt));
282+ }
283+ }
284+ // All optional features can only be prohibited if all supported features
285+ // are required.
286+ if (is_prohibited_feature(lFeatures, "all-optional-features"))
287+ {
288+ for (std::vector<zstring>::iterator lIt = lSupportedFeatures.begin();
289+ lIt != lSupportedFeatures.end();
290+ ++lIt)
291+ {
292+ if (!is_required_feature(lFeatures, *lIt))
293+ {
294+ RAISE_ERROR(err::XQST0128, loc, ERROR_PARAMS(*lIt));
295+ }
296+ }
297+ }
298+}
299+
300
301 void end_visit(const VFO_DeclList& v, void* /*visit_state*/)
302 {
303
304=== modified file 'src/context/static_context.cpp'
305--- src/context/static_context.cpp 2013-04-16 07:43:15 +0000
306+++ src/context/static_context.cpp 2013-04-23 14:00:36 +0000
307@@ -3505,7 +3505,6 @@
308 // //
309 /////////////////////////////////////////////////////////////////////////////////
310
311-
312 /***************************************************************************//**
313
314 ********************************************************************************/
315@@ -3524,12 +3523,23 @@
316 store::Item* qname2 = option.theName.getp();
317
318 zstring lNamespace = qname2->getNamespace();
319+ zstring lLocalName = qname2->getLocalName();
320
321+ // If option namespace is the XQuery namespace.
322+ if ( lNamespace == XQUERY_NS)
323+ {
324+ OptionMap::iterator lIt = theOptionMap->find(qname2);
325+ if (lIt != theOptionMap->end())
326+ {
327+ std::ostringstream lOss;
328+ lOss << lIt.getValue().theValue << " " << option.theValue;
329+ option.theValue = lOss.str();
330+ }
331+ }
332+
333 // If option namespace starts with zorba options namespace
334 if ( lNamespace.find(ZORBA_OPTIONS_NS) == 0 )
335 {
336- zstring lLocalName = qname2->getLocalName();
337-
338 if (lNamespace == ZORBA_OPTION_FEATURE_NS &&
339 (lLocalName == "enable" || lLocalName == "disable"))
340 {
341
342=== modified file 'src/diagnostics/diagnostic_en.xml'
343--- src/diagnostics/diagnostic_en.xml 2013-04-10 02:24:08 +0000
344+++ src/diagnostics/diagnostic_en.xml 2013-04-23 14:00:36 +0000
345@@ -830,15 +830,46 @@
346 </comment>
347 <value>"$1": duplicate decimal format property</value>
348 </diagnostic>
349-
350+
351+ <diagnostic code="XQST0120">
352+ <comment>
353+ It is a static error if a feature required by require-feature is not
354+ supported by the implementation.
355+ </comment>
356+ <value>"$1": feature not supported</value>
357+ </diagnostic>
358+
359 <diagnostic code="XQST0123">
360 <comment>
361- It is a static error if the name of a feature in require-feature is not
362- recognized by the implementation.
363+ It is a static error if the name of a feature in require-feature is not
364+ recognized by the implementation.
365 </comment>
366 <value>$1</value>
367 </diagnostic>
368-
369+
370+ <diagnostic code="XQST0126">
371+ <comment>
372+ It is a static error if all-extensions appears in a require-feature option declaration.
373+ </comment>
374+ <value>impossible to require all extension features</value>
375+ </diagnostic>
376+
377+ <diagnostic code="XQST0127">
378+ <comment>
379+ It is a static error if a given feature is both required and prohibited, directly or indirectly, in a module.
380+ </comment>
381+ <value>$1 : impossible to require and prohibit at the same time</value>
382+ </diagnostic>
383+
384+ <diagnostic code="XQST0128">
385+ <comment>
386+ It is a static error if a feature name that an implementation supports appears
387+ in a prohibit-feature option declaration, and the implementation is unable to
388+ disable the feature.
389+ </comment>
390+ <value>"$1": unable to disable a supported feature</value>
391+ </diagnostic>
392+
393 <diagnostic code="XPDY0002">
394 <comment>
395 It is a dynamic error if evaluation of an expression relies on some part
396
397=== modified file 'src/diagnostics/pregenerated/diagnostic_list.cpp'
398--- src/diagnostics/pregenerated/diagnostic_list.cpp 2013-04-04 04:14:46 +0000
399+++ src/diagnostics/pregenerated/diagnostic_list.cpp 2013-04-23 14:00:36 +0000
400@@ -226,9 +226,21 @@
401 XQueryErrorCode XQST0114( "XQST0114" );
402
403
404+XQueryErrorCode XQST0120( "XQST0120" );
405+
406+
407 XQueryErrorCode XQST0123( "XQST0123" );
408
409
410+XQueryErrorCode XQST0126( "XQST0126" );
411+
412+
413+XQueryErrorCode XQST0127( "XQST0127" );
414+
415+
416+XQueryErrorCode XQST0128( "XQST0128" );
417+
418+
419 XQueryErrorCode XPDY0002( "XPDY0002" );
420
421
422
423=== modified file 'src/diagnostics/pregenerated/dict_en.cpp'
424--- src/diagnostics/pregenerated/dict_en.cpp 2013-04-10 02:24:08 +0000
425+++ src/diagnostics/pregenerated/dict_en.cpp 2013-04-23 14:00:36 +0000
426@@ -262,7 +262,11 @@
427 { "XQST0106", "$1: multiple annotations with $2 names" },
428 { "XQST0111", "$1" },
429 { "XQST0114", "\"$1\": duplicate decimal format property" },
430+ { "XQST0120", "\"$1\": feature not supported" },
431 { "XQST0123", "$1" },
432+ { "XQST0126", "impossible to require all extension features" },
433+ { "XQST0127", "$1 : impossible to require and prohibit at the same time" },
434+ { "XQST0128", "\"$1\": unable to disable a supported feature" },
435 { "XQTY0024", "element constructor content sequence must not have an attribute node following a non-attribute node" },
436 { "XQTY0030", "validate argument must be exactly one document or element node" },
437 { "XQTY0086", "typed value of copied element or attribute node is namespace-sensitive when construction mode is preserve and copy-namespaces mode is no-preserve" },
438
439=== modified file 'test/fots/CMakeLists.txt'
440--- test/fots/CMakeLists.txt 2013-04-23 02:39:22 +0000
441+++ test/fots/CMakeLists.txt 2013-04-23 14:00:36 +0000
442@@ -378,30 +378,8 @@
443 EXPECTED_FOTS_FAILURE (prod-OrderByClause orderBy50 0)
444 EXPECTED_FOTS_FAILURE (prod-OrderByClause orderBy51 0)
445 EXPECTED_FOTS_FAILURE (prod-OrderByClause orderBy59 0)
446-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-static-typing-1-ns 0)
447-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-higher-order-function-9-ns 0)
448-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-schema-aware-1-s 0)
449-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-schema-aware-2-s 0)
450-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-higher-order-function-1-ns 0)
451-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-higher-order-function-2-ns 0)
452-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-higher-order-function-3-ns 0)
453-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-higher-order-function-4-ns 0)
454-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature unknown-feature 0)
455-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature well-formed-feature-1 0)
456-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature well-formed-feature-2 0)
457-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature well-formed-feature-3 0)
458-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature well-formed-feature-4 0)
459-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-prohibit-1 0)
460-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-prohibit-2 0)
461-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-feature-list-2-s 0)
462-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-feature-list-3-s 0)
463-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-prohibit-4 0)
464-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-prohibit-5 0)
465-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-all-extensions-1 0)
466-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-all-optional-features-3-ns3 0)
467-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-all-optional-features-2-ns2 0)
468-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-all-optional-features-1 0)
469-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-all-optional-features-7-s 0)
470+EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-higher-order-function-5-s 1171860)
471+EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-higher-order-function-10-s 1171860)
472 EXPECTED_FOTS_FAILURE (prod-SchemaImport qischema031 0)
473 EXPECTED_FOTS_FAILURE (prod-SchemaImport substitution-001 0)
474 EXPECTED_FOTS_FAILURE (prod-SchemaImport substitution-002 0)
475@@ -462,15 +440,6 @@
476 EXPECTED_FOTS_FAILURE (misc-HigherOrderFunctions xqhof12 0)
477 EXPECTED_FOTS_FAILURE (prod-NamedFunctionRef function-literal-062 0)
478 EXPECTED_FOTS_FAILURE (prod-NamedFunctionRef function-literal-494 0)
479-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-higher-order-function-5-s 0)
480-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature require-higher-order-function-10-s 0)
481-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-higher-order-function-1-s 0)
482-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-higher-order-function-2-s 0)
483-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-higher-order-function-3-s 0)
484-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature prohibit-higher-order-function-4-s 0)
485-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature separate-modules-5-s 0)
486-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature separate-modules-6-s 0)
487-EXPECTED_FOTS_FAILURE (prod-RequireProhibitFeature separate-modules-7-s 0)
488 EXPECTED_FOTS_FAILURE (prod-SchemaImport substitution-030 0)
489 EXPECTED_FOTS_FAILURE (prod-SchemaImport substitution-031 0)
490 EXPECTED_FOTS_FAILURE (prod-SchemaImport substitution-032 0)

Subscribers

People subscribed via source and target branches