← Back to team overview

zorba-coders team mailing list archive

[Merge] lp:~zorba-coders/zorba/markos-scratch into lp:zorba

 

Markos Zaharioudakis has proposed merging lp:~zorba-coders/zorba/markos-scratch into lp:zorba.

Commit message:
some error cleanup in translator.cpp

Requested reviews:
  Markos Zaharioudakis (markos-za)

For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/170800

some error cleanup in translator.cpp
-- 
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/170800
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'include/zorba/pregenerated/diagnostic_list.h'
--- include/zorba/pregenerated/diagnostic_list.h	2013-06-15 02:57:08 +0000
+++ include/zorba/pregenerated/diagnostic_list.h	2013-06-21 12:18:31 +0000
@@ -168,6 +168,8 @@
 
 extern ZORBA_DLL_PUBLIC XQueryErrorCode XQST0120;
 
+extern ZORBA_DLL_PUBLIC XQueryErrorCode XQST0122;
+
 extern ZORBA_DLL_PUBLIC XQueryErrorCode XQST0123;
 
 extern ZORBA_DLL_PUBLIC XQueryErrorCode XQST0126;

=== modified file 'modules/w3c/pregenerated/xqt-errors.xq'
--- modules/w3c/pregenerated/xqt-errors.xq	2013-06-19 14:19:40 +0000
+++ modules/w3c/pregenerated/xqt-errors.xq	2013-06-21 12:18:31 +0000
@@ -720,6 +720,15 @@
 
 (:~
  :
+ : It is a static error if the name of a feature in require-feature or
+ : prohibit-feature is not in the lexical space of QName.
+ : 
+ : @see http://www.w3.org/2005/xqt-errors
+:)
+declare variable $err:XQST0122 as xs:QName := fn:QName($err:NS, "err:XQST0122");
+
+(:~
+ :
  : It is a static error if the name of a feature in require-feature is not
  : recognized by the implementation.
  : 

=== modified file 'src/compiler/translator/translator.cpp'
--- src/compiler/translator/translator.cpp	2013-06-20 09:52:25 +0000
+++ src/compiler/translator/translator.cpp	2013-06-21 12:18:31 +0000
@@ -1182,6 +1182,36 @@
 
 
 /*******************************************************************************
+
+********************************************************************************/
+store::Item_t parse_and_expand_qname(
+    const zstring& value,
+    const char* default_ns,
+    const QueryLoc& loc) const
+{
+  zstring prefix;
+  zstring localName;
+
+  zstring::size_type n = value.rfind(':');
+
+  if (n == zstring::npos)
+  {
+    localName = value;
+  }
+  else
+  {
+    prefix = value.substr( 0, n );
+    localName = value.substr( n+1 );
+  }
+
+  store::Item_t lQName;
+  theSctx->expand_qname(lQName, default_ns, prefix, localName, loc );
+
+  return lQName;
+}
+
+
+/*******************************************************************************
   Create a var_expr for a variable with a given qname item, kind, and type
 ********************************************************************************/
 var_expr* create_var(
@@ -1306,7 +1336,7 @@
 
 
 /*******************************************************************************
-  Lookup a context variable, i.e., the var (if any) representing the context
+  Lookup a focus variable, i.e., the var (if any) representing the context
   item, or the context position, or the context size. The variable is identified
   by its qname.
 
@@ -1321,17 +1351,7 @@
 
   if (var == NULL)
   {
-    if (theIsInIndexDomain)
-    {
-      RAISE_ERROR(zerr::ZDST0032_INDEX_REFERENCES_CTX_ITEM, loc,
-      ERROR_PARAMS(theIndexDecl->getName()->getStringValue()));
-    }
-    else
-    {
-      zstring varName = static_context::var_name(qname);
-      RAISE_ERROR(err::XPDY0002, loc, 
-      ERROR_PARAMS(ZED(XPDY0002_ContextUndeclared_2), varName));
-    }
+    ZORBA_ASSERT(false);
   }
 
   return var->getVar();
@@ -1459,36 +1479,6 @@
   csize n = foExpr->num_args();
 
   const function* func = foExpr->get_func();
-  FunctionConsts::FunctionKind fkind = func->getKind();
-
-  if (fkind == FunctionConsts::FN_ZORBA_XQDDF_PROBE_INDEX_RANGE_VALUE_N ||
-      fkind == FunctionConsts::FN_ZORBA_XQDDF_PROBE_INDEX_RANGE_VALUE_SKIP_N)
-  {
-    csize nStarterParams =
-    (fkind == FunctionConsts::FN_ZORBA_XQDDF_PROBE_INDEX_RANGE_VALUE_N  ? 1 : 2);
-
-    if  (n < (6 + nStarterParams) || (n - nStarterParams) % 6 != 0)
-    {
-      const store::Item* qname = NULL;
-
-      if (n > 0)
-        qname = foExpr->get_arg(0)->getQName();
-
-      zstring lMsgPart;
-      ztd::to_string(nStarterParams, &lMsgPart);
-      lMsgPart += " + multiple of 6";
-      if (qname != NULL)
-      {
-        RAISE_ERROR(zerr::ZDDY0025_INDEX_WRONG_NUMBER_OF_PROBE_ARGS, loc,
-        ERROR_PARAMS(qname->getStringValue(), "index", n, lMsgPart));
-      }
-      else
-      {
-        RAISE_ERROR(zerr::ZDDY0025_INDEX_WRONG_NUMBER_OF_PROBE_ARGS, loc,
-        ERROR_PARAMS("anonymous", "index", n, lMsgPart));
-      }
-    }
-  }
 
   for (csize i = 0; i < n; ++i)
   {
@@ -2220,8 +2210,7 @@
       theSctx->bind_ns(pfx, targetNS, loc);
   }
 
-  zstring xsdTNS = zstring(XML_SCHEMA_NS);
-  if (xsdTNS.compare(targetNS) == 0)
+  if (targetNS == XML_SCHEMA_NS)
   {
     // Xerces doesn't like importing XMLSchema.xsd schema4schema, so we skip it
     // see Xerces-C++ bug: https://issues.apache.org/jira/browse/XERCESC-1980
@@ -2231,7 +2220,6 @@
   store::Item_t targetNSItem = NULL;
   zstring tmp = targetNS;
   ITEM_FACTORY->createAnyURI(targetNSItem, tmp);
-  ZORBA_ASSERT(targetNSItem != NULL);
 
   // Form up a vector of candidate URIs: any location hints, followed
   // by the imported URI itself.
@@ -2239,7 +2227,7 @@
 
   if (atlist != NULL)
   {
-    for (ulong i = 0; i < atlist->size(); ++i)
+    for (csize i = 0; i < atlist->size(); ++i)
     {
       // If current uri is relative, turn it to an absolute one, using the
       // base uri from the sctx.
@@ -2255,12 +2243,14 @@
     std::auto_ptr<internal::Resource> lSchema;
     internal::StreamResource* lStream = NULL;
     zstring lErrorMessage;
+
     for (std::vector<zstring>::iterator lIter = lCandidates.begin();
          lIter != lCandidates.end();
          ++lIter)
     {
       lSchema = theSctx->resolve_uri(*lIter, internal::EntityData::SCHEMA,
                                      lErrorMessage);
+
       lStream = dynamic_cast<internal::StreamResource*>(lSchema.get());
       if (lStream != NULL)
       {
@@ -2271,7 +2261,7 @@
     if (lStream == NULL)
     {
       RAISE_ERROR(err::XQST0059, loc,
-      ERROR_PARAMS(ZED(XQST0059_SpecificationMessage), lNsURI, "", lErrorMessage));
+      ERROR_PARAMS(ZED(XQST0059_UnknownSchema_23o), lNsURI, lErrorMessage));
     }
 
     // If we got this far, we have a valid StreamResource.
@@ -2339,7 +2329,8 @@
       // but since the chances are small that more than 1 restart is needed,
       // it probably compensates to the performance degradation by allocating
       // another vector
-      if (lIter->first == lPrefixStr) {
+      if (lIter->first == lPrefixStr)
+      {
         lPrefixStr += "_";
         lIter = lNsBindings.begin();
       }
@@ -2371,13 +2362,11 @@
   import_schema_auto_prefix(lLoc, aSchemaURI.c_str(), NULL);
 
   store::Item_t qname;
-  return theExprManager->create_validate_expr(theRootSctx,
-                                              theUDF,
-                                              lLoc,
-                                              ParseConstants::val_strict,
-                                              qname,
-                                              aExpr,
-                                              theSctx->get_typemanager());
+  return CREATE(validate)(theRootSctx, theUDF, lLoc,
+                          ParseConstants::val_strict,
+                          qname,
+                          aExpr,
+                          theSctx->get_typemanager());
 }
 
 
@@ -2486,13 +2475,16 @@
 {
   TRACE_VISIT();
   
-  // The CompilerCB->theCommonLanguageEnabled needs to be checked here as well because the 
-  // options declarations have not been translated yet, so the static context feature might not 
-  // be set.
-  if (theSctx->is_feature_set(feature::common_language) || theCCB->theCommonLanguageEnabled)
+  // The CompilerCB->theCommonLanguageEnabled needs to be checked here as well
+  // because the options declarations have not been translated yet, so the static
+  // context feature might not be set.
+  if (theSctx->is_feature_set(feature::common_language) ||
+      theCCB->theCommonLanguageEnabled)
   {    
     theCCB->theXQueryDiagnostics->add_warning(
-        NEW_XQUERY_WARNING(zwarn::ZWST0009_COMMON_LANGUAGE_WARNING, WARN_PARAMS(ZED(ZWST0009_VERSION_DECL)), WARN_LOC(loc)));
+    NEW_XQUERY_WARNING(zwarn::ZWST0009_COMMON_LANGUAGE_WARNING,
+                       WARN_PARAMS(ZED(ZWST0009_VERSION_DECL)),
+                       WARN_LOC(loc)));
   }
 
   if (v.get_language_kind() == VersionDecl::jsoniq)
@@ -2551,7 +2543,7 @@
   if (version == StaticContextConsts::xquery_version_unknown)
   {
     RAISE_ERROR(err::XQST0031, loc,
-    ERROR_PARAMS(versionStr, ZED(BadXQueryVersion)));
+    ERROR_PARAMS(ZED(XQST0031_BadXQueryVersion_2), versionStr));
   }
 
   theSctx->set_xquery_version(version);
@@ -3366,7 +3358,9 @@
     theRootSctx->get_candidate_uris(targetNS,
                                     internal::EntityData::MODULE,
                                     candidateURIs);
+
     theRootSctx->add_imported_builtin_module(targetNS);
+
 #ifdef NDEBUG
     // We cannot skip the math or the sctx introspection modules because they
     // contain some non-external functions as well.
@@ -3472,8 +3466,10 @@
     if (theModulesInfo->mod_ns_map.get(compURI, importedNS))
     {
       if (importedNS != targetNS)
+      {
         RAISE_ERROR(err::XQST0059, loc,
-        ERROR_PARAMS(ZED(XQST0059_SpecificationMessage), targetNS, compURI));
+        ERROR_PARAMS(ZED(XQST0059_WrongModule_234), targetNS, compURI, importedNS));
+      }
 
       bool found = theModulesInfo->mod_sctx_map.get(compURI, importedSctx);
       ZORBA_ASSERT(found);
@@ -3489,7 +3485,7 @@
       // Resolve the URI. Again, note the use of versioned_uri() here,
       // rather than using compURI directly, because we want the version
       // fragment to be passed to the mappers.
-      zstring lErrorMessage;
+      zstring errorMsg;
       std::auto_ptr<internal::Resource> resource;
       internal::StreamResource* streamResource = NULL;
 
@@ -3497,7 +3493,7 @@
       {
         resource = theSctx->resolve_uri(compModVer.versioned_uri(),
                                         internal::EntityData::MODULE,
-                                        lErrorMessage);
+                                        errorMsg);
 
         streamResource = dynamic_cast<internal::StreamResource*>(resource.get());
       }
@@ -3515,8 +3511,7 @@
       else
       {
         RAISE_ERROR(err::XQST0059, loc,
-        ERROR_PARAMS(ZED(XQST0059_SpecificationMessage),
-                     targetNS, compURI, lErrorMessage));
+        ERROR_PARAMS(ZED(XQST0059_UnknownModule_234o), targetNS, compURI, errorMsg));
       }
 
       // Get the parent of the query root sctx. This is the user-specified sctx
@@ -3573,7 +3568,7 @@
       if (mod_ast == NULL)
       {
         RAISE_ERROR(err::XQST0059, loc,
-        ERROR_PARAMS(ZED(XQST0059_SpecificationMessage), targetNS, compURI));
+        ERROR_PARAMS(ZED(XQST0059_BadModule_23), targetNS, compURI));
       }
 
       importedNS = mod_ast->get_decl()->get_target_namespace().str();
@@ -3584,7 +3579,7 @@
       if (importedNS != targetNS)
       {
         RAISE_ERROR(err::XQST0059, loc,
-        ERROR_PARAMS(ZED(XQST0059_SpecificationMessage), targetNS, compURI));
+        ERROR_PARAMS(ZED(XQST0059_WrongModule_234), targetNS, compURI, importedNS));
       }
 
       // translate the imported module
@@ -3731,6 +3726,8 @@
 
   TypeManager* tm = CTX_TM;
 
+  bool haveXQueryOptions = false;
+
   // Translation of the VFO list must be done in two passes because of mutually
   // recursive functions and also because the defining expr of a declared var
   // may reference a function that is declared after the var. So, here's the
@@ -3753,17 +3750,16 @@
     {
       store::Item_t qnameItem;
       zstring value = opt_decl->get_val().str();
-
       rchandle<QName> lQName = opt_decl->get_qname();
+
       if (theSctx->xquery_version() >= StaticContextConsts::xquery_version_3_0 &&
           lQName->get_namespace().empty() && lQName->get_prefix().empty())
       {
-        theSctx->expand_qname(
-           qnameItem,
-           static_context::XQUERY_NS,
-           "",
-           lQName->get_localname(),
-           lQName->get_location());
+        theSctx->expand_qname(qnameItem,
+                              static_context::XQUERY_NS,
+                              "",
+                              lQName->get_localname(),
+                              lQName->get_location());
       }
       else
       {
@@ -3775,12 +3771,17 @@
         }
       }
 
-      if (qnameItem->getNamespace() == static_context::XQUERY_NS &&
-          qnameItem->getLocalName() != "require-feature" &&
-          qnameItem->getLocalName() != "prohibit-feature")
+      if (qnameItem->getNamespace() == static_context::XQUERY_NS)
       {
-        RAISE_ERROR(err::XQST0123, loc,
-        ERROR_PARAMS(ZED(UnrecognizedXQueryOption), qnameItem->getLocalName()));
+        haveXQueryOptions = true;
+
+        if (qnameItem->getLocalName() != "require-feature" &&
+            qnameItem->getLocalName() != "prohibit-feature")
+        {
+          RAISE_ERROR(err::XQST0123, loc,
+          ERROR_PARAMS(ZED(XQST0123_UnrecognizedXQueryOption_2),
+                       qnameItem->getLocalName()));
+        }
       }
 
       if (qnameItem->getNamespace() == static_context::ZORBA_OPTION_FEATURE_NS &&
@@ -3933,7 +3934,7 @@
         ns == static_context::XQUERY_MATH_FN_NS)
     {
       RAISE_ERROR(err::XQST0045, func_decl->get_location(),
-      ERROR_PARAMS(qnameItem->getLocalName(), ZED(FUNCTION), ns));
+      ERROR_PARAMS(ZED(XQST0045_FUNCTION_23), qnameItem->getStringValue(), ns));
     }
 
     if (! theModuleNamespace.empty() && ns != theModuleNamespace)
@@ -4101,7 +4102,8 @@
     bind_fn(f, numParams, loc);
   }
 
-  check_xquery_feature_options(loc);
+  if (haveXQueryOptions)
+    check_xquery_feature_options(loc);
 }
 
 
@@ -4184,44 +4186,49 @@
 
 
 void parse_feature_list(
-    const zstring& anOptionName,
+    const zstring& optionQName,
     std::map<zstring, bool>* aFeatures,
     bool aRequired,
     const QueryLoc& loc)
 {
   // Looking up feature options.
   zstring lFeatureList;
-  store::Item_t lFeatureQName = parse_and_expand_qname(
-      anOptionName,
-      static_context::XQUERY_NS,
-      loc);
-  theSctx->lookup_option(lFeatureQName, lFeatureList);
+
+  store::Item_t optionQNameItem =
+  parse_and_expand_qname(optionQName, static_context::XQUERY_NS, loc);
+
+  theSctx->lookup_option(optionQNameItem, lFeatureList);
   
   if (aFeatures == NULL || lFeatureList.empty())
   {
     return;
   }
+
   size_t lPositionLeft = 0;
   size_t lPositionRight = lFeatureList.find(" ", lPositionLeft);
   bool lLastTime = lPositionRight == zstring::npos;
+
   while (lPositionRight != zstring::npos || lLastTime)
   {
-    zstring lFeature = lFeatureList.substr(
-        lPositionLeft,
-        lPositionRight - lPositionLeft);
-    store::Item_t lFeatureQName = parse_and_expand_qname(
-        lFeature,
-        static_context::XQUERY_NS,
-        loc);
+    zstring lFeature =
+    lFeatureList.substr(lPositionLeft, lPositionRight - lPositionLeft);
+
+    store::Item_t lFeatureQName = 
+    parse_and_expand_qname(lFeature, static_context::XQUERY_NS, loc);
+
     // Requiring a non-recognized feature.
     if (aRequired && lFeatureQName->getNamespace() != static_context::XQUERY_NS)
     {
-      RAISE_ERROR(err::XQST0123, loc, ERROR_PARAMS(lFeature));
+      RAISE_ERROR(err::XQST0123, loc,
+      ERROR_PARAMS(ZED(XQST0123_UnrecognizedRequiredFeature_2), lFeature));
     }
+
     zstring lFeatureName = lFeatureQName->getLocalName();
+
     if (aRequired && !is_recognized_feature(lFeatureName))
     {
-      RAISE_ERROR(err::XQST0123, loc, ERROR_PARAMS(lFeature));
+      RAISE_ERROR(err::XQST0123, loc,
+      ERROR_PARAMS(ZED(XQST0123_UnrecognizedRequiredFeature_2), lFeature));
     }
 
     // Only adding to the feature matrix if recognized.
@@ -4249,32 +4256,6 @@
 }
 
 
-store::Item_t parse_and_expand_qname(
-    const zstring& value,
-    const char* default_ns,
-    const QueryLoc& loc) const
-{
-  zstring lPrefix;
-  zstring lLocalName;
-
-  zstring::size_type n = value.rfind(':');
-
-  if ( n == zstring::npos )
-  {
-    lLocalName = value;
-  }
-  else
-  {
-    lPrefix = value.substr( 0, n );
-    lLocalName = value.substr( n+1 );
-  }
-  store::Item_t lQName;
-  theSctx->expand_qname( lQName, default_ns, lPrefix, lLocalName, loc );
-
-  return lQName;
-}
-
-
 bool is_recognized_feature(const zstring& aFeatureName)
 {
   return aFeatureName == "static-typing" ||
@@ -4315,6 +4296,32 @@
 
 
 /*******************************************************************************
+  OptionDecl ::= DECLARE_OPTION  QNAME  STRING_LITERAL
+********************************************************************************/
+void* begin_visit(const OptionDecl& v)
+{
+  TRACE_VISIT();
+
+  // Actual binding of options was already done at VFO_DeclList time; here we
+  // take actions based on certain specific options.
+
+  // TODO probably we should have some kind of option-callback mechanism,
+  // rather than processing all built-in Zorba options here
+  //store::Item_t qnameItem;
+  //zstring value = v.get_val().str();
+
+  //expand_no_default_qname(qnameItem, v.get_qname(), loc);
+
+  return no_state;
+}
+
+void end_visit(const OptionDecl& v, void* /*visit_state*/)
+{
+  TRACE_VISIT_OUT();
+}
+
+
+/*******************************************************************************
 
   AnnotatedDecl ::= "declare" Annotation* (VarDecl | FunctionDecl)
 
@@ -4864,7 +4871,9 @@
     if (AnnotationInternal::lookup(expandedQName) == AnnotationInternal::zann_end)
     {
       RAISE_ERROR(err::XQST0045, loc,
-      ERROR_PARAMS(expandedQName->getLocalName(), ZED(ANNOTATION), annotNS));
+      ERROR_PARAMS(ZED(XQST0045_ANNOTATION_23),
+                   expandedQName->getStringValue(),
+                   annotNS));
     }
 
     //recognised = true;
@@ -4903,32 +4912,6 @@
 
 
 /*******************************************************************************
-  OptionDecl ::= DECLARE_OPTION  QNAME  STRING_LITERAL
-********************************************************************************/
-void* begin_visit(const OptionDecl& v)
-{
-  TRACE_VISIT();
-
-  // Actual binding of options was already done at VFO_DeclList time; here we
-  // take actions based on certain specific options.
-
-  // TODO probably we should have some kind of option-callback mechanism,
-  // rather than processing all built-in Zorba options here
-  //store::Item_t qnameItem;
-  //zstring value = v.get_val().str();
-
-  //expand_no_default_qname(qnameItem, v.get_qname(), loc);
-
-  return no_state;
-}
-
-void end_visit(const OptionDecl& v, void* /*visit_state*/)
-{
-  TRACE_VISIT_OUT();
-}
-
-
-/*******************************************************************************
   [*] CollectionDecl ::= "declare" Annotation* "collection" QName
                          ("as" CollectionTypeDecl)?
 

=== modified file 'src/context/static_context.cpp'
--- src/context/static_context.cpp	2013-06-18 23:53:59 +0000
+++ src/context/static_context.cpp	2013-06-21 12:18:31 +0000
@@ -3528,6 +3528,8 @@
     OptionMap::iterator lIt = theOptionMap->find(qname2);
     if (lIt != theOptionMap->end())
     {
+      // if there was already an earlier declarationof the same option, append
+      // the value of the current declaration to the value of the earlier decl.
       std::ostringstream lOss;
       lOss << lIt.getValue().theValue << " " << option.theValue;
       option.theValue = lOss.str();
@@ -3535,7 +3537,7 @@
   }
   
   // If option namespace starts with zorba options namespace
-  if ( lNamespace.find(ZORBA_OPTIONS_NS) == 0 )
+  else if ( lNamespace.find(ZORBA_OPTIONS_NS) == 0 )
   {
     if (lNamespace == ZORBA_OPTION_FEATURE_NS &&
         (lLocalName == "enable" || lLocalName == "disable"))

=== modified file 'src/diagnostics/diagnostic_en.xml'
--- src/diagnostics/diagnostic_en.xml	2013-06-20 12:00:37 +0000
+++ src/diagnostics/diagnostic_en.xml	2013-06-21 12:18:31 +0000
@@ -253,7 +253,7 @@
        prefix that cannot be expanded into a namespace URI by using the
        statically known namespaces.
       </comment>
-      <value>"$1": can not expand namespace prefix to URI</value>
+      <value>"$1": can not expand prefix of lexical QName to namespace URI</value>
     </diagnostic>
 
     <diagnostic code="XPST0083">
@@ -434,7 +434,11 @@
        It is a static error if the version number specified in a version
        declaration is not supported by the implementation.
       </comment>
-      <value>"$1": $2</value>
+      <value>$1</value>
+
+      <entry key="BadXQueryVersion_2">
+        <value>"$2": unsupported XQuery version</value>
+      </entry>
     </diagnostic>
 
     <diagnostic code="XQST0032">
@@ -558,7 +562,16 @@
        <code>http://www.w3.org/2001/XMLSchema-instance</code>,
        <code>http://www.w3.org/2005/xpath-functions</code>.
       </comment>
-      <value>"$1": $2 declared in reserved namespace${ 3}</value>
+      <value>$1</value>
+
+      <entry key="FUNCTION_23">
+        <value>"$2": function name in reserved namespace "$3"</value>
+      </entry>
+      
+      <entry key="ANNOTATION_23">
+        <value>"$2": annotation name in reserved namespace "$3"</value>
+      </entry>
+
     </diagnostic>
 
     <diagnostic code="XQST0046">
@@ -586,7 +599,7 @@
        It is a static error if a function or variable declared in a library
        module is not in the target namespace of the library module.
       </comment>
-      <value>"$1": not in library namespace</value>
+      <value>"$1": QName not in library namespace</value>
     </diagnostic>
 
     <diagnostic code="XQST0049">
@@ -633,7 +646,7 @@
         It is a static error if multiple schema imports specify the same target
         namespace.
       </comment>
-      <value>duplicate import of schema with target namespace $1</value>
+      <value>duplicate import of schema with target namespace "$1"</value>
     </diagnostic>
 
     <diagnostic code="XQST0059">
@@ -643,9 +656,23 @@
         target namespace.
       </comment>
       <value>$1</value>
-      <entry key="SpecificationMessage">
-        <value>"$2": target namespace not found for schema/module${ "3"}${: 4}</value>
-      </entry>
+
+      <entry key="UnknownSchema_23o">
+        <value>no schema found for target namespace "$2"${ : 3}</value>
+      </entry>
+
+      <entry key="UnknownModule_234o">
+        <value>module "$2" not found at location "$3"${ : 4}</value>
+      </entry>
+
+      <entry key="BadModule_23">
+        <value>module "$2" at location "$3" is not library module</value>
+      </entry>
+
+      <entry key="WrongModule_234">
+        <value>attempt to import module "$2" at location "$3" actually imports module "$4"</value>
+      </entry>
+
       <entry key="XercesMessage">
         <value>$2,$3: error in schema${ with System ID "4"}${ with Public ID "5"}${: 6}</value>
       </entry>
@@ -656,7 +683,7 @@
        It is a static error if the name of a function in a function declaration
        is not in a namespace (expanded QName has a null namespace URI).
       </comment>
-      <value>"$1": function name has a null namespace URI</value>
+      <value>"$1": function name is in no namespace</value>
     </diagnostic>
 
     <diagnostic code="XQST0065">
@@ -936,12 +963,29 @@
       <value>"$1": feature not supported</value>
     </diagnostic>
     
+    <diagnostic code="XQST0122">
+      <comment>
+        It is a static error if the name of a feature in require-feature or
+        prohibit-feature is not in the lexical space of QName.
+      </comment>
+      <value>$1</value>
+    </diagnostic>
+
     <diagnostic code="XQST0123">
       <comment>
         It is a static error if the name of a feature in require-feature is not
         recognized by the implementation.
       </comment>
       <value>$1</value>
+
+      <entry key="UnrecognizedXQueryOption_2">
+        <value>"$2": unrecognized option in XQuery namespace</value>
+      </entry>
+
+      <entry key="UnrecognizedRequiredFeature_2">
+        <value>"$2": unrecognized required feature</value>
+      </entry>
+
     </diagnostic>
     
     <diagnostic code="XQST0126">
@@ -3710,10 +3754,6 @@
       <value>can not parse as XML for xqdoc: $3</value>
     </entry>
 
-    <entry key="BadXQueryVersion">
-      <value>unsupported XQuery version</value>
-    </entry>
-
     <entry key="BaseURI">
       <value>base URI</value>
     </entry>
@@ -4451,14 +4491,6 @@
       <value>a DOCTYPE declaration must appear before any element or text node, and at most once</value>
     </entry>
 
-    <entry key="FUNCTION">
-      <value>function</value>
-    </entry>
-
-    <entry key="ANNOTATION">
-      <value>annotation</value>
-    </entry>
-
     <!--////////// libxml2 Errors //////////////////////////////////////////-->
 
     <entry key="libxml_ERR_1"> <!-- XML_ERR_INTERNAL_ERROR -->
@@ -5082,10 +5114,6 @@
       <value>"$5": duplicate attribute enumeration value token</value>
     </entry>
 
-    <entry key="UnrecognizedXQueryOption">
-      <value>"$2": unrecognized XQuery namespace option</value>
-    </entry>
-
   </subvalues>
 
 </diagnostic-list>

=== modified file 'src/diagnostics/pregenerated/diagnostic_list.cpp'
--- src/diagnostics/pregenerated/diagnostic_list.cpp	2013-06-15 02:57:08 +0000
+++ src/diagnostics/pregenerated/diagnostic_list.cpp	2013-06-21 12:18:31 +0000
@@ -235,6 +235,9 @@
 XQueryErrorCode XQST0120( "XQST0120" );
 
 
+XQueryErrorCode XQST0122( "XQST0122" );
+
+
 XQueryErrorCode XQST0123( "XQST0123" );
 
 

=== modified file 'src/diagnostics/pregenerated/dict_en.cpp'
--- src/diagnostics/pregenerated/dict_en.cpp	2013-06-20 12:00:37 +0000
+++ src/diagnostics/pregenerated/dict_en.cpp	2013-06-21 12:18:31 +0000
@@ -146,7 +146,7 @@
   { "XPST0017", "\"$1\": $2" },
   { "XPST0051", "$1" },
   { "XPST0080", "\"$1\": invalid type for \"cast\" or \"castable\" exression" },
-  { "XPST0081", "\"$1\": can not expand namespace prefix to URI" },
+  { "XPST0081", "\"$1\": can not expand prefix of lexical QName to namespace URI" },
   { "XPST0083", "\"$1\": not a string literal" },
   { "XPTY0004", "$1" },
   { "XPTY0018", "path expression last step must not have nodes and atomic values" },
@@ -173,7 +173,7 @@
   { "XQST0012", "invalid schema definitions" },
   { "XQST0013", "invalid pragma content" },
   { "XQST0022", "namespace declaration attribute is not a URI literal" },
-  { "XQST0031", "\"$1\": $2" },
+  { "XQST0031", "$1" },
   { "XQST0032", "multiple base URI declarations" },
   { "XQST0033", "\"$1\": namespace prefix already bound to \"$2\"" },
   { "XQST0034", "\"$1\": duplicate function declaration" },
@@ -182,18 +182,18 @@
   { "XQST0038", "multiple default collation declarations" },
   { "XQST0039", "\"$1\": duplicate parameter name" },
   { "XQST0040", "\"$1\": non-distinct expanded attribute QName" },
-  { "XQST0045", "\"$1\": $2 declared in reserved namespace${ 3}" },
+  { "XQST0045", "$1" },
   { "XQST0046", "${\"1\": }invalid URI literal${: 2}" },
   { "XQST0047", "\"$1\": duplicate target namespace" },
-  { "XQST0048", "\"$1\": not in library namespace" },
+  { "XQST0048", "\"$1\": QName not in library namespace" },
   { "XQST0049", "\"$1\": duplicate variable declaration" },
   { "XQST0052", "\"$1\": not defined as simple type" },
   { "XQST0054", "${\"1\": }variable must not depend on itself" },
   { "XQST0055", "multiple copy-namespaces declarations" },
   { "XQST0057", "schema import with empty target namespace" },
-  { "XQST0058", "duplicate import of schema with target namespace $1" },
+  { "XQST0058", "duplicate import of schema with target namespace \"$1\"" },
   { "XQST0059", "$1" },
-  { "XQST0060", "\"$1\": function name has a null namespace URI" },
+  { "XQST0060", "\"$1\": function name is in no namespace" },
   { "XQST0065", "multiple ordering mode declarations" },
   { "XQST0066", "multiple element/type/function namespace declarations" },
   { "XQST0067", "multiple construction declarations" },
@@ -220,6 +220,7 @@
   { "XQST0114", "\"$1\": duplicate decimal format property" },
   { "XQST0116", "$1" },
   { "XQST0120", "\"$1\": feature not supported" },
+  { "XQST0122", "$1" },
   { "XQST0123", "$1" },
   { "XQST0126", "impossible to require all extension features" },
   { "XQST0127", "$1 : impossible to require and prohibit at the same time" },
@@ -505,7 +506,6 @@
 #if !defined(ZORBA_NO_FULL_TEXT)
   { "ZXQP8403", "thesaurus data error${: 1}" },
 #endif
-  { "~ANNOTATION", "annotation" },
   { "~AllMatchesHasExcludes", "AllMatches contains StringExclude" },
   { "~AlreadySpecified", "already specified" },
   { "~AppliedAt", "applied at" },
@@ -552,7 +552,6 @@
   { "~BadXMLDocument_2o", "malformed XML document${ at \"2\"}" },
   { "~BadXMLForXQDoc_3", "can not parse as XML for xqdoc: $3" },
   { "~BadXMLNoOpeningTag", "closing tag without matching opening tag" },
-  { "~BadXQueryVersion", "unsupported XQuery version" },
   { "~BaseURI", "base URI" },
   { "~BoxCondTooManyColumns", "box condition has more columns than index" },
   { "~CharExpected_3", "'$3' expected" },
@@ -636,7 +635,6 @@
   { "~FTST0009_BadStopWordsLang", "for current stop words" },
   { "~FTST0009_BadThesaurusLang", "for given thesaurus" },
   { "~FTST0009_BadTokenizerLang", "for current tokenizer" },
-  { "~FUNCTION", "function" },
   { "~FileNotFoundOrReadable", "file not found or readable" },
   { "~FnNilledArgNotNode", "fn:nilled() argument not a node" },
   { "~FnOnlyInXQueryVersion_3", "function only available in XQuery $3" },
@@ -885,7 +883,6 @@
   { "~UnescapedChar_3", "character '$3' must be escaped here" },
 #endif
   { "~UnexpectedElement", "unexpected element" },
-  { "~UnrecognizedXQueryOption", "\"$2\": unrecognized XQuery namespace option" },
   { "~VarValMustBeSingleItem_2", "\"$2\": variable value must be single item" },
   { "~XMLParserInitFailed", "XML parser initialization failed" },
   { "~XMLParserNoCreateTree", "XML tree creation failed" },
@@ -933,14 +930,20 @@
   { "~XQDY0074_NameSapceConstructor", "$2: cannot cast prefix to xs:NCName" },
   { "~XQDY0074_NoEmptyLocalname", "can not convert empty local name to xs:QName" },
   { "~XQDY0074_NotCastToQName", "$2: can not convert to xs:QName" },
+  { "~XQST0031_BadXQueryVersion_2", "\"$2\": unsupported XQuery version" },
   { "~XQST0036_NoParamTypeInMainModule_23", "\"$2\": parameter type of function \"$3\" is not among the in-scope types of the main module" },
   { "~XQST0036_NoParamTypeInModule_234", "\"$2\": parameter type of function \"$3\" is not among the in-scope types of module \"$4\"" },
   { "~XQST0036_NoRetTypeInMainModule_23", "\"$2\": return type of function \"$3\" is not among the in-scope types of the main module" },
   { "~XQST0036_NoRetTypeInModule_234", "\"$2\": return type of function \"$3\" is not among the in-scope types of module \"$4\"" },
   { "~XQST0036_NoVarTypeInMainModule_23", "\"$2\": type of variable \"$3\" is not among the in-scope types of the main module" },
   { "~XQST0036_NoVarTypeInModule_234", "\"$2\": type of variable \"$3\" is not among the in-scope types of module \"$4\"" },
+  { "~XQST0045_ANNOTATION_23", "\"$2\": annotation name in reserved namespace \"$3\"" },
+  { "~XQST0045_FUNCTION_23", "\"$2\": function name in reserved namespace \"$3\"" },
   { "~XQST0046_BadHexDigit_3", "'$3': invalid hexedecimal digit" },
-  { "~XQST0059_SpecificationMessage", "\"$2\": target namespace not found for schema/module${ \"3\"}${: 4}" },
+  { "~XQST0059_BadModule_23", "module \"$2\" at location \"$3\" is not library module" },
+  { "~XQST0059_UnknownModule_234o", "module \"$2\" not found at location \"$3\"${ : 4}" },
+  { "~XQST0059_UnknownSchema_23o", "no schema found for target namespace \"$2\"${ : 3}" },
+  { "~XQST0059_WrongModule_234", "attempt to import module \"$2\" at location \"$3\" actually imports module \"$4\"" },
   { "~XQST0059_XercesMessage", "$2,$3: error in schema${ with System ID \"4\"}${ with Public ID \"5\"}${: 6}" },
   { "~XQST0070_ReservedPrefixInDecl_2", "\"$2\": reserved prefix can not appear in namespace declaration" },
   { "~XQST0070_ReservedPrefixInImport_2", "\"$2\": reserved prefix can not appear in schema or module import" },
@@ -954,6 +957,8 @@
   { "~XQST0106_Duplicate", "$2: annotation appears more than once in declaration" },
   { "~XQST0116_Conflicting", "$2: conflicting annotations in declaration" },
   { "~XQST0116_Duplicate", "$2: annotation appears more than once in declaration" },
+  { "~XQST0123_UnrecognizedRequiredFeature_2", "\"$2\": unrecognized required feature" },
+  { "~XQST0123_UnrecognizedXQueryOption_2", "\"$2\": unrecognized option in XQuery namespace" },
   { "~XUDY0021_AttributeName", "\"$3\": attribute with the same name already exists" },
   { "~XUST0001_CONCAT", "comma expression with updating and non-updating branches" },
   { "~XUST0001_Generic", "updating expression illegal here" },

=== modified file 'src/diagnostics/pregenerated/dict_zed_keys.h'
--- src/diagnostics/pregenerated/dict_zed_keys.h	2013-06-20 12:00:37 +0000
+++ src/diagnostics/pregenerated/dict_zed_keys.h	2013-06-21 12:18:31 +0000
@@ -54,14 +54,20 @@
 #define ZED_XPTY0004_PiTarget_2 "~XPTY0004_PiTarget_2"
 #define ZED_XPTY0117_NodeCast "~XPTY0117_NodeCast"
 #define ZED_XPTY0117_NotationParam_23 "~XPTY0117_NotationParam_23"
+#define ZED_XQST0031_BadXQueryVersion_2 "~XQST0031_BadXQueryVersion_2"
 #define ZED_XQST0036_NoVarTypeInMainModule_23 "~XQST0036_NoVarTypeInMainModule_23"
 #define ZED_XQST0036_NoVarTypeInModule_234 "~XQST0036_NoVarTypeInModule_234"
 #define ZED_XQST0036_NoRetTypeInMainModule_23 "~XQST0036_NoRetTypeInMainModule_23"
 #define ZED_XQST0036_NoRetTypeInModule_234 "~XQST0036_NoRetTypeInModule_234"
 #define ZED_XQST0036_NoParamTypeInMainModule_23 "~XQST0036_NoParamTypeInMainModule_23"
 #define ZED_XQST0036_NoParamTypeInModule_234 "~XQST0036_NoParamTypeInModule_234"
+#define ZED_XQST0045_FUNCTION_23 "~XQST0045_FUNCTION_23"
+#define ZED_XQST0045_ANNOTATION_23 "~XQST0045_ANNOTATION_23"
 #define ZED_XQST0046_BadHexDigit_3 "~XQST0046_BadHexDigit_3"
-#define ZED_XQST0059_SpecificationMessage "~XQST0059_SpecificationMessage"
+#define ZED_XQST0059_UnknownSchema_23o "~XQST0059_UnknownSchema_23o"
+#define ZED_XQST0059_UnknownModule_234o "~XQST0059_UnknownModule_234o"
+#define ZED_XQST0059_BadModule_23 "~XQST0059_BadModule_23"
+#define ZED_XQST0059_WrongModule_234 "~XQST0059_WrongModule_234"
 #define ZED_XQST0059_XercesMessage "~XQST0059_XercesMessage"
 #define ZED_XQST0070_ReservedPrefixInDecl_2 "~XQST0070_ReservedPrefixInDecl_2"
 #define ZED_XQST0070_ReservedPrefixInModule_2 "~XQST0070_ReservedPrefixInModule_2"
@@ -75,6 +81,8 @@
 #define ZED_XQST0106_Conflicting "~XQST0106_Conflicting"
 #define ZED_XQST0116_Duplicate "~XQST0116_Duplicate"
 #define ZED_XQST0116_Conflicting "~XQST0116_Conflicting"
+#define ZED_XQST0123_UnrecognizedXQueryOption_2 "~XQST0123_UnrecognizedXQueryOption_2"
+#define ZED_XQST0123_UnrecognizedRequiredFeature_2 "~XQST0123_UnrecognizedRequiredFeature_2"
 #define ZED_XPDY0002_VariableHasNoValue_2 "~XPDY0002_VariableHasNoValue_2"
 #define ZED_XPDY0002_VariableUndeclared_2 "~XPDY0002_VariableUndeclared_2"
 #define ZED_XPDY0002_ContextUndeclared_2 "~XPDY0002_ContextUndeclared_2"
@@ -232,7 +240,6 @@
 #define ZED_BadXMLDocument_2o "~BadXMLDocument_2o"
 #define ZED_BadXMLNoOpeningTag "~BadXMLNoOpeningTag"
 #define ZED_BadXMLForXQDoc_3 "~BadXMLForXQDoc_3"
-#define ZED_BadXQueryVersion "~BadXQueryVersion"
 #define ZED_BaseURI "~BaseURI"
 #define ZED_BoxCondTooManyColumns "~BoxCondTooManyColumns"
 #define ZED_CharExpected_3 "~CharExpected_3"
@@ -411,8 +418,6 @@
 #define ZED_ParseFragmentInvalidOptions "~ParseFragmentInvalidOptions"
 #define ZED_ParseFragmentDoctypeNotAllowed "~ParseFragmentDoctypeNotAllowed"
 #define ZED_ParseFragmentDoctypeNotAllowedHere "~ParseFragmentDoctypeNotAllowedHere"
-#define ZED_FUNCTION "~FUNCTION"
-#define ZED_ANNOTATION "~ANNOTATION"
 #define ZED_libxml_ERR_1 "~libxml_ERR_1"
 #define ZED_libxml_ERR_2 "~libxml_ERR_2"
 #define ZED_libxml_ERR_4 "~libxml_ERR_4"
@@ -558,7 +563,6 @@
 #define ZED_libxml_ERR_539 "~libxml_ERR_539"
 #define ZED_libxml_ERR_540 "~libxml_ERR_540"
 #define ZED_libxml_ERR_541 "~libxml_ERR_541"
-#define ZED_UnrecognizedXQueryOption "~UnrecognizedXQueryOption"
 
 #endif /* ZORBA_DIAGNOSTICS_ZED_KEYS */
 /*

=== modified file 'src/types/schema/schema.cpp'
--- src/types/schema/schema.cpp	2013-05-16 17:38:41 +0000
+++ src/types/schema/schema.cpp	2013-06-21 12:18:31 +0000
@@ -168,8 +168,7 @@
  * A Xerces EntityResolver that looks for a specific URL and returns
  * InputSource that reads from a particular std::istream.
  */
-class StaticContextEntityResolver : 
-    public XERCES_CPP_NAMESPACE::EntityResolver
+class StaticContextEntityResolver :  public XERCES_CPP_NAMESPACE::EntityResolver
 {
 public:
   /**
@@ -180,9 +179,12 @@
     const XMLCh* const systemId)
   {
     TRACE("pId: " << StrX(publicId) << "  sId: " << StrX(systemId));
+
     if (XMLString::compareString(systemId, theLogicalURI) == 0)
     {
-      TRACE("logiUri: " << StrX(theLogicalURI) << " physicalUri: " << StrX(thePhysicalURI));
+      TRACE("logiUri: " << StrX(theLogicalURI) << " physicalUri: "
+            << StrX(thePhysicalURI));
+
       // Pass memory ownership of the istream to the IstreamInputSource
       InputSource* lRetval = new IstreamInputSource(theStream, theStreamReleaser);
       theStreamReleaser = nullptr;
@@ -228,18 +230,28 @@
         zstring base = fullBase.substr(0, i == zstring::npos ? fullBase.length() : i+1);
         URI resolvedURI( base, lUri.toString(), true);
         lResolved = resolvedURI.toString();
-        TRACE("i: " << i << " base: " << base << " lUri: " << lUri << " lRes: " << lResolved);
+
+        TRACE("i: " << i << " base: " << base << " lUri: " << lUri
+              << " lRes: " << lResolved);
       }
       else
+      {
         lResolved = lStrId;
-      
+      }
+
       try
       {
-        TRACE("lId: " << StrX(lId) << " lResolved: " << lResolved << " thePhysURI: " << StrX(thePhysicalURI));
+        TRACE("lId: " << StrX(lId) << " lResolved: " << lResolved
+              << " thePhysURI: " << StrX(thePhysicalURI));
+
         zstring lErrorMessage;
-        lResource = theSctx->resolve_uri(lResolved, internal::EntityData::SCHEMA, lErrorMessage);
+        lResource = theSctx->resolve_uri(lResolved,
+                                         internal::EntityData::SCHEMA,
+                                         lErrorMessage);
+
         internal::StreamResource* lStream =
-            dynamic_cast<internal::StreamResource*>(lResource.get());
+        dynamic_cast<internal::StreamResource*>(lResource.get());
+
         if (lStream != NULL)
         {
           // Pass memory ownership of this istream to the new IstreamInputSource
@@ -263,13 +275,8 @@
         {
           // We didn't find it. If we return NULL here, Xerces will try to
           // resolve it its own way, which we don't want to happen.
-          throw XQUERY_EXCEPTION(
-            err::XQST0059,
-            ERROR_PARAMS(
-              ZED( XQST0059_SpecificationMessage ),
-              lResolved
-            )
-          );
+          throw XQUERY_EXCEPTION(err::XQST0059,
+          ERROR_PARAMS(ZED(XQST0059_UnknownSchema_23o), lResolved));
         }
       }
       catch (ZorbaException const& e)

=== modified file 'test/rbkt/Queries/zorba/index/error3.xq'
--- test/rbkt/Queries/zorba/index/error3.xq	2013-02-07 17:24:36 +0000
+++ test/rbkt/Queries/zorba/index/error3.xq	2013-06-21 12:18:31 +0000
@@ -3,10 +3,10 @@
 :)
 
 
-import module namespace index_ddl = "http://www.zorba-xquery.com/modules/store/static/indexes/ddl";;
+import module namespace iddl = "http://www.zorba-xquery.com/modules/store/static/indexes/ddl";;
 
 import module namespace idx = "http://www.w3.org/TestModules/idx"; at
                               "error_module2.xqlib";
 
-index_ddl:create(xs:QName("idx:foo"));
-index_ddl:drop-index(xs:QName("idx:foo"));
+iddl:create(xs:QName("idx:foo"));
+iddl:drop-index(xs:QName("idx:foo"));


Follow ups