← 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:
relaxed type restrictions for jsoniq navigation and related functions

Requested reviews:
  Markos Zaharioudakis (markos-za)

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

relaxed type restrictions for jsoniq navigation and related functions
-- 
https://code.launchpad.net/~zorba-coders/zorba/markos-scratch/+merge/167465
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'modules/org/jsoniq/www/functions.xq'
--- modules/org/jsoniq/www/functions.xq	2013-03-22 18:22:17 +0000
+++ modules/org/jsoniq/www/functions.xq	2013-06-05 07:09:43 +0000
@@ -193,7 +193,7 @@
  : @param $o A JSON Object.
  : @return The names of pairs in the object.
  :)
-declare function jn:keys($o as object()) as xs:string* external;
+declare function jn:keys($o as item()) as xs:string* external;
 
 
 (:~
@@ -205,7 +205,19 @@
  : @return the value of specified pair within the given object, or the empty sequence.
  :)
 (: obsolete - use $o($name) instead :)
-declare function jn:value($o as object(), $name as xs:string) as item()? external;
+declare function jn:value($o as item(), $name as item()?) as item()? external;
+
+
+(:~
+ : Creates an object from the specified pairs of another given object. 
+ : Specifically, for each name in $names, if the object $o has a pair with
+ : that name, then a copy of that pair is included in the new object.
+ :
+ : @param $o A JSON Object.
+ : @param $names The names of the pairs to copy out of $o and insert into the new object
+ : @return The new object.
+ :)
+declare function jn:project($o as object(), $names as xs:string*) as object() external;
 
 
 (:~
@@ -227,19 +239,8 @@
  : @return The member at the specified position, or empty sequence.
  :)
 (: obsolete - use $a($p) instead :)
-declare function jn:member($a as array(), $p as xs:integer) as item()? external;
-
-
-(:~
- : Creates an object from the specified pairs of another given object. 
- : Specifically, for each name in $names, if the object $o has a pair with
- : that name, then a copy of that pair is included in the new object.
- :
- : @param $o A JSON Object.
- : @param $names The names of the pairs to copy out of $o and insert into the new object
- : @return The new object.
- :)
-declare function jn:project($o as object(), $names as xs:string*) as object() external;
+declare function jn:member($a as item(), $p as item()?) as item()? external;
+
 
 (:~
  : Returns the members of an Array.
@@ -247,25 +248,31 @@
  : @param $a A JSON Array.
  : @return The members of the specified array.
  :)
-declare function jn:members($o as array()) as item()* external;
+declare function jn:members($o as item()) as item()* external;
 
 
 (:~
  : Recursively "flatten" a JSON Array, by replacing any arrays with their
  : members. Equivalent to
  :
- :   define function jn:flatten($arg as array()) {
- :     for $value in jn:values($arg)
- :     return
- :       if ($value instance of array())
- :       then jn:flatten($value)
- :       else $value
+ :   define function jn:flatten($arg as item())
+ :   {
+ :     if ($arg instance of array())
+ :     then
+ :       for $value in jn:values($arg)
+ :       return
+ :         if ($value instance of array())
+ :         then jn:flatten($value)
+ :         else $value
+ :     else
+ :       ()
  :   };
  :
  : @param $a A JSON Array.
  : @return The flattened version of $a.
  :)
-declare function jn:flatten($a as array()) as item()* external;
+declare function jn:flatten($a as item()) as item()* external;
+
 
 (:~
  : Returns the JSON null.
@@ -274,6 +281,7 @@
  :)
 declare function jn:null() as js:null external;
 
+
 (:~
  : Tests whether the supplied atomic item is a JSON null.
  :

=== modified file 'src/api/item.cpp'
--- src/api/item.cpp	2013-05-15 23:22:01 +0000
+++ src/api/item.cpp	2013-06-05 07:09:43 +0000
@@ -180,6 +180,7 @@
     return store::XS_ANY_ATOMIC;
 }
 
+
 Item Item::getType() const
 {
   ITEM_TRY
@@ -192,18 +193,16 @@
   return Item();
 }
 
-#ifdef ZORBA_WITH_JSON
 
 bool
 Item::isJSONItem() const
 {
   ITEM_TRY
-    return m_item->isJSONItem();
+    return m_item->isObject() || m_item->isArray();
   ITEM_CATCH
   return false;
 }
 
-#endif /* ZORBA_WITH_JSON */
 
 Iterator_t Item::getAtomizationValue() const
 {

=== modified file 'src/api/serialization/serializer.cpp'
--- src/api/serialization/serializer.cpp	2013-05-09 00:21:51 +0000
+++ src/api/serialization/serializer.cpp	2013-06-05 07:09:43 +0000
@@ -458,8 +458,7 @@
     }
     emit_node(item, 0);
   }
-#ifdef ZORBA_WITH_JSON
-  else if (item->isJSONItem())
+  else if (item->isObject() || item->isArray())
   {
     zstring lMethod;
     ser->getSerializationMethod(lMethod);
@@ -467,7 +466,6 @@
     throw ZORBA_EXCEPTION(jerr::JNSE0022,
     ERROR_PARAMS(lMethod, item->getType()->getStringValue()));
   }
-#endif
   else if (item->isFunction())
   {
     throw XQUERY_EXCEPTION(err::SENR0001,
@@ -1000,26 +998,32 @@
 {
   // This is called for any item within a JSON array or object, or for a
   // top-level item. JSON rules for simple types apply here.
-  if (item->isJSONObject()) {
+  if (item->isObject())
+  {
     emit_json_object(item, depth);
   }
-  else if (item->isJSONArray()) {
+  else if (item->isArray())
+  {
     emit_json_array(item, depth);
   }
-  else if (item->isAtomic()) {
+  else if (item->isAtomic())
+  {
     store::SchemaTypeCode type = item->getTypeCode();
-    switch (type) {
+    switch (type)
+    {
     case store::XS_STRING:
       emit_json_string(item->getStringValue());
       break;
 
     case store::XS_DOUBLE:
     case store::XS_FLOAT:
-      if (item->isNaN()) {
+      if (item->isNaN())
+      {
         emit_json_string("NaN");
         break;
       }
-      else if (item->isPosOrNegInf()) {
+      else if (item->isPosOrNegInf())
+      {
         // QQQ with Cloudscript, this is supposed to be INF or -INF - how can
         // I tell which I have?
         emit_json_string("INF");
@@ -1052,17 +1056,20 @@
       tr << "null";
       break;
 
-    default: {
+    default:
+      {
       emit_json_string(item->getStringValue());
       break;
     }
     }
   }
-  else {
+  else
+  {
     emit_jsoniq_xdm_node(item, depth);
   }
 }
 
+
 /*******************************************************************************
 
 ********************************************************************************/
@@ -1072,36 +1079,46 @@
   store::Iterator_t it = obj->getObjectKeys();
   it->open();
   bool first = true;
-  if (ser->indent) {
+  if (ser->indent)
+  {
     tr << "{" <<ser->END_OF_LINE;
   }
-  else {
+  else
+  {
     tr << "{ ";
   }
   depth++;
-  while (it->next(key)) {
+  while (it->next(key))
+  {
     if (first) {
       first = false;
     }
-    else {
+    else
+    {
       tr << ", ";
-      if (ser->indent) {
+      if (ser->indent)
+      {
         tr << ser->END_OF_LINE;
       }
     }
-    if (ser->indent) {
+
+    if (ser->indent)
+    {
       emit_indentation(depth);
     }
+
     emit_json_item(key, depth);
     tr << " : ";
     emit_json_item(obj->getObjectValue(key).getp(), depth);
   }
-  if (ser->indent) {
+  if (ser->indent)
+  {
     tr << ser->END_OF_LINE;
     emit_indentation(depth-1);
     tr << "}";
   }
-  else {
+  else
+  {
     tr << " }";
   }
 }
@@ -1113,7 +1130,8 @@
 {
   xs_integer size = array->getArraySize();
   tr << "[ ";
-  for (xs_integer i = xs_integer(1); i <= size; ++i) {
+  for (xs_integer i = xs_integer(1); i <= size; ++i)
+  {
     if (i != 1) {
       tr << ", ";
     }
@@ -1171,11 +1189,13 @@
 
 void serializer::hybrid_emitter::emit_item(store::Item *item)
 {
-  if (item->isJSONItem()) {
+  if (item->isJSONItem())
+  {
     theEmitterState = JESTATE_JDM;
     json_emitter::emit_item(item);
   }
-  else {
+  else
+  {
     if (theEmitterState == JESTATE_UNDETERMINED) {
       theXMLEmitter->emit_declaration();
     }

=== modified file 'src/compiler/translator/translator.cpp'
--- src/compiler/translator/translator.cpp	2013-06-04 23:51:34 +0000
+++ src/compiler/translator/translator.cpp	2013-06-05 07:09:43 +0000
@@ -1140,7 +1140,9 @@
      if (theSctx->is_feature_set(feature::common_language))
      {
        theCCB->theXQueryDiagnostics->add_warning(
-             NEW_XQUERY_WARNING(zwarn::ZWST0009_COMMON_LANGUAGE_WARNING, WARN_PARAMS(ZED(ZWST0009_NO_PREFIX_IN_TYPE)), WARN_LOC(loc)));
+       NEW_XQUERY_WARNING(zwarn::ZWST0009_COMMON_LANGUAGE_WARNING,
+                          WARN_PARAMS(ZED(ZWST0009_NO_PREFIX_IN_TYPE)),
+                          WARN_LOC(loc)));
      }
       
       ns = XML_SCHEMA_NS;
@@ -12073,18 +12075,22 @@
   }
   case FunctionConsts::FN_JSONIQ_VALUE_2:
   {
-    arguments[1] = CREATE(cast)(theRootSctx, theUDF, loc,
-                                arguments[1],
-                                theRTM.STRING_TYPE_ONE,
-                                false);
+    arguments[1] = 
+    create_cast_expr(loc, arguments[1], theRTM.STRING_TYPE_ONE, true, true);
+
     break;
   }
   case FunctionConsts::FN_JSONIQ_MEMBER_2:
   {
-    arguments[1] = CREATE(cast)(theRootSctx, theUDF, loc,
-                                arguments[1],
-                                theRTM.INTEGER_TYPE_ONE,
-                                false);
+    arguments[1] =
+    create_cast_expr(loc, arguments[1], theRTM.INTEGER_TYPE_ONE, true, true);
+
+    break;
+  }
+  case FunctionConsts::OP_ZORBA_JSON_ITEM_ACCESSOR_2:
+  {
+    arguments[1] = wrap_in_atomization(arguments[1]);
+
     break;
   }
   case FunctionConsts::FN_CONCAT_N:
@@ -12324,6 +12330,8 @@
   expr* sourceExpr = pop_nodestack();
   ZORBA_ASSERT(sourceExpr != 0);
 
+  TypeManager* tm = sourceExpr->get_type_manager();
+
   // special case: partial function invocation
   if (v.normalizeArgs() && sourceExpr->get_expr_kind() == function_item_expr_kind)
   {
@@ -12340,13 +12348,14 @@
    // Implementing implicit iteration over the sequence returned by the source expr
   flwor_expr* flworExpr = wrap_expr_in_flwor(sourceExpr, false);
 
-  for_clause* fc = reinterpret_cast<for_clause*>(flworExpr->get_clause(0));
+  for_clause* fc = static_cast<for_clause*>(flworExpr->get_clause(0));
 
   expr* flworVarExpr = CREATE(wrapper)(theRootSctx, theUDF, loc, fc->get_var());
 
-  TypeManager* tm = sourceExpr->get_type_manager();
   xqtref_t srcType = sourceExpr->get_return_type();
 
+  // Note: if numArgs > 1 and the input contains a json item, DynamicFnCallIterator
+  // will raise an error. However, no error will be raised if the input is empty.
   if (TypeOps::is_subtype(tm, *srcType, *theRTM.JSON_ITEM_TYPE_STAR) && numArgs <= 1)
   {
     function* func;
@@ -12366,10 +12375,6 @@
       {
         func = BUILTIN_FUNC(OP_ZORBA_JSON_ITEM_ACCESSOR_2);
       }
-
-      arguments.insert(arguments.begin(), flworVarExpr);
-
-      accessorExpr = generate_fn_body(func, arguments, loc);
     }
     else
     {
@@ -12385,20 +12390,16 @@
       {
         func = BUILTIN_FUNC(OP_ZORBA_JSON_ITEM_ACCESSOR_1);
       }
-
-      accessorExpr = CREATE(fo)(theRootSctx, theUDF, loc, func, flworVarExpr);
-
-      normalize_fo(static_cast<fo_expr*>(accessorExpr));
     }
 
+    arguments.insert(arguments.begin(), flworVarExpr);
+
+    accessorExpr = generate_fn_body(func, arguments, loc);
+
     flworExpr->set_return_expr(accessorExpr);
   }
   else
   {
-    // This is needed to make sure that the flwor is not thrown away by the optimizer
-    // when the FunctionItem expression is an empty sequence.
-    fc->set_allowing_empty(true); 
-
     expr* dynFuncInvocation =
     CREATE(dynamic_function_invocation)(theRootSctx, theUDF, loc,
                                         flworVarExpr,
@@ -12959,7 +12960,9 @@
   if (theSctx->is_feature_set(feature::common_language))
   {
     theCCB->theXQueryDiagnostics->add_warning(
-        NEW_XQUERY_WARNING(zwarn::ZWST0009_COMMON_LANGUAGE_WARNING, WARN_PARAMS(ZED(ZWST0009_JSON_OBJECT_LOOKUP)), WARN_LOC(v.get_dot_loc())));
+        NEW_XQUERY_WARNING(zwarn::ZWST0009_COMMON_LANGUAGE_WARNING,
+                           WARN_PARAMS(ZED(ZWST0009_JSON_OBJECT_LOOKUP)),
+                           WARN_LOC(v.get_dot_loc())));
   }
   return no_state;
 }
@@ -12969,12 +12972,10 @@
 {
   TRACE_VISIT_OUT();
 
-  expr* selectExpr = 0;
-  if (v.get_selector_expr())
-    selectExpr = pop_nodestack();
-
+  expr* selectExpr = pop_nodestack();
   expr* objectExpr = pop_nodestack();
-  ZORBA_ASSERT(objectExpr != 0);
+
+  assert(selectExpr && objectExpr);
 
   flwor_expr* flworExpr = wrap_expr_in_flwor(objectExpr, false);
 
@@ -12982,17 +12983,15 @@
 
   expr* flworVarExpr = CREATE(wrapper)(theRootSctx, theUDF, loc, fc->get_var());
 
-  function* func = 
-    selectExpr ?
-      BUILTIN_FUNC(FN_JSONIQ_VALUE_2) :
-      BUILTIN_FUNC(FN_JSONIQ_KEYS_1);
-
-  fo_expr* accessorExpr = 
-    selectExpr ?
-      CREATE(fo)(theRootSctx, theUDF, loc, func, flworVarExpr, selectExpr) :
-      CREATE(fo)(theRootSctx, theUDF, loc, func, flworVarExpr);
-
-  normalize_fo(accessorExpr);
+  expr* accessorExpr;
+
+  std::vector<expr*> args(2);
+  args[0] = flworVarExpr;
+  args[1] = selectExpr;
+
+  accessorExpr = generate_fn_body(BUILTIN_FUNC(FN_JSONIQ_VALUE_2), args, loc);
+
+  assert(accessorExpr->get_expr_kind() == fo_expr_kind);
 
   flworExpr->set_return_expr(accessorExpr);
 
@@ -13001,6 +13000,7 @@
   push_nodestack(flworExpr);
 }
 
+
 /*******************************************************************************
   JSONConstructor ::= ArrayConstructor |
                       SimpleObjectUnion |

=== modified file 'src/functions/pregenerated/func_jsoniq_functions.cpp'
--- src/functions/pregenerated/func_jsoniq_functions.cpp	2013-04-05 22:56:02 +0000
+++ src/functions/pregenerated/func_jsoniq_functions.cpp	2013-06-05 07:09:43 +0000
@@ -30,7 +30,7 @@
 namespace zorba{
 
 
-#ifdef ZORBA_WITH_JSON
+
 PlanIter_t fn_jsoniq_decode_from_roundtrip::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -41,8 +41,6 @@
   return new JSONDecodeFromRoundtripIterator(sctx, loc, argv);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t fn_jsoniq_encode_for_roundtrip::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -53,11 +51,27 @@
   return new JSONEncodeForRoundtripIterator(sctx, loc, argv);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
-
-#endif
-#ifdef ZORBA_WITH_JSON
+
+PlanIter_t fn_jsoniq_json_doc::codegen(
+  CompilerCB*,
+  static_context* sctx,
+  const QueryLoc& loc,
+  std::vector<PlanIter_t>& argv,
+  expr& ann) const
+{
+  return new JSONDocIterator(sctx, loc, argv);
+}
+
+PlanIter_t op_zorba_json_item_accessor::codegen(
+  CompilerCB*,
+  static_context* sctx,
+  const QueryLoc& loc,
+  std::vector<PlanIter_t>& argv,
+  expr& ann) const
+{
+  return new JSONItemAccessorIterator(sctx, loc, argv);
+}
+
 PlanIter_t fn_jsoniq_keys::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -68,8 +82,6 @@
   return new JSONObjectNamesIterator(sctx, loc, argv[0]);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t fn_jsoniq_value::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -80,8 +92,6 @@
   return new JSONObjectValueIterator(sctx, loc, argv[0], argv[1]);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t fn_jsoniq_project::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -92,20 +102,6 @@
   return new JSONObjectProjectIterator(sctx, loc, argv[0], argv[1]);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
-PlanIter_t fn_jsoniq_size::codegen(
-  CompilerCB*,
-  static_context* sctx,
-  const QueryLoc& loc,
-  std::vector<PlanIter_t>& argv,
-  expr& ann) const
-{
-  return new JSONArraySizeIterator(sctx, loc, argv[0]);
-}
-
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t fn_jsoniq_member::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -116,8 +112,6 @@
   return new JSONArrayMemberIterator(sctx, loc, argv[0], argv[1]);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t fn_jsoniq_members::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -128,8 +122,16 @@
   return new JSONArrayMembersIterator(sctx, loc, argv[0]);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
+PlanIter_t fn_jsoniq_size::codegen(
+  CompilerCB*,
+  static_context* sctx,
+  const QueryLoc& loc,
+  std::vector<PlanIter_t>& argv,
+  expr& ann) const
+{
+  return new JSONArraySizeIterator(sctx, loc, argv[0]);
+}
+
 PlanIter_t fn_jsoniq_flatten::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -140,32 +142,6 @@
   return new JSONArrayFlattenIterator(sctx, loc, argv[0]);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
-PlanIter_t fn_jsoniq_json_doc::codegen(
-  CompilerCB*,
-  static_context* sctx,
-  const QueryLoc& loc,
-  std::vector<PlanIter_t>& argv,
-  expr& ann) const
-{
-  return new JSONDocIterator(sctx, loc, argv);
-}
-
-#endif
-#ifdef ZORBA_WITH_JSON
-PlanIter_t op_zorba_json_item_accessor::codegen(
-  CompilerCB*,
-  static_context* sctx,
-  const QueryLoc& loc,
-  std::vector<PlanIter_t>& argv,
-  expr& ann) const
-{
-  return new JSONItemAccessorIterator(sctx, loc, argv);
-}
-
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t fn_jsoniq_null::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -176,8 +152,6 @@
   return new JSONNullIterator(sctx, loc);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t fn_jsoniq_is_null::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -188,8 +162,6 @@
   return new JSONIsNullIterator(sctx, loc, argv[0]);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t op_zorba_json_object_insert::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -200,8 +172,6 @@
   return new JSONObjectInsertIterator(sctx, loc, argv);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t op_zorba_json_array_insert::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -212,8 +182,6 @@
   return new JSONArrayInsertIterator(sctx, loc, argv);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t op_zorba_json_delete::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -224,11 +192,7 @@
   return new JSONDeleteIterator(sctx, loc, argv);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t op_zorba_json_rename::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -239,8 +203,6 @@
   return new JSONRenameIterator(sctx, loc, argv);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t op_zorba_json_array_append::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -251,8 +213,6 @@
   return new JSONArrayAppendIterator(sctx, loc, argv);
 }
 
-#endif
-#ifdef ZORBA_WITH_JSON
 PlanIter_t op_zorba_json_box::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -263,13 +223,9 @@
   return new JSONBoxIterator(sctx, loc, argv[0]);
 }
 
-#endif
-
 void populate_context_jsoniq_functions(static_context* sctx)
 {
 
-#ifdef ZORBA_WITH_JSON
-
 
       {
     DECL_WITH_KIND(sctx, fn_jsoniq_decode_from_roundtrip,
@@ -281,10 +237,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -298,10 +250,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -314,10 +262,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -331,10 +275,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -347,10 +287,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -364,43 +300,68 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
+
+
+      {
+    DECL_WITH_KIND(sctx, fn_jsoniq_json_doc,
+        (createQName("http://jsoniq.org/functions","","json-doc";), 
+        GENV_TYPESYSTEM.STRING_TYPE_QUESTION, 
+        GENV_TYPESYSTEM.JSON_ITEM_TYPE_STAR),
+        FunctionConsts::FN_JSONIQ_JSON_DOC_1);
+
+  }
+
+
+
+
+      {
+    DECL_WITH_KIND(sctx, op_zorba_json_item_accessor,
+        (createQName("http://www.zorba-xquery.com/internal/zorba-ops","","json-item-accessor";), 
+        GENV_TYPESYSTEM.ITEM_TYPE_ONE, 
+        GENV_TYPESYSTEM.ITEM_TYPE_STAR),
+        FunctionConsts::OP_ZORBA_JSON_ITEM_ACCESSOR_1);
+
+  }
+
+
+
+
+      {
+    DECL_WITH_KIND(sctx, op_zorba_json_item_accessor,
+        (createQName("http://www.zorba-xquery.com/internal/zorba-ops","","json-item-accessor";), 
+        GENV_TYPESYSTEM.ITEM_TYPE_ONE, 
+        GENV_TYPESYSTEM.ITEM_TYPE_QUESTION, 
+        GENV_TYPESYSTEM.ITEM_TYPE_QUESTION),
+        FunctionConsts::OP_ZORBA_JSON_ITEM_ACCESSOR_2);
+
+  }
+
+
 
 
       {
     DECL_WITH_KIND(sctx, fn_jsoniq_keys,
         (createQName("http://jsoniq.org/functions","","keys";), 
-        GENV_TYPESYSTEM.JSON_OBJECT_TYPE_ONE, 
+        GENV_TYPESYSTEM.ITEM_TYPE_ONE, 
         GENV_TYPESYSTEM.STRING_TYPE_STAR),
         FunctionConsts::FN_JSONIQ_KEYS_1);
 
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
     DECL_WITH_KIND(sctx, fn_jsoniq_value,
         (createQName("http://jsoniq.org/functions","","value";), 
-        GENV_TYPESYSTEM.JSON_OBJECT_TYPE_ONE, 
-        GENV_TYPESYSTEM.STRING_TYPE_ONE, 
+        GENV_TYPESYSTEM.ITEM_TYPE_ONE, 
+        GENV_TYPESYSTEM.ITEM_TYPE_QUESTION, 
         GENV_TYPESYSTEM.ITEM_TYPE_QUESTION),
         FunctionConsts::FN_JSONIQ_VALUE_2);
 
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -414,124 +375,55 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
-
-
-      {
-    DECL_WITH_KIND(sctx, fn_jsoniq_size,
-        (createQName("http://jsoniq.org/functions","","size";), 
-        GENV_TYPESYSTEM.JSON_ARRAY_TYPE_ONE, 
-        GENV_TYPESYSTEM.INTEGER_TYPE_ONE),
-        FunctionConsts::FN_JSONIQ_SIZE_1);
-
-  }
-
-
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
     DECL_WITH_KIND(sctx, fn_jsoniq_member,
         (createQName("http://jsoniq.org/functions","","member";), 
-        GENV_TYPESYSTEM.JSON_ARRAY_TYPE_ONE, 
-        GENV_TYPESYSTEM.INTEGER_TYPE_ONE, 
+        GENV_TYPESYSTEM.ITEM_TYPE_ONE, 
+        GENV_TYPESYSTEM.ITEM_TYPE_QUESTION, 
         GENV_TYPESYSTEM.ITEM_TYPE_QUESTION),
         FunctionConsts::FN_JSONIQ_MEMBER_2);
 
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
     DECL_WITH_KIND(sctx, fn_jsoniq_members,
         (createQName("http://jsoniq.org/functions","","members";), 
-        GENV_TYPESYSTEM.JSON_ARRAY_TYPE_ONE, 
+        GENV_TYPESYSTEM.ITEM_TYPE_ONE, 
         GENV_TYPESYSTEM.ITEM_TYPE_STAR),
         FunctionConsts::FN_JSONIQ_MEMBERS_1);
 
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
+
+
+      {
+    DECL_WITH_KIND(sctx, fn_jsoniq_size,
+        (createQName("http://jsoniq.org/functions","","size";), 
+        GENV_TYPESYSTEM.JSON_ARRAY_TYPE_ONE, 
+        GENV_TYPESYSTEM.INTEGER_TYPE_ONE),
+        FunctionConsts::FN_JSONIQ_SIZE_1);
+
+  }
+
+
 
 
       {
     DECL_WITH_KIND(sctx, fn_jsoniq_flatten,
         (createQName("http://jsoniq.org/functions","","flatten";), 
-        GENV_TYPESYSTEM.JSON_ARRAY_TYPE_ONE, 
+        GENV_TYPESYSTEM.ITEM_TYPE_ONE, 
         GENV_TYPESYSTEM.ITEM_TYPE_STAR),
         FunctionConsts::FN_JSONIQ_FLATTEN_1);
 
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
-
-
-      {
-    DECL_WITH_KIND(sctx, fn_jsoniq_json_doc,
-        (createQName("http://jsoniq.org/functions","","json-doc";), 
-        GENV_TYPESYSTEM.STRING_TYPE_QUESTION, 
-        GENV_TYPESYSTEM.JSON_ITEM_TYPE_STAR),
-        FunctionConsts::FN_JSONIQ_JSON_DOC_1);
-
-  }
-
-
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
-
-
-      {
-    DECL_WITH_KIND(sctx, op_zorba_json_item_accessor,
-        (createQName("http://www.zorba-xquery.com/internal/zorba-ops","","json-item-accessor";), 
-        GENV_TYPESYSTEM.JSON_ITEM_TYPE_ONE, 
-        GENV_TYPESYSTEM.ITEM_TYPE_STAR),
-        FunctionConsts::OP_ZORBA_JSON_ITEM_ACCESSOR_1);
-
-  }
-
-
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
-
-
-      {
-    DECL_WITH_KIND(sctx, op_zorba_json_item_accessor,
-        (createQName("http://www.zorba-xquery.com/internal/zorba-ops","","json-item-accessor";), 
-        GENV_TYPESYSTEM.JSON_ITEM_TYPE_ONE, 
-        GENV_TYPESYSTEM.ANY_ATOMIC_TYPE_ONE, 
-        GENV_TYPESYSTEM.ITEM_TYPE_QUESTION),
-        FunctionConsts::OP_ZORBA_JSON_ITEM_ACCESSOR_2);
-
-  }
-
-
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -543,10 +435,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -559,10 +447,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -576,10 +460,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -594,10 +474,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -611,10 +487,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -629,10 +501,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -647,10 +515,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -664,10 +528,6 @@
   }
 
 
-#endif
-
-
-#ifdef ZORBA_WITH_JSON
 
 
       {
@@ -679,8 +539,6 @@
 
   }
 
-
-#endif
 }
 
 

=== modified file 'src/functions/pregenerated/func_jsoniq_functions.h'
--- src/functions/pregenerated/func_jsoniq_functions.h	2013-03-05 23:11:50 +0000
+++ src/functions/pregenerated/func_jsoniq_functions.h	2013-06-05 07:09:43 +0000
@@ -36,7 +36,7 @@
 void populate_context_jsoniq_functions(static_context* sctx);
 
 
-#ifdef ZORBA_WITH_JSON
+
 
 //fn-jsoniq:decode-from-roundtrip
 class fn_jsoniq_decode_from_roundtrip : public function
@@ -55,8 +55,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //fn-jsoniq:encode-for-roundtrip
 class fn_jsoniq_encode_for_roundtrip : public function
@@ -75,8 +74,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //fn-jsoniq:parse-json
 class fn_jsoniq_parse_json : public function
@@ -95,8 +93,45 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
+
+//fn-jsoniq:json-doc
+class fn_jsoniq_json_doc : public function
+{
+public:
+  fn_jsoniq_json_doc(const signature& sig, FunctionConsts::FunctionKind kind)
+    : 
+    function(sig, kind)
+  {
+
+  }
+
+  bool accessesDynCtx() const { return true; }
+
+  bool isSource() const { return true; }
+
+  CODEGEN_DECL();
+};
+
+
+//op-zorba:json-item-accessor
+class op_zorba_json_item_accessor : public function
+{
+public:
+  op_zorba_json_item_accessor(const signature& sig, FunctionConsts::FunctionKind kind)
+    : 
+    function(sig, kind)
+  {
+
+  }
+
+  bool propagatesInputNodes(expr* fo, csize producer) const { return producer == 0; }
+
+  bool mustCopyInputNodes(expr* fo, csize producer) const { return false; }
+
+  CODEGEN_DECL();
+};
+
 
 //fn-jsoniq:keys
 class fn_jsoniq_keys : public function
@@ -115,8 +150,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //fn-jsoniq:value
 class fn_jsoniq_value : public function
@@ -135,8 +169,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //fn-jsoniq:project
 class fn_jsoniq_project : public function
@@ -155,28 +188,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
-
-//fn-jsoniq:size
-class fn_jsoniq_size : public function
-{
-public:
-  fn_jsoniq_size(const signature& sig, FunctionConsts::FunctionKind kind)
-    : 
-    function(sig, kind)
-  {
-
-  }
-
-  bool propagatesInputNodes(expr* fo, csize producer) const { return false; }
-
-  bool mustCopyInputNodes(expr* fo, csize producer) const { return false; }
-
-  CODEGEN_DECL();
-};
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //fn-jsoniq:member
 class fn_jsoniq_member : public function
@@ -195,8 +207,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //fn-jsoniq:members
 class fn_jsoniq_members : public function
@@ -215,8 +226,26 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
+
+//fn-jsoniq:size
+class fn_jsoniq_size : public function
+{
+public:
+  fn_jsoniq_size(const signature& sig, FunctionConsts::FunctionKind kind)
+    : 
+    function(sig, kind)
+  {
+
+  }
+
+  bool propagatesInputNodes(expr* fo, csize producer) const { return false; }
+
+  bool mustCopyInputNodes(expr* fo, csize producer) const { return false; }
+
+  CODEGEN_DECL();
+};
+
 
 //fn-jsoniq:flatten
 class fn_jsoniq_flatten : public function
@@ -235,48 +264,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
-
-//fn-jsoniq:json-doc
-class fn_jsoniq_json_doc : public function
-{
-public:
-  fn_jsoniq_json_doc(const signature& sig, FunctionConsts::FunctionKind kind)
-    : 
-    function(sig, kind)
-  {
-
-  }
-
-  bool accessesDynCtx() const { return true; }
-
-  bool isSource() const { return true; }
-
-  CODEGEN_DECL();
-};
-#endif
-#ifdef ZORBA_WITH_JSON
-
-//op-zorba:json-item-accessor
-class op_zorba_json_item_accessor : public function
-{
-public:
-  op_zorba_json_item_accessor(const signature& sig, FunctionConsts::FunctionKind kind)
-    : 
-    function(sig, kind)
-  {
-
-  }
-
-  bool propagatesInputNodes(expr* fo, csize producer) const { return producer == 0; }
-
-  bool mustCopyInputNodes(expr* fo, csize producer) const { return false; }
-
-  CODEGEN_DECL();
-};
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //fn-jsoniq:null
 class fn_jsoniq_null : public function
@@ -291,8 +279,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //fn-jsoniq:is-null
 class fn_jsoniq_is_null : public function
@@ -307,8 +294,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //op-zorba:json-object-insert
 class op_zorba_json_object_insert : public function
@@ -329,8 +315,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //op-zorba:json-array-insert
 class op_zorba_json_array_insert : public function
@@ -351,8 +336,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //op-zorba:json-delete
 class op_zorba_json_delete : public function
@@ -371,8 +355,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //op-zorba:json-replace-value
 class op_zorba_json_replace_value : public function
@@ -393,8 +376,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //op-zorba:json-rename
 class op_zorba_json_rename : public function
@@ -413,8 +395,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //op-zorba:json-array-append
 class op_zorba_json_array_append : public function
@@ -435,8 +416,7 @@
 
   CODEGEN_DECL();
 };
-#endif
-#ifdef ZORBA_WITH_JSON
+
 
 //op-zorba:json-box
 class op_zorba_json_box : public function
@@ -459,7 +439,6 @@
 
   CODEGEN_DECL();
 };
-#endif
 
 
 } //namespace zorba

=== modified file 'src/functions/pregenerated/function_enum.h'
--- src/functions/pregenerated/function_enum.h	2013-06-04 21:47:40 +0000
+++ src/functions/pregenerated/function_enum.h	2013-06-05 07:09:43 +0000
@@ -251,16 +251,16 @@
   FN_JSONIQ_ENCODE_FOR_ROUNDTRIP_2,
   FN_JSONIQ_PARSE_JSON_1,
   FN_JSONIQ_PARSE_JSON_2,
+  FN_JSONIQ_JSON_DOC_1,
+  OP_ZORBA_JSON_ITEM_ACCESSOR_1,
+  OP_ZORBA_JSON_ITEM_ACCESSOR_2,
   FN_JSONIQ_KEYS_1,
   FN_JSONIQ_VALUE_2,
   FN_JSONIQ_PROJECT_2,
-  FN_JSONIQ_SIZE_1,
   FN_JSONIQ_MEMBER_2,
   FN_JSONIQ_MEMBERS_1,
+  FN_JSONIQ_SIZE_1,
   FN_JSONIQ_FLATTEN_1,
-  FN_JSONIQ_JSON_DOC_1,
-  OP_ZORBA_JSON_ITEM_ACCESSOR_1,
-  OP_ZORBA_JSON_ITEM_ACCESSOR_2,
   FN_JSONIQ_NULL_0,
   FN_JSONIQ_IS_NULL_1,
   OP_ZORBA_JSON_OBJECT_INSERT_2,

=== modified file 'src/runtime/accessors/accessors_impl.cpp'
--- src/runtime/accessors/accessors_impl.cpp	2013-05-24 22:52:47 +0000
+++ src/runtime/accessors/accessors_impl.cpp	2013-06-05 07:09:43 +0000
@@ -234,10 +234,13 @@
     {
       STACK_PUSH(true, state);
     }
-    else if (resKind == store::Item::JSONIQ)
-    {
-			RAISE_ERROR(jerr::JNTY0004, loc,
-      ERROR_PARAMS(result->isJSONObject() ? "object" : "array"));
+    else if (resKind == store::Item::OBJECT)
+    {
+			RAISE_ERROR(jerr::JNTY0004, loc, ERROR_PARAMS("object"));
+    }
+    else if (resKind == store::Item::ARRAY)
+    {
+			RAISE_ERROR(jerr::JNTY0004, loc, ERROR_PARAMS("array"));
     }
     else if (resKind == store::Item::FUNCTION)
     {

=== modified file 'src/runtime/core/constructors.cpp'
--- src/runtime/core/constructors.cpp	2013-05-25 14:36:27 +0000
+++ src/runtime/core/constructors.cpp	2013-06-05 07:09:43 +0000
@@ -1200,7 +1200,8 @@
           }
         }
       }
-      else if (resKind == store::Item::JSONIQ)
+      else if (resKind == store::Item::OBJECT ||
+               resKind == store::Item::ARRAY)
       {
         RAISE_ERROR_NO_PARAMS(jerr::JNTY0011, loc);
       }
@@ -1307,7 +1308,8 @@
             STACK_PUSH(true, state);
           }
         }
-        else if (resKind == store::Item::JSONIQ)
+        else if (resKind == store::Item::OBJECT ||
+                 resKind == store::Item::ARRAY)
         {
           RAISE_ERROR_NO_PARAMS(jerr::JNTY0011, loc);
         }

=== modified file 'src/runtime/hof/dynamic_fncall_iterator.cpp'
--- src/runtime/hof/dynamic_fncall_iterator.cpp	2013-05-08 20:14:47 +0000
+++ src/runtime/hof/dynamic_fncall_iterator.cpp	2013-06-05 07:09:43 +0000
@@ -180,8 +180,6 @@
   store::Item_t selectorItem1;
   store::Item_t selectorItem2;
   store::Item_t selectorItem3;
-  bool isObjectNav;
-  bool selectorError;
 
   TypeManager* tm = theSctx->get_typemanager();
 
@@ -259,16 +257,15 @@
         STACK_PUSH(true, state);
       }
 
-      // need to close here early in case the plan is completely
-      // consumed. Otherwise, the plan would still be opened
-      // if destroyed from the state's destructor.
+      // Need to close here early in case the plan is completely consumed.
+      // Otherwise, the plan would still be opened if destroyed from the
+      // state's destructor.
       state->thePlan->close(planState);
       state->theIsOpen = false;
-    } // if (theIsPartialApply)
-
+    } // if (!theIsPartialApply)
   } // if (targetItem->isFunction())
 
-  else if (targetItem->isJSONObject() || targetItem->isJSONArray())
+  else if (targetItem->isJSONItem())
   {
     if (theChildren.size() > 2)
     {
@@ -276,84 +273,93 @@
     }
     else if (theChildren.size() == 2)
     {
-      isObjectNav = targetItem->isJSONObject();
-      selectorError = false;
-
-      if (!consumeNext(selectorItem1, theChildren[1], planState))
-      {
-        selectorError = true;
-      }
-      else
-      {
-        try
-        {
-          if (selectorItem1->isNode())
+      if (consumeNext(selectorItem1, theChildren[1], planState))
+      {
+        if (consumeNext(item, theChildren[1], planState))
+        {
+          RAISE_ERROR(err::XPTY0004, loc,
+          ERROR_PARAMS(ZED(NoSeqCastToTypeWithQuantOneOrQuestion)));
+        }
+
+        // Atomize the selector item
+        switch (selectorItem1->getKind())
+        {
+        case store::Item::ATOMIC:
+        {
+          selectorItem2.transfer(selectorItem1);
+          break;
+        }
+        case store::Item::NODE:
+        {
+          store::Iterator_t iter;
+          selectorItem1->getTypedValue(selectorItem2, iter);
+
+          if (iter != NULL && iter->next(selectorItem2))
           {
-            store::Iterator_t iter;
-            
-            selectorItem1->getTypedValue(selectorItem2, iter);
-
-            if (iter != NULL)
+            if (iter->next(item))
             {
-              if (!iter->next(selectorItem2) || iter->next(item))
-              {
-                selectorError = true;
-              }
+              RAISE_ERROR(err::XPTY0004, loc,
+              ERROR_PARAMS(ZED(NoSeqCastToTypeWithQuantOneOrQuestion)));
             }
           }
+
+          break;
+        }
+        case store::Item::OBJECT:
+        {
+          RAISE_ERROR(jerr::JNTY0004, loc, ERROR_PARAMS("object"));
+        }
+        case store::Item::ARRAY:
+        {
+          RAISE_ERROR(jerr::JNTY0004, loc, ERROR_PARAMS("array"));
+        }
+        case store::Item::FUNCTION:
+        {
+          store::Item_t fnName = selectorItem1->getFunctionName();
+          RAISE_ERROR(err::FOTY0013, loc, 
+          ERROR_PARAMS(fnName.getp() ?
+                       result->getFunctionName()->getStringValue() :
+                       zstring("???")));
+        }
+        default:
+        {
+          ZORBA_ASSERT(false);
+        }
+        }
+        
+        if (selectorItem2 != NULL)
+        {
+          if (targetItem->isObject())
+          {
+            GenericCast::castToBuiltinAtomic(selectorItem3,
+                                             selectorItem2,
+                                             store::XS_STRING,
+                                             NULL,
+                                             loc);
+        
+            result = targetItem->getObjectValue(selectorItem3);
+          }
           else
           {
-            selectorItem2.transfer(selectorItem1);
-          }
-
-          if (!selectorError)
-          {
-            if (!selectorItem2->isAtomic())
-            {
-              selectorError = true;
-            }
-            else
-            {
-              store::SchemaTypeCode selectorType = 
-              (isObjectNav ? store::XS_STRING : store::XS_INTEGER);
-
-              GenericCast::castToBuiltinAtomic(selectorItem3,
-                                               selectorItem2,
-                                               selectorType,
-                                               NULL,
-                                               loc);
-              selectorError = false;
-            }
-          }
-        }
-        catch (...)
-        {
-          selectorError = true;
-        }
-      }
-        
-      if (selectorError)
-      {
-        item = (selectorItem1 == NULL ? selectorItem2 : selectorItem1);
-
-        zstring selectorType = tm->create_value_type(item)->toSchemaString();
-
-        RAISE_ERROR(err::XPTY0004, loc,
-        ERROR_PARAMS(ZED(XPTY0004_JSONIQ_SELECTOR), selectorType));
-      }
-
-      if (isObjectNav)
-        result = targetItem->getObjectValue(selectorItem3);
+            GenericCast::castToBuiltinAtomic(selectorItem3,
+                                             selectorItem2,
+                                             store::XS_INTEGER,
+                                             NULL,
+                                             loc);
+
+            result = targetItem->getArrayValue(selectorItem3->getIntegerValue());
+          }
+
+          STACK_PUSH(result != NULL, state);
+        }
+      } // there is a selector item
+    } // 1 argument 
+    else // no arguments
+    {
+      if (targetItem->isObject())
+        state->theIterator = targetItem->getObjectKeys();
       else
-        result = targetItem->getArrayValue(selectorItem3->getIntegerValue());
-      STACK_PUSH(result != NULL, state);
-    }
-    else
-    {
-      if (targetItem->isJSONArray())
         state->theIterator = targetItem->getArrayValues();
-      else if (targetItem->isJSONObject())
-        state->theIterator = targetItem->getObjectKeys();
 
       state->theIterator->open();
 
@@ -365,7 +371,7 @@
       state->theIterator->close();
     }
   }
-  else
+  else if (theSctx->language_kind() == StaticContextConsts::language_kind_xquery)
   {
     xqtref_t type = tm->create_value_type(targetItem);
 

=== modified file 'src/runtime/json/jsoniq_functions_impl.cpp'
--- src/runtime/json/jsoniq_functions_impl.cpp	2013-05-08 20:14:47 +0000
+++ src/runtime/json/jsoniq_functions_impl.cpp	2013-06-05 07:09:43 +0000
@@ -395,11 +395,11 @@
   store::Item_t& aResult,
   JSONDecodeFromRoundtripIteratorState* aState) const
 {
-  if (anItem->isJSONObject())
+  if (anItem->isObject())
   {
     return decodeObject(anItem, aResult, aState);
   }
-  else if (anItem->isJSONArray())
+  else if (anItem->isArray())
   {
     return decodeArray(anItem, aResult, aState);
   }
@@ -672,11 +672,11 @@
   store::Item_t& aResult,
   JSONEncodeForRoundtripIteratorState* aState) const
 {
-  if (anItem->isJSONObject())
+  if (anItem->isObject())
   {
     return encodeObject(anItem, aResult, aState);
   }
-  else if (anItem->isJSONArray())
+  else if (anItem->isArray())
   {
     return encodeArray(anItem, aResult, aState);
   }
@@ -757,10 +757,11 @@
 
 
 /*******************************************************************************
+  fn-jsoniq:parse-json(source as xs:string?) as json-item()*
 
+  fn-jsoniq:parse-json(source as xs:string?, $options as $object()) as json-item()*
 ********************************************************************************/
-void
-JSONParseIteratorState::init(PlanState& aState)
+void JSONParseIteratorState::init(PlanState& aState)
 {
   PlanIteratorState::init(aState);
   theAllowMultiple = true; // default
@@ -769,11 +770,12 @@
   loader_ = nullptr;
 }
 
-void
-JSONParseIteratorState::reset(PlanState& aState)
+
+void JSONParseIteratorState::reset(PlanState& aState)
 {
   PlanIteratorState::reset(aState);
-  if (theInput == NULL) {
+  if (theInput == NULL)
+  {
     delete theInputStream;
     theInputStream = nullptr;
   }
@@ -787,33 +789,34 @@
 {
   if (theInput == NULL)
     delete theInputStream;
+
   delete loader_;
 }
 
 
-bool JSONParseIterator::processBooleanOption( store::Item_t const &options,
-                                              char const *option_name,
-                                              bool *option_value ) const
+bool JSONParseIterator::processBooleanOption(
+    const store::Item_t& options,
+    char const *option_name,
+    bool* option_value) const
 {
   store::Item_t i_option_name;
   zstring z_option_name( option_name );
+
   GENV_ITEMFACTORY->createString( i_option_name, z_option_name );
+
   store::Item_t i_option_value = options->getObjectValue( i_option_name );
 
-  if ( i_option_value ) {
+  if ( i_option_value )
+  {
     store::SchemaTypeCode const option_type = i_option_value->getTypeCode();
-    if ( !TypeOps::is_subtype( option_type, store::XS_BOOLEAN ) ) {
+
+    if ( !TypeOps::is_subtype( option_type, store::XS_BOOLEAN ) )
+    {
       TypeManager const *const tm = theSctx->get_typemanager();
       xqtref_t const option_type = tm->create_value_type( i_option_value, loc );
-      throw XQUERY_EXCEPTION(
-        jerr::JNTY0020,
-        ERROR_PARAMS(
-          option_type->toSchemaString(),
-          z_option_name,
-          "xs:boolean"
-        ),
-        ERROR_LOC( loc )
-      );
+
+      RAISE_ERROR(jerr::JNTY0020, loc,
+      ERROR_PARAMS(option_type->toSchemaString(), z_option_name, "xs:boolean"));
     }
     *option_value = i_option_value->getBooleanValue();
     return true;
@@ -822,10 +825,9 @@
 }
 
 
-bool
-JSONParseIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+bool JSONParseIterator::nextImpl(
+    store::Item_t& result,
+    PlanState& planState) const
 {
   store::Item_t lInput;
   bool lStripTopLevelArray = false;
@@ -895,11 +897,186 @@
 
 
 /*******************************************************************************
-  json:names($o as object()) as xs:string*
+
+********************************************************************************/
+void JSONDocIteratorState::init(PlanState& aState)
+{
+  PlanIteratorState::init(aState);
+  theStream = nullptr;
+  theGotOne = false;
+  loader_ = nullptr;
+}
+
+
+void JSONDocIteratorState::reset(PlanState& aState)
+{
+  PlanIteratorState::reset(aState);
+  theGotOne = false;
+  delete loader_;
+  loader_ = nullptr;
+}
+
+
+JSONDocIteratorState::~JSONDocIteratorState()
+{
+  delete loader_;
+}
+
+
+bool JSONDocIterator::nextImpl(store::Item_t& result, PlanState& planState) const
+{
+  store::Item_t uriItem;
+  JSONDocIteratorState* state;
+  zstring uriString;
+  zstring lErrorMessage;
+  internal::StreamResource* lStreamResource;
+  zstring lNormUri;
+  DEFAULT_STACK_INIT(JSONDocIteratorState, state, planState);
+
+  if (consumeNext(uriItem, theChildren[0].getp(), planState))
+  {
+    uriItem->getStringValue2(uriString);
+    // Normalize input to handle filesystem paths, etc.
+    normalizeInputUri(uriString, theSctx, loc, &lNormUri);
+
+    // Resolve URI to a stream
+    state->theResource = theSctx->resolve_uri(
+        lNormUri,
+        internal::EntityData::DOCUMENT,
+        lErrorMessage);
+
+    lStreamResource =
+        dynamic_cast<internal::StreamResource*>(state->theResource.get());
+    if (lStreamResource == NULL)
+    {
+      throw XQUERY_EXCEPTION(
+          err::FODC0002,
+          ERROR_PARAMS(uriString, lErrorMessage),
+          ERROR_LOC(loc));
+    }
+
+    state->theStream = lStreamResource->getStream();
+    if (state->theStream == NULL)
+    {
+      throw XQUERY_EXCEPTION(
+          err::FODC0002,
+          ERROR_PARAMS( uriString ),
+          ERROR_LOC(loc));
+    }
+
+    state->theGotOne = false;
+    state->loader_ = new json::loader( *state->theStream, true );
+
+    while ( state->loader_->next( &result ) )
+    {
+      if (!state->theGotOne)
+      {
+        state->theGotOne = true;
+        STACK_PUSH(true, state);
+      }
+      else
+      {
+        RAISE_ERROR(jerr::JNDY0021, loc,
+        ERROR_PARAMS(ZED(JNDY0021_UnexpectedExtraContent)));
+      }
+    }
+  }
+  
+  STACK_END(state);
+}
+
+
+/*******************************************************************************
+  op_zorba:json-item-accessor($i as item(), $sel as item()) as item()?
+
+  op_zorba:json-item-accessor($i as item()) as item()?
+
+  These two are zorba internal functions that are introduced by the translator
+  when translating a dynamic function invocation (DFI) expr and we know statically
+  that the source of the DFI is a json item, but we don't know if it's going to
+  be an object or an array.
+
+  Note: the translator always wraps the $sel param to with fn:data(), so we can
+  assume here that the selector item is atomic.
+********************************************************************************/
+bool JSONItemAccessorIterator::nextImpl(
+    store::Item_t& result,
+    PlanState& planState) const
+{
+  store::Item_t input;
+  store::Item_t selector;
+  store::Item_t selector2;
+
+  JSONItemAccessorIteratorState* state;
+  DEFAULT_STACK_INIT(JSONItemAccessorIteratorState, state, planState);
+
+  consumeNext(input, theChildren[0].getp(), planState);
+
+  if (input->isArray())
+  {
+    if (theChildren.size() == 2 &&
+        consumeNext(selector, theChildren[1].getp(), planState))
+    {
+      GenericCast::castToBuiltinAtomic(selector2,
+                                       selector,
+                                       store::XS_INTEGER,
+                                       NULL,
+                                       loc);
+
+      result = input->getArrayValue(selector2->getIntegerValue());
+
+      STACK_PUSH(result != 0, state);
+    }
+    else
+    {
+      state->theIterator = input->getArrayValues();
+
+      state->theIterator->open();
+      while (state->theIterator->next(result))
+      {
+        STACK_PUSH(true, state);
+      }
+      state->theIterator->close();
+    }
+  }
+  else if (input->isObject())
+  {
+    if (theChildren.size() == 2 &&
+        consumeNext(selector, theChildren[1].getp(), planState))
+    {
+      GenericCast::castToBuiltinAtomic(selector2,
+                                       selector,
+                                       store::XS_STRING,
+                                       NULL,
+                                       loc);
+
+      result = input->getObjectValue(selector2);
+
+      STACK_PUSH(result != 0, state);
+    }
+    else
+    {
+      state->theIterator = input->getObjectKeys();
+
+      state->theIterator->open();
+      while (state->theIterator->next(result))
+      {
+        STACK_PUSH(true, state);
+      }
+      state->theIterator->close();
+    }
+  }
+
+  STACK_END(state);
+}
+
+
+/*******************************************************************************
+  json:names($o as item()) as xs:string*
 ********************************************************************************/
 bool JSONObjectNamesIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+    store::Item_t& result,
+    PlanState& planState) const
 {
   store::Item_t input;
 
@@ -908,14 +1085,17 @@
 
   consumeNext(input, theChild.getp(), planState);
 
-  state->theNames = input->getObjectKeys();
-  state->theNames->open();
-
-  while (state->theNames->next(result))
+  if (input->isObject())
   {
-    STACK_PUSH (true, state);
+    state->theNames = input->getObjectKeys();
+    state->theNames->open();
+
+    while (state->theNames->next(result))
+    {
+      STACK_PUSH (true, state);
+    }
+    state->theNames = NULL;
   }
-  state->theNames = NULL;
 
   STACK_END(state);
 }
@@ -933,33 +1113,47 @@
 
   ZORBA_ASSERT(consumeNext(obj, theChild.getp(), planState));
 
-  count = obj->getNumObjectPairs();
-  
+  if (obj->isObject())
+  {
+    count = obj->getNumObjectPairs();
+  }
+  else
+  {
+    count = 0;
+  }
+
   STACK_PUSH(GENV_ITEMFACTORY->createInteger(result, count), state);
   STACK_END(state);
 }
 
 
 /*******************************************************************************
-  json:value($o as object(), $name as xs:string) as item()?
+  json:value($o as item(), $name as item()?) as item()?
+
+  Note: the translator always wraps the $name param to a [cast as xs:string?]
+  expr, so we don's have to check the type of the selector item here.
 ********************************************************************************/
-bool
-JSONObjectValueIterator::nextImpl(
+bool JSONObjectValueIterator::nextImpl(
   store::Item_t& result,
   PlanState& planState) const
 {
-  store::Item_t lInput;
-  store::Item_t lName;
+  store::Item_t input;
+  store::Item_t name;
 
   PlanIteratorState* state;
   DEFAULT_STACK_INIT(PlanIteratorState, state, planState);
 
-  consumeNext(lInput, theChild0.getp(), planState);
-  consumeNext(lName, theChild1.getp(), planState);
-
-  result = lInput->getObjectValue(lName);
-  
-  STACK_PUSH(result != 0, state);
+  consumeNext(input, theChild0.getp(), planState);
+
+  if (input->isObject())
+  {
+    if (consumeNext(name, theChild1.getp(), planState))
+    {
+      result = input->getObjectValue(name);
+
+      STACK_PUSH(result != NULL, state);
+    }
+  }
 
   STACK_END(state);
 }
@@ -968,8 +1162,7 @@
 /*******************************************************************************
   json:project($o as object(), $names as xs:string*) as object()
 ********************************************************************************/
-bool
-JSONObjectProjectIterator::nextImpl(
+bool JSONObjectProjectIterator::nextImpl(
   store::Item_t& result,
   PlanState& planState) const
 {
@@ -1032,10 +1225,9 @@
 /*******************************************************************************
   j:size($i as array()) as xs:integer*
 ********************************************************************************/
-bool
-JSONArraySizeIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+bool JSONArraySizeIterator::nextImpl(
+    store::Item_t& result,
+    PlanState& planState) const
 {
   store::Item_t lJSONItem;
   xs_integer lSize;
@@ -1054,32 +1246,39 @@
 
 
 /*******************************************************************************
-  json:member($a as array(), $pos as xs:integer) as item()?
+  json:member($a as item(), $pos as item()?) as item()?
+
+  Note: the translator always wraps the $pos param to a [cast as xs:integer?]
+  expr, so we don's have to check the type of the selector item here.
 ********************************************************************************/
-bool
-JSONArrayMemberIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+bool JSONArrayMemberIterator::nextImpl(
+    store::Item_t& result,
+    PlanState& planState) const
 {
-  store::Item_t lInput;
-  store::Item_t lPosition;
+  store::Item_t input;
+  store::Item_t position;
 
   PlanIteratorState* state;
   DEFAULT_STACK_INIT(PlanIteratorState, state, planState);
 
-  consumeNext(lInput, theChild0.getp(), planState);
-  consumeNext(lPosition, theChild1.getp(), planState);
-
-  result = lInput->getArrayValue(lPosition->getIntegerValue());
-
-  STACK_PUSH(result != 0, state);
+  consumeNext(input, theChild0.getp(), planState);
+
+  if (input->isArray())
+  {
+    if (consumeNext(position, theChild1.getp(), planState))
+    {
+      result = input->getArrayValue(position->getIntegerValue());
+
+      STACK_PUSH(result != 0, state);
+    }
+  }
 
   STACK_END(state);
 }
 
 
 /*******************************************************************************
-  json:members($a as array()) as item()*
+  json:members($a as item()) as item()*
 ********************************************************************************/
 bool JSONArrayMembersIterator::nextImpl(
   store::Item_t& result,
@@ -1092,13 +1291,17 @@
 
   consumeNext(array, theChild.getp(), planState);
 
-  state->theMembers = array->getArrayValues();
-  state->theMembers->open();
-  while (state->theMembers->next(result))
+  if (array->isArray())
   {
-    STACK_PUSH(true, state);
+    state->theMembers = array->getArrayValues();
+
+    state->theMembers->open();
+    while (state->theMembers->next(result))
+    {
+      STACK_PUSH(true, state);
+    }
+    state->theMembers->close();
   }
-  state->theMembers->close();
 
   STACK_END(state);
 }
@@ -1115,13 +1318,21 @@
 
   ZORBA_ASSERT(consumeNext(array, theChild.getp(), planState));
 
-  STACK_PUSH(GENV_ITEMFACTORY->createInteger(result, array->getArraySize()), state);
+  if (array->isArray())
+  {
+    STACK_PUSH(GENV_ITEMFACTORY->createInteger(result, array->getArraySize()), state);
+  }
+  else
+  {
+    STACK_PUSH(GENV_ITEMFACTORY->createInteger(result, xs_integer(0)), state);
+  }
+
   STACK_END(state);
 }
 
 
 /*******************************************************************************
-  json:flatten($a as array()) as item()*
+  json:flatten($a as item()) as item()*
 
   op-zorba:flatten-internal($a as item()*) as item()*
 ********************************************************************************/
@@ -1140,121 +1351,44 @@
   PlanState& planState) const
 {
   store::Item_t item;
-  bool lFoundArray = false;
+  bool foundArray = false;
 
   JSONArrayFlattenIteratorState* state;
   DEFAULT_STACK_INIT(JSONArrayFlattenIteratorState, state, planState);
 
   consumeNext(item, theChild.getp(), planState);
 
-  assert(item->isJSONArray());
-
-  state->theStack.push(item->getArrayValues());
-  state->theStack.top()->open();
-
-  while (!state->theStack.empty())
+  if (item->isArray())
   {
-    while (state->theStack.top()->next(result))
+    state->theStack.push(item->getArrayValues());
+
+    state->theStack.top()->open();
+
+    while (!state->theStack.empty())
     {
-      if (result->isJSONArray())
+      while (state->theStack.top()->next(result))
       {
-        state->theStack.push(result->getArrayValues());
-        state->theStack.top()->open();
-        lFoundArray = true;
-        break;
-      }
+        if (result->isArray())
+        {
+          state->theStack.push(result->getArrayValues());
+          state->theStack.top()->open();
+
+          foundArray = true;
+          break;
+        }
       
-      STACK_PUSH(true, state);
-    }
-    
-    if (lFoundArray)
-    {
-      lFoundArray = false;
-      continue;
-    }
-    
-    state->theStack.top()->close();
-    state->theStack.pop();
-  }
-
-  STACK_END(state);
-}
-
-
-/*******************************************************************************
-  op_zorba:json-item-accessor($i as json-item(), $s as xs:anyAtomic) as item()?
-********************************************************************************/
-bool
-JSONItemAccessorIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
-{
-  store::Item_t input;
-  store::Item_t selector;
-
-  const TypeManager* tm = theSctx->get_typemanager();
-
-  JSONItemAccessorIteratorState* state;
-  DEFAULT_STACK_INIT(JSONItemAccessorIteratorState, state, planState);
-
-  consumeNext(input, theChildren[0].getp(), planState);
-  ZORBA_ASSERT(input->isJSONArray() || input->isJSONObject());
-
-  if (theChildren.size() == 2 &&
-      consumeNext(selector, theChildren[1].getp(), planState))
-  {
-    if (input->isJSONArray())
-    {
-      store::SchemaTypeCode type = selector->getTypeCode();
-
-      if (!TypeOps::is_subtype(type, store::XS_INTEGER))
-      {
-        xqtref_t type = tm->create_value_type(selector, loc);
-
-        RAISE_ERROR(err::XPTY0004, loc, 
-        ERROR_PARAMS(ZED(XPTY0004_NoTypePromote_23),
-                     type->toSchemaString(),
-                     GENV_TYPESYSTEM.INTEGER_TYPE_ONE->toSchemaString()));
-      }
-
-      result = input->getArrayValue(selector->getIntegerValue());
-    }
-    else if (input->isJSONObject())
-    {
-      store::SchemaTypeCode type = selector->getTypeCode();
-
-      if (!TypeOps::is_subtype(type, store::XS_STRING) &&
-          !TypeOps::is_subtype(type, store::XS_UNTYPED_ATOMIC) &&
-          !TypeOps::is_subtype(type, store::XS_ANY_URI))
-      {
-        xqtref_t type = tm->create_value_type(selector, loc);
-
-        RAISE_ERROR(err::XPTY0004, loc, 
-        ERROR_PARAMS(ZED(XPTY0004_NoTypePromote_23),
-                     type->toSchemaString(),
-                     GENV_TYPESYSTEM.STRING_TYPE_ONE->toSchemaString()));
-      }
-
-      result = input->getObjectValue(selector);
-    }
-    STACK_PUSH(result != 0, state);
-  }
-  else
-  {
-    if (input->isJSONArray())
-    {
-      state->theIterator = input->getArrayValues();
-    }
-    else if (input->isJSONObject())
-    {
-      state->theIterator = input->getObjectKeys();
-    }
-    state->theIterator->open();
-    while (state->theIterator->next(result))
-    {
-      STACK_PUSH(true, state);
-    }
-    state->theIterator->close();
+        STACK_PUSH(true, state);
+      }
+    
+      if (foundArray)
+      {
+        foundArray = false;
+        continue;
+      }
+    
+      state->theStack.top()->close();
+      state->theStack.pop();
+    }
   }
 
   STACK_END(state);
@@ -1264,10 +1398,9 @@
 /*******************************************************************************
   jn:null() as jn:null
 ********************************************************************************/
-bool
-JSONNullIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+bool JSONNullIterator::nextImpl(
+    store::Item_t& result,
+    PlanState& planState) const
 {
   PlanIteratorState* state;
   DEFAULT_STACK_INIT(PlanIteratorState, state, planState);
@@ -1281,10 +1414,9 @@
 /*******************************************************************************
   jn:is-null(xs:anyAtomicType) as xs:boolean
 ********************************************************************************/
-bool
-JSONIsNullIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+bool JSONIsNullIterator::nextImpl(
+    store::Item_t& result,
+    PlanState& planState) const
 {
   PlanIteratorState* state;
   store::Item_t lItem;
@@ -1308,8 +1440,8 @@
       $c as object())
 ********************************************************************************/
 bool JSONObjectInsertIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+    store::Item_t& result,
+    PlanState& planState) const
 {
   store::Item_t target;
   store::Item_t content;
@@ -1352,8 +1484,8 @@
       $values as item()*, 
 ********************************************************************************/
 bool JSONArrayInsertIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+    store::Item_t& result,
+    PlanState& planState) const
 {
   store::Item_t array;
   store::Item_t member;
@@ -1402,8 +1534,8 @@
       $values as item()*) 
 ********************************************************************************/
 bool JSONArrayAppendIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+    store::Item_t& result,
+    PlanState& planState) const
 {
   store::Item_t array;
   store::Item_t member;
@@ -1467,7 +1599,7 @@
 
   pul = GENV_ITEMFACTORY->createPendingUpdateList();
 
-  if (target->isJSONObject())
+  if (target->isObject())
   {
     store::SchemaTypeCode type = selector->getTypeCode();
 
@@ -1481,7 +1613,7 @@
 
     pul->addJSONObjectDelete(&loc, target, selector);
   }
-  else if (target->isJSONArray())
+  else if (target->isArray())
   {
     store::SchemaTypeCode type = selector->getTypeCode();
 
@@ -1560,7 +1692,7 @@
 
   pul = GENV_ITEMFACTORY->createPendingUpdateList();
 
-  if (target->isJSONObject())
+  if (target->isObject())
   {
     store::SchemaTypeCode type = selector->getTypeCode();
 
@@ -1574,7 +1706,7 @@
 
     pul->addJSONObjectReplaceValue(&loc, target, selector, newValue);
   }
-  else if (target->isJSONArray())
+  else if (target->isArray())
   {
     store::SchemaTypeCode type = selector->getTypeCode();
 
@@ -1604,8 +1736,8 @@
       $newName as xs:string) 
 ********************************************************************************/
 bool JSONRenameIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+    store::Item_t& result,
+    PlanState& planState) const
 {
   store::Item_t target;
   store::Item_t name;
@@ -1635,8 +1767,8 @@
 
 ********************************************************************************/
 bool JSONBoxIterator::nextImpl(
-  store::Item_t& result,
-  PlanState& planState) const
+    store::Item_t& result,
+    PlanState& planState) const
 {
   store::Item_t value1;
   store::Item_t value2;
@@ -1668,92 +1800,7 @@
   STACK_END(state);
 }
 
-/*******************************************************************************
-
-********************************************************************************/
-
-void
-JSONDocIteratorState::init(PlanState& aState)
-{
-  PlanIteratorState::init(aState);
-  theStream = nullptr;
-  theGotOne = false;
-  loader_ = nullptr;
-}
-
-void
-JSONDocIteratorState::reset(PlanState& aState)
-{
-  PlanIteratorState::reset(aState);
-  theGotOne = false;
-  delete loader_;
-  loader_ = nullptr;
-}
-
-JSONDocIteratorState::~JSONDocIteratorState()
-{
-  delete loader_;
-}
-
-bool JSONDocIterator::nextImpl(store::Item_t& result, PlanState& planState) const
-{
-  store::Item_t uriItem;
-  JSONDocIteratorState* state;
-  zstring uriString;
-  zstring lErrorMessage;
-  internal::StreamResource* lStreamResource;
-  zstring lNormUri;
-  DEFAULT_STACK_INIT(JSONDocIteratorState, state, planState);
-
-  if (consumeNext(uriItem, theChildren[0].getp(), planState))
-  {
-    uriItem->getStringValue2(uriString);
-    // Normalize input to handle filesystem paths, etc.
-    normalizeInputUri(uriString, theSctx, loc, &lNormUri);
-
-    // Resolve URI to a stream
-    state->theResource = theSctx->resolve_uri(
-        lNormUri,
-        internal::EntityData::DOCUMENT,
-        lErrorMessage);
-
-    lStreamResource =
-        dynamic_cast<internal::StreamResource*>(state->theResource.get());
-    if (lStreamResource == NULL) {
-      throw XQUERY_EXCEPTION(
-          err::FODC0002,
-          ERROR_PARAMS(uriString, lErrorMessage),
-          ERROR_LOC(loc));
-    }
-
-    state->theStream = lStreamResource->getStream();
-    if (state->theStream == NULL) {
-      throw XQUERY_EXCEPTION(
-          err::FODC0002,
-          ERROR_PARAMS( uriString ),
-          ERROR_LOC(loc));
-    }
-
-    state->theGotOne = false;
-    state->loader_ = new json::loader( *state->theStream, true );
-
-    while ( state->loader_->next( &result ) )
-    {
-      if (!state->theGotOne)
-      {
-        state->theGotOne = true;
-        STACK_PUSH(true, state);
-      } else {
-        RAISE_ERROR(
-            jerr::JNDY0021,
-            loc,
-            ERROR_PARAMS(ZED(JNDY0021_UnexpectedExtraContent)));
-      }
-    }
-  }
-  
-  STACK_END(state);
-}
+
 
 } /* namespace zorba */
 

=== modified file 'src/runtime/json/pregenerated/jsoniq_functions.cpp'
--- src/runtime/json/pregenerated/jsoniq_functions.cpp	2013-04-05 22:56:02 +0000
+++ src/runtime/json/pregenerated/jsoniq_functions.cpp	2013-06-05 07:09:43 +0000
@@ -32,7 +32,6 @@
 
 namespace zorba {
 
-#ifdef ZORBA_WITH_JSON
 // <JSONDecodeFromRoundtripIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONDecodeFromRoundtripIterator)
 
@@ -72,8 +71,7 @@
 }
 // </JSONDecodeFromRoundtripIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONEncodeForRoundtripIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONEncodeForRoundtripIterator)
 
@@ -113,8 +111,7 @@
 }
 // </JSONEncodeForRoundtripIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONParseIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONParseIterator)
 
@@ -146,8 +143,77 @@
 
 // </JSONParseIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
+// <JSONDocIterator>
+SERIALIZABLE_CLASS_VERSIONS(JSONDocIterator)
+
+void JSONDocIterator::serialize(::zorba::serialization::Archiver& ar)
+{
+  serialize_baseclass(ar,
+  (NaryBaseIterator<JSONDocIterator, JSONDocIteratorState>*)this);
+}
+
+
+void JSONDocIterator::accept(PlanIterVisitor& v) const
+{
+  v.beginVisit(*this);
+
+  std::vector<PlanIter_t>::const_iterator lIter = theChildren.begin();
+  std::vector<PlanIter_t>::const_iterator lEnd = theChildren.end();
+  for ( ; lIter != lEnd; ++lIter ){
+    (*lIter)->accept(v);
+  }
+
+  v.endVisit(*this);
+}
+
+JSONDocIterator::~JSONDocIterator() {}
+
+JSONDocIteratorState::JSONDocIteratorState() {}
+
+// </JSONDocIterator>
+
+
+// <JSONItemAccessorIterator>
+SERIALIZABLE_CLASS_VERSIONS(JSONItemAccessorIterator)
+
+void JSONItemAccessorIterator::serialize(::zorba::serialization::Archiver& ar)
+{
+  serialize_baseclass(ar,
+  (NaryBaseIterator<JSONItemAccessorIterator, JSONItemAccessorIteratorState>*)this);
+}
+
+
+void JSONItemAccessorIterator::accept(PlanIterVisitor& v) const
+{
+  v.beginVisit(*this);
+
+  std::vector<PlanIter_t>::const_iterator lIter = theChildren.begin();
+  std::vector<PlanIter_t>::const_iterator lEnd = theChildren.end();
+  for ( ; lIter != lEnd; ++lIter ){
+    (*lIter)->accept(v);
+  }
+
+  v.endVisit(*this);
+}
+
+JSONItemAccessorIterator::~JSONItemAccessorIterator() {}
+
+JSONItemAccessorIteratorState::JSONItemAccessorIteratorState() {}
+
+JSONItemAccessorIteratorState::~JSONItemAccessorIteratorState() {}
+
+
+void JSONItemAccessorIteratorState::init(PlanState& planState) {
+  PlanIteratorState::init(planState);
+}
+
+void JSONItemAccessorIteratorState::reset(PlanState& planState) {
+  PlanIteratorState::reset(planState);
+}
+// </JSONItemAccessorIterator>
+
+
 // <JSONObjectNamesIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONObjectNamesIterator)
 
@@ -183,8 +249,7 @@
 }
 // </JSONObjectNamesIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONObjectValueIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONObjectValueIterator)
 
@@ -209,8 +274,7 @@
 
 // </JSONObjectValueIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONObjectProjectIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONObjectProjectIterator)
 
@@ -235,33 +299,7 @@
 
 // </JSONObjectProjectIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
-// <JSONArraySizeIterator>
-SERIALIZABLE_CLASS_VERSIONS(JSONArraySizeIterator)
-
-void JSONArraySizeIterator::serialize(::zorba::serialization::Archiver& ar)
-{
-  serialize_baseclass(ar,
-  (UnaryBaseIterator<JSONArraySizeIterator, PlanIteratorState>*)this);
-}
-
-
-void JSONArraySizeIterator::accept(PlanIterVisitor& v) const
-{
-  v.beginVisit(*this);
-
-  theChild->accept(v);
-
-  v.endVisit(*this);
-}
-
-JSONArraySizeIterator::~JSONArraySizeIterator() {}
-
-// </JSONArraySizeIterator>
-
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONArrayMemberIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONArrayMemberIterator)
 
@@ -286,8 +324,7 @@
 
 // </JSONArrayMemberIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONArrayMembersIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONArrayMembersIterator)
 
@@ -323,8 +360,31 @@
 }
 // </JSONArrayMembersIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
+// <JSONArraySizeIterator>
+SERIALIZABLE_CLASS_VERSIONS(JSONArraySizeIterator)
+
+void JSONArraySizeIterator::serialize(::zorba::serialization::Archiver& ar)
+{
+  serialize_baseclass(ar,
+  (UnaryBaseIterator<JSONArraySizeIterator, PlanIteratorState>*)this);
+}
+
+
+void JSONArraySizeIterator::accept(PlanIterVisitor& v) const
+{
+  v.beginVisit(*this);
+
+  theChild->accept(v);
+
+  v.endVisit(*this);
+}
+
+JSONArraySizeIterator::~JSONArraySizeIterator() {}
+
+// </JSONArraySizeIterator>
+
+
 // <JSONArrayFlattenIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONArrayFlattenIterator)
 
@@ -356,80 +416,7 @@
 }
 // </JSONArrayFlattenIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
-// <JSONDocIterator>
-SERIALIZABLE_CLASS_VERSIONS(JSONDocIterator)
-
-void JSONDocIterator::serialize(::zorba::serialization::Archiver& ar)
-{
-  serialize_baseclass(ar,
-  (NaryBaseIterator<JSONDocIterator, JSONDocIteratorState>*)this);
-}
-
-
-void JSONDocIterator::accept(PlanIterVisitor& v) const
-{
-  v.beginVisit(*this);
-
-  std::vector<PlanIter_t>::const_iterator lIter = theChildren.begin();
-  std::vector<PlanIter_t>::const_iterator lEnd = theChildren.end();
-  for ( ; lIter != lEnd; ++lIter ){
-    (*lIter)->accept(v);
-  }
-
-  v.endVisit(*this);
-}
-
-JSONDocIterator::~JSONDocIterator() {}
-
-JSONDocIteratorState::JSONDocIteratorState() {}
-
-// </JSONDocIterator>
-
-#endif
-#ifdef ZORBA_WITH_JSON
-// <JSONItemAccessorIterator>
-SERIALIZABLE_CLASS_VERSIONS(JSONItemAccessorIterator)
-
-void JSONItemAccessorIterator::serialize(::zorba::serialization::Archiver& ar)
-{
-  serialize_baseclass(ar,
-  (NaryBaseIterator<JSONItemAccessorIterator, JSONItemAccessorIteratorState>*)this);
-}
-
-
-void JSONItemAccessorIterator::accept(PlanIterVisitor& v) const
-{
-  v.beginVisit(*this);
-
-  std::vector<PlanIter_t>::const_iterator lIter = theChildren.begin();
-  std::vector<PlanIter_t>::const_iterator lEnd = theChildren.end();
-  for ( ; lIter != lEnd; ++lIter ){
-    (*lIter)->accept(v);
-  }
-
-  v.endVisit(*this);
-}
-
-JSONItemAccessorIterator::~JSONItemAccessorIterator() {}
-
-JSONItemAccessorIteratorState::JSONItemAccessorIteratorState() {}
-
-JSONItemAccessorIteratorState::~JSONItemAccessorIteratorState() {}
-
-
-void JSONItemAccessorIteratorState::init(PlanState& planState) {
-  PlanIteratorState::init(planState);
-}
-
-void JSONItemAccessorIteratorState::reset(PlanState& planState) {
-  PlanIteratorState::reset(planState);
-}
-// </JSONItemAccessorIterator>
-
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONNullIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONNullIterator)
 
@@ -453,8 +440,7 @@
 
 // </JSONNullIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONIsNullIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONIsNullIterator)
 
@@ -478,8 +464,7 @@
 
 // </JSONIsNullIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONObjectInsertIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONObjectInsertIterator)
 
@@ -507,8 +492,7 @@
 
 // </JSONObjectInsertIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONArrayInsertIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONArrayInsertIterator)
 
@@ -536,8 +520,7 @@
 
 // </JSONArrayInsertIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONDeleteIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONDeleteIterator)
 
@@ -565,8 +548,7 @@
 
 // </JSONDeleteIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONReplaceValueIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONReplaceValueIterator)
 
@@ -596,8 +578,7 @@
 
 // </JSONReplaceValueIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONRenameIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONRenameIterator)
 
@@ -625,8 +606,7 @@
 
 // </JSONRenameIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONArrayAppendIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONArrayAppendIterator)
 
@@ -654,8 +634,7 @@
 
 // </JSONArrayAppendIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONBoxIterator>
 SERIALIZABLE_CLASS_VERSIONS(JSONBoxIterator)
 
@@ -679,7 +658,7 @@
 
 // </JSONBoxIterator>
 
-#endif
+
 
 }
 

=== modified file 'src/runtime/json/pregenerated/jsoniq_functions.h'
--- src/runtime/json/pregenerated/jsoniq_functions.h	2013-04-05 22:56:02 +0000
+++ src/runtime/json/pregenerated/jsoniq_functions.h	2013-06-05 07:09:43 +0000
@@ -35,7 +35,6 @@
 
 namespace zorba {
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  * Author: 
@@ -85,9 +84,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  * Author: 
@@ -138,9 +135,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  * Author: 
@@ -193,9 +188,96 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
-
-#ifdef ZORBA_WITH_JSON
+
+/**
+ * jn:json-doc
+ * Author: Zorba Team
+ */
+class JSONDocIteratorState : public PlanIteratorState
+{
+public:
+  std::auto_ptr<internal::Resource> theResource; //
+  std::istream* theStream; //
+  bool theGotOne; //
+  json::loader* loader_; //
+
+  JSONDocIteratorState();
+
+  ~JSONDocIteratorState();
+
+  void init(PlanState&);
+  void reset(PlanState&);
+};
+
+class JSONDocIterator : public NaryBaseIterator<JSONDocIterator, JSONDocIteratorState>
+{ 
+public:
+  SERIALIZABLE_CLASS(JSONDocIterator);
+
+  SERIALIZABLE_CLASS_CONSTRUCTOR2T(JSONDocIterator,
+    NaryBaseIterator<JSONDocIterator, JSONDocIteratorState>);
+
+  void serialize( ::zorba::serialization::Archiver& ar);
+
+  JSONDocIterator(
+    static_context* sctx,
+    const QueryLoc& loc,
+    std::vector<PlanIter_t>& children)
+    : 
+    NaryBaseIterator<JSONDocIterator, JSONDocIteratorState>(sctx, loc, children)
+  {}
+
+  virtual ~JSONDocIterator();
+
+  void accept(PlanIterVisitor& v) const;
+
+  bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
+};
+
+
+/**
+ * 
+ * Author: 
+ */
+class JSONItemAccessorIteratorState : public PlanIteratorState
+{
+public:
+  store::Iterator_t theIterator; //
+
+  JSONItemAccessorIteratorState();
+
+  ~JSONItemAccessorIteratorState();
+
+  void init(PlanState&);
+  void reset(PlanState&);
+};
+
+class JSONItemAccessorIterator : public NaryBaseIterator<JSONItemAccessorIterator, JSONItemAccessorIteratorState>
+{ 
+public:
+  SERIALIZABLE_CLASS(JSONItemAccessorIterator);
+
+  SERIALIZABLE_CLASS_CONSTRUCTOR2T(JSONItemAccessorIterator,
+    NaryBaseIterator<JSONItemAccessorIterator, JSONItemAccessorIteratorState>);
+
+  void serialize( ::zorba::serialization::Archiver& ar);
+
+  JSONItemAccessorIterator(
+    static_context* sctx,
+    const QueryLoc& loc,
+    std::vector<PlanIter_t>& children)
+    : 
+    NaryBaseIterator<JSONItemAccessorIterator, JSONItemAccessorIteratorState>(sctx, loc, children)
+  {}
+
+  virtual ~JSONItemAccessorIterator();
+
+  void accept(PlanIterVisitor& v) const;
+
+  bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
+};
+
+
 /**
  * 
  * Author: 
@@ -240,9 +322,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  * Author: 
@@ -272,9 +352,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  * Author: 
@@ -304,41 +382,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
-
-#ifdef ZORBA_WITH_JSON
-/**
- * 
- * Author: 
- */
-class JSONArraySizeIterator : public UnaryBaseIterator<JSONArraySizeIterator, PlanIteratorState>
-{ 
-public:
-  SERIALIZABLE_CLASS(JSONArraySizeIterator);
-
-  SERIALIZABLE_CLASS_CONSTRUCTOR2T(JSONArraySizeIterator,
-    UnaryBaseIterator<JSONArraySizeIterator, PlanIteratorState>);
-
-  void serialize( ::zorba::serialization::Archiver& ar);
-
-  JSONArraySizeIterator(
-    static_context* sctx,
-    const QueryLoc& loc,
-    PlanIter_t& child)
-    : 
-    UnaryBaseIterator<JSONArraySizeIterator, PlanIteratorState>(sctx, loc, child)
-  {}
-
-  virtual ~JSONArraySizeIterator();
-
-  void accept(PlanIterVisitor& v) const;
-
-  bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
-};
-
-#endif
-
-#ifdef ZORBA_WITH_JSON
+
 /**
  * 
  * Author: 
@@ -368,9 +412,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  * Author: 
@@ -415,9 +457,37 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
-
-#ifdef ZORBA_WITH_JSON
+
+/**
+ * 
+ * Author: 
+ */
+class JSONArraySizeIterator : public UnaryBaseIterator<JSONArraySizeIterator, PlanIteratorState>
+{ 
+public:
+  SERIALIZABLE_CLASS(JSONArraySizeIterator);
+
+  SERIALIZABLE_CLASS_CONSTRUCTOR2T(JSONArraySizeIterator,
+    UnaryBaseIterator<JSONArraySizeIterator, PlanIteratorState>);
+
+  void serialize( ::zorba::serialization::Archiver& ar);
+
+  JSONArraySizeIterator(
+    static_context* sctx,
+    const QueryLoc& loc,
+    PlanIter_t& child)
+    : 
+    UnaryBaseIterator<JSONArraySizeIterator, PlanIteratorState>(sctx, loc, child)
+  {}
+
+  virtual ~JSONArraySizeIterator();
+
+  void accept(PlanIterVisitor& v) const;
+
+  bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
+};
+
+
 /**
  * 
  *    jsoniq:flatten function
@@ -462,102 +532,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
-
-#ifdef ZORBA_WITH_JSON
-/**
- * jn:json-doc
- * Author: Zorba Team
- */
-class JSONDocIteratorState : public PlanIteratorState
-{
-public:
-  std::auto_ptr<internal::Resource> theResource; //
-  std::istream* theStream; //
-  bool theGotOne; //
-  json::loader* loader_; //
-
-  JSONDocIteratorState();
-
-  ~JSONDocIteratorState();
-
-  void init(PlanState&);
-  void reset(PlanState&);
-};
-
-class JSONDocIterator : public NaryBaseIterator<JSONDocIterator, JSONDocIteratorState>
-{ 
-public:
-  SERIALIZABLE_CLASS(JSONDocIterator);
-
-  SERIALIZABLE_CLASS_CONSTRUCTOR2T(JSONDocIterator,
-    NaryBaseIterator<JSONDocIterator, JSONDocIteratorState>);
-
-  void serialize( ::zorba::serialization::Archiver& ar);
-
-  JSONDocIterator(
-    static_context* sctx,
-    const QueryLoc& loc,
-    std::vector<PlanIter_t>& children)
-    : 
-    NaryBaseIterator<JSONDocIterator, JSONDocIteratorState>(sctx, loc, children)
-  {}
-
-  virtual ~JSONDocIterator();
-
-  void accept(PlanIterVisitor& v) const;
-
-  bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
-};
-
-#endif
-
-#ifdef ZORBA_WITH_JSON
-/**
- * 
- * Author: 
- */
-class JSONItemAccessorIteratorState : public PlanIteratorState
-{
-public:
-  store::Iterator_t theIterator; //
-
-  JSONItemAccessorIteratorState();
-
-  ~JSONItemAccessorIteratorState();
-
-  void init(PlanState&);
-  void reset(PlanState&);
-};
-
-class JSONItemAccessorIterator : public NaryBaseIterator<JSONItemAccessorIterator, JSONItemAccessorIteratorState>
-{ 
-public:
-  SERIALIZABLE_CLASS(JSONItemAccessorIterator);
-
-  SERIALIZABLE_CLASS_CONSTRUCTOR2T(JSONItemAccessorIterator,
-    NaryBaseIterator<JSONItemAccessorIterator, JSONItemAccessorIteratorState>);
-
-  void serialize( ::zorba::serialization::Archiver& ar);
-
-  JSONItemAccessorIterator(
-    static_context* sctx,
-    const QueryLoc& loc,
-    std::vector<PlanIter_t>& children)
-    : 
-    NaryBaseIterator<JSONItemAccessorIterator, JSONItemAccessorIteratorState>(sctx, loc, children)
-  {}
-
-  virtual ~JSONItemAccessorIterator();
-
-  void accept(PlanIterVisitor& v) const;
-
-  bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
-};
-
-#endif
-
-#ifdef ZORBA_WITH_JSON
+
 /**
  * 
  * Author: 
@@ -586,9 +561,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  * Author: 
@@ -618,9 +591,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  *      internal function
@@ -652,9 +623,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  *      internal function 
@@ -686,9 +655,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  *      json:delete-member
@@ -720,9 +687,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  *      internal function
@@ -755,9 +720,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  *      
@@ -789,9 +752,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  *      internal function 
@@ -823,9 +784,7 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
-#ifdef ZORBA_WITH_JSON
 /**
  * 
  *      
@@ -857,7 +816,6 @@
   bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
 };
 
-#endif
 
 }
 #endif

=== modified file 'src/runtime/pregenerated/iterator_enum.h'
--- src/runtime/pregenerated/iterator_enum.h	2013-06-04 21:47:40 +0000
+++ src/runtime/pregenerated/iterator_enum.h	2013-06-05 07:09:43 +0000
@@ -167,15 +167,15 @@
   TYPE_JSONDecodeFromRoundtripIterator,
   TYPE_JSONEncodeForRoundtripIterator,
   TYPE_JSONParseIterator,
+  TYPE_JSONDocIterator,
+  TYPE_JSONItemAccessorIterator,
   TYPE_JSONObjectNamesIterator,
   TYPE_JSONObjectValueIterator,
   TYPE_JSONObjectProjectIterator,
-  TYPE_JSONArraySizeIterator,
   TYPE_JSONArrayMemberIterator,
   TYPE_JSONArrayMembersIterator,
+  TYPE_JSONArraySizeIterator,
   TYPE_JSONArrayFlattenIterator,
-  TYPE_JSONDocIterator,
-  TYPE_JSONItemAccessorIterator,
   TYPE_JSONNullIterator,
   TYPE_JSONIsNullIterator,
   TYPE_JSONObjectInsertIterator,

=== modified file 'src/runtime/sequences/sequences_impl.cpp'
--- src/runtime/sequences/sequences_impl.cpp	2013-05-21 21:44:25 +0000
+++ src/runtime/sequences/sequences_impl.cpp	2013-06-05 07:09:43 +0000
@@ -1123,8 +1123,8 @@
     XQPCollator* collator,
     int timezone)
 {
-  assert(item1->isJSONObject());
-  assert(item2->isJSONObject());
+  assert(item1->isObject());
+  assert(item2->isObject());
 
   if (item1->getNumObjectPairs() != item2->getNumObjectPairs())
     return false;
@@ -1159,8 +1159,8 @@
     XQPCollator* collator,
     int timezone)
 {
-  assert(item1->isJSONArray());
-  assert(item2->isJSONArray());
+  assert(item1->isArray());
+  assert(item2->isArray());
 
   if (item1->getArraySize() != item2->getArraySize())
     return false;
@@ -1231,16 +1231,13 @@
   {
     return DeepEqualNodes(loc, sctx, item1, item2, collator, timezone);
   }
-  case store::Item::JSONIQ:
-  {
-    if (item1->isJSONObject())
-    {
-      return DeepEqualObjects(loc, sctx, item1, item2, collator, timezone);
-    }
-    else
-    {
-      return DeepEqualArrays(loc, sctx, item1, item2, collator, timezone);
-    }
+  case store::Item::OBJECT:
+  {
+    return DeepEqualObjects(loc, sctx, item1, item2, collator, timezone);
+  }
+  case store::Item::ARRAY:
+  {
+    return DeepEqualArrays(loc, sctx, item1, item2, collator, timezone);
   }
   default:
   {

=== modified file 'src/runtime/spec/json/jsoniq_functions.xml'
--- src/runtime/spec/json/jsoniq_functions.xml	2013-04-05 22:56:02 +0000
+++ src/runtime/spec/json/jsoniq_functions.xml	2013-06-05 07:09:43 +0000
@@ -18,8 +18,7 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-<zorba:iterator name="JSONDecodeFromRoundtripIterator"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+<zorba:iterator name="JSONDecodeFromRoundtripIterator">
 
   <zorba:function isDeterministic="true">
 
@@ -88,8 +87,7 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-<zorba:iterator name="JSONEncodeForRoundtripIterator"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+<zorba:iterator name="JSONEncodeForRoundtripIterator">
 
   <zorba:function isDeterministic="true">
 
@@ -154,8 +152,7 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-<zorba:iterator name="JSONParseIterator" arity="nary"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+<zorba:iterator name="JSONParseIterator" arity="nary">
 
   <zorba:function isDeterministic="true" generateCodegen="false">
     <zorba:signature localname="parse-json" prefix="fn-jsoniq">
@@ -203,13 +200,79 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-<zorba:iterator name="JSONObjectNamesIterator" arity="unary"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+<zorba:iterator name="JSONDocIterator">
+  
+  <zorba:description author="Zorba Team">jn:json-doc</zorba:description>
+  
+  <zorba:function>
+    
+    <zorba:signature localname="json-doc" prefix="fn-jsoniq">
+      <zorba:param>xs:string?</zorba:param>
+      <zorba:output>json-item()*</zorba:output>
+    </zorba:signature>
+    
+    <zorba:methods>
+      <zorba:accessesDynCtx returnValue="true"/>
+      <zorba:isSource returnValue="true"/>
+    </zorba:methods>
+    
+  </zorba:function>
+  
+  <zorba:state generateInit="false" generateReset="false" generateDestructor="false">
+    <zorba:member type="std::auto_ptr&lt;internal::Resource&gt;" name="theResource" brief=""/>
+    <zorba:member type="std::istream*" name="theStream" brief=""/>
+    <zorba:member type="bool" name="theGotOne" brief=""/>
+    <zorba:member type="json::loader*" name="loader_" brief=""/>
+  </zorba:state>
+  
+</zorba:iterator>
+
+
+
+<!--
+/*******************************************************************************
+********************************************************************************/
+-->
+<zorba:iterator name="JSONItemAccessorIterator">
+
+  <zorba:function isDeterministic="true">
+
+    <zorba:signature localname="json-item-accessor" prefix="op-zorba">
+      <zorba:param>item()</zorba:param>
+      <zorba:output>item()*</zorba:output>
+    </zorba:signature>
+
+    <zorba:signature localname="json-item-accessor" prefix="op-zorba">
+      <zorba:param>item()</zorba:param>
+      <zorba:param>item()?</zorba:param>
+      <zorba:output>item()?</zorba:output>
+    </zorba:signature>
+
+    <zorba:methods>
+      <zorba:propagatesInputNodes producer="0"/>
+      <zorba:mustCopyInputNodes value="false"/>
+    </zorba:methods>
+
+  </zorba:function>
+
+  <zorba:state>
+    <zorba:member type="store::Iterator_t" name="theIterator" brief=""/>
+  </zorba:state>
+
+</zorba:iterator>
+
+
+
+<!--
+/*******************************************************************************
+********************************************************************************/
+-->
+<zorba:iterator name="JSONObjectNamesIterator" arity="unary">
 
   <zorba:function isDeterministic="true">
 
     <zorba:signature localname="keys" prefix="fn-jsoniq">
-      <zorba:param>object()</zorba:param>
+      <zorba:param>item()</zorba:param>
       <zorba:output>xs:string*</zorba:output>
     </zorba:signature>
 
@@ -236,14 +299,13 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-<zorba:iterator name="JSONObjectValueIterator" arity="binary"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+<zorba:iterator name="JSONObjectValueIterator" arity="binary">
 
   <zorba:function isDeterministic="true">
 
     <zorba:signature localname="value" prefix="fn-jsoniq">
-      <zorba:param>object()</zorba:param>
-      <zorba:param>xs:string</zorba:param>
+      <zorba:param>item()</zorba:param>
+      <zorba:param>item()?</zorba:param>
       <zorba:output>item()?</zorba:output>
     </zorba:signature>
 
@@ -261,8 +323,7 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-<zorba:iterator name="JSONObjectProjectIterator" arity="binary"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+<zorba:iterator name="JSONObjectProjectIterator" arity="binary">
 
   <zorba:function isDeterministic="true">
 
@@ -286,37 +347,13 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-<zorba:iterator name="JSONArraySizeIterator" arity="unary"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
-
-  <zorba:function isDeterministic="true">
-    <zorba:signature localname="size" prefix="fn-jsoniq">
-      <zorba:param>array()</zorba:param>
-      <zorba:output>xs:integer</zorba:output>
-    </zorba:signature>
-
-    <zorba:methods>
-      <zorba:propagatesInputNodes value="false"/>
-      <zorba:mustCopyInputNodes value="false"/>
-    </zorba:methods>
-
-  </zorba:function>
-
-</zorba:iterator>
-
-
-<!--
-/*******************************************************************************
-********************************************************************************/
--->
-<zorba:iterator name="JSONArrayMemberIterator" arity="binary"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+<zorba:iterator name="JSONArrayMemberIterator" arity="binary">
 
   <zorba:function isDeterministic="true">
 
     <zorba:signature localname="member" prefix="fn-jsoniq">
-      <zorba:param>array()</zorba:param>
-      <zorba:param>xs:integer</zorba:param>
+      <zorba:param>item()</zorba:param>
+      <zorba:param>item()?</zorba:param>
       <zorba:output>item()?</zorba:output>
     </zorba:signature>
 
@@ -334,13 +371,12 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-<zorba:iterator name="JSONArrayMembersIterator" arity="unary"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+<zorba:iterator name="JSONArrayMembersIterator" arity="unary">
 
   <zorba:function isDeterministic="true">
 
     <zorba:signature localname="members" prefix="fn-jsoniq">
-      <zorba:param>array()</zorba:param>
+      <zorba:param>item()</zorba:param>
       <zorba:output>item()*</zorba:output>
     </zorba:signature>
 
@@ -367,8 +403,29 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-<zorba:iterator name="JSONArrayFlattenIterator" arity="unary"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+<zorba:iterator name="JSONArraySizeIterator" arity="unary">
+
+  <zorba:function isDeterministic="true">
+    <zorba:signature localname="size" prefix="fn-jsoniq">
+      <zorba:param>array()</zorba:param>
+      <zorba:output>xs:integer</zorba:output>
+    </zorba:signature>
+
+    <zorba:methods>
+      <zorba:propagatesInputNodes value="false"/>
+      <zorba:mustCopyInputNodes value="false"/>
+    </zorba:methods>
+
+  </zorba:function>
+
+</zorba:iterator>
+
+
+<!--
+/*******************************************************************************
+********************************************************************************/
+-->
+<zorba:iterator name="JSONArrayFlattenIterator" arity="unary">
 
   <zorba:description author="Zorba Team">
     jsoniq:flatten function
@@ -377,7 +434,7 @@
   <zorba:function isDeterministic="true">
 
     <zorba:signature localname="flatten" prefix="fn-jsoniq">
-      <zorba:param>array()</zorba:param>
+      <zorba:param>item()</zorba:param>
       <zorba:output>item()*</zorba:output>
     </zorba:signature>
 
@@ -394,78 +451,12 @@
 
 </zorba:iterator>
 
-<!--
-/*******************************************************************************
-********************************************************************************/
--->
-<zorba:iterator name="JSONDocIterator"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
-  
-  <zorba:description author="Zorba Team">jn:json-doc</zorba:description>
-  
-  <zorba:function>
-    
-    <zorba:signature localname="json-doc" prefix="fn-jsoniq">
-      <zorba:param>xs:string?</zorba:param>
-      <zorba:output>json-item()*</zorba:output>
-    </zorba:signature>
-    
-    <zorba:methods>
-      <zorba:accessesDynCtx returnValue="true"/>
-      <zorba:isSource returnValue="true"/>
-    </zorba:methods>
-    
-  </zorba:function>
-  
-  <zorba:state generateInit="false" generateReset="false" generateDestructor="false">
-    <zorba:member type="std::auto_ptr&lt;internal::Resource&gt;" name="theResource" brief=""/>
-    <zorba:member type="std::istream*" name="theStream" brief=""/>
-    <zorba:member type="bool" name="theGotOne" brief=""/>
-    <zorba:member type="json::loader*" name="loader_" brief=""/>
-  </zorba:state>
-  
-</zorba:iterator>
-
-<!--
-/*******************************************************************************
-********************************************************************************/
--->
-<zorba:iterator name="JSONItemAccessorIterator"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
-
-  <zorba:function isDeterministic="true">
-
-    <zorba:signature localname="json-item-accessor" prefix="op-zorba">
-      <zorba:param>json-item()</zorba:param>
-      <zorba:output>item()*</zorba:output>
-    </zorba:signature>
-
-    <zorba:signature localname="json-item-accessor" prefix="op-zorba">
-      <zorba:param>json-item()</zorba:param>
-      <zorba:param>xs:anyAtomicType</zorba:param>
-      <zorba:output>item()?</zorba:output>
-    </zorba:signature>
-
-    <zorba:methods>
-      <zorba:propagatesInputNodes producer="0"/>
-      <zorba:mustCopyInputNodes value="false"/>
-    </zorba:methods>
-
-  </zorba:function>
-
-  <zorba:state>
-    <zorba:member type="store::Iterator_t" name="theIterator" brief=""/>
-  </zorba:state>
-
-</zorba:iterator>
-
-
-<!--
-/*******************************************************************************
-********************************************************************************/
--->
-  <zorba:iterator name="JSONNullIterator" arity="noary"
-    preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+
+<!--
+/*******************************************************************************
+********************************************************************************/
+-->
+  <zorba:iterator name="JSONNullIterator" arity="noary">
 
     <zorba:function isDeterministic="true">
       <zorba:signature localname="null" prefix="fn-jsoniq">
@@ -481,8 +472,7 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-  <zorba:iterator name="JSONIsNullIterator" arity="unary"
-    preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+  <zorba:iterator name="JSONIsNullIterator" arity="unary">
 
     <zorba:function isDeterministic="true">
       <zorba:signature localname="is-null" prefix="fn-jsoniq">
@@ -499,8 +489,7 @@
 /*******************************************************************************
 ********************************************************************************/
 -->
-<zorba:iterator name="JSONObjectInsertIterator" arity="nary"
-  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+<zorba:iterator name="JSONObjectInsertIterator" arity="nary">
 
   <zorba:description author="Zorba Team">
       internal function
@@ -530,8 +519,7 @@
 ********************************************************************************/
 -->
 <zorba:iterator name="JSONArrayInsertIterator"
-                arity="nary"
-                preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+                arity="nary">
 
     <zorba:description author="Zorba Team">
       internal function 
@@ -562,8 +550,7 @@
 ********************************************************************************/
 -->
 <zorba:iterator name="JSONDeleteIterator"
-                arity="nary"
-                preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+                arity="nary">
 
     <zorba:description author="Zorba Team">
       json:delete-member
@@ -592,7 +579,6 @@
 ********************************************************************************/
 -->
 <zorba:iterator name="JSONReplaceValueIterator" arity="nary"
-                preprocessorGuard="#ifdef ZORBA_WITH_JSON"
                 generateConstructor="false">
 
     <zorba:description author="Zorba Team">
@@ -630,8 +616,7 @@
 ********************************************************************************/
 -->
 <zorba:iterator name="JSONRenameIterator" 
-                arity="nary"
-                preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+                arity="nary">
 
     <zorba:description author="Zorba Team">
       
@@ -660,8 +645,7 @@
 ********************************************************************************/
 -->
   <zorba:iterator name="JSONArrayAppendIterator"
-                  arity="nary"
-                  preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+                  arity="nary">
     
     <zorba:description author="Zorba Team">
       internal function 
@@ -691,8 +675,7 @@
 ********************************************************************************/
 -->
 <zorba:iterator name="JSONBoxIterator" 
-                arity="unary"
-                preprocessorGuard="#ifdef ZORBA_WITH_JSON">
+                arity="unary">
 
     <zorba:description author="Zorba Team">
       

=== modified file 'src/runtime/uris/uris_impl.cpp'
--- src/runtime/uris/uris_impl.cpp	2013-05-03 00:51:34 +0000
+++ src/runtime/uris/uris_impl.cpp	2013-06-05 07:09:43 +0000
@@ -246,7 +246,7 @@
   consumeNext(lItemURI, theChildren[0].getp(), planState);
 
   lHasSchemeField = lHasOpaqueField = lHasNotOpaqueField = false;
-  if(lItemURI->isJSONObject()) {
+  if(lItemURI->isObject()) {
     lKeys = lItemURI->getObjectKeys();
     if(!lKeys.isNull()){
       lKeys->open();

=== modified file 'src/runtime/visitors/pregenerated/planiter_visitor.h'
--- src/runtime/visitors/pregenerated/planiter_visitor.h	2013-06-04 21:47:40 +0000
+++ src/runtime/visitors/pregenerated/planiter_visitor.h	2013-06-05 07:09:43 +0000
@@ -334,69 +334,48 @@
 
     class JSONSerializeInternal;
 
-#ifdef ZORBA_WITH_JSON
     class JSONDecodeFromRoundtripIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONEncodeForRoundtripIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONParseIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
+    class JSONDocIterator;
+
+    class JSONItemAccessorIterator;
+
     class JSONObjectNamesIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONObjectValueIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONObjectProjectIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
-    class JSONArraySizeIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONArrayMemberIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONArrayMembersIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
+    class JSONArraySizeIterator;
+
     class JSONArrayFlattenIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
-    class JSONDocIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
-    class JSONItemAccessorIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONNullIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONIsNullIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONObjectInsertIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONArrayInsertIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONDeleteIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONReplaceValueIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONRenameIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONArrayAppendIterator;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     class JSONBoxIterator;
-#endif
+
     class SqrtIterator;
 
     class ExpIterator;
@@ -1230,90 +1209,69 @@
     virtual void beginVisit ( const JSONSerializeInternal& ) = 0;
     virtual void endVisit   ( const JSONSerializeInternal& ) = 0;
 
-#ifdef ZORBA_WITH_JSON
     virtual void beginVisit ( const JSONDecodeFromRoundtripIterator& ) = 0;
     virtual void endVisit   ( const JSONDecodeFromRoundtripIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONEncodeForRoundtripIterator& ) = 0;
     virtual void endVisit   ( const JSONEncodeForRoundtripIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONParseIterator& ) = 0;
     virtual void endVisit   ( const JSONParseIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
+    virtual void beginVisit ( const JSONDocIterator& ) = 0;
+    virtual void endVisit   ( const JSONDocIterator& ) = 0;
+
+    virtual void beginVisit ( const JSONItemAccessorIterator& ) = 0;
+    virtual void endVisit   ( const JSONItemAccessorIterator& ) = 0;
+
     virtual void beginVisit ( const JSONObjectNamesIterator& ) = 0;
     virtual void endVisit   ( const JSONObjectNamesIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONObjectValueIterator& ) = 0;
     virtual void endVisit   ( const JSONObjectValueIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONObjectProjectIterator& ) = 0;
     virtual void endVisit   ( const JSONObjectProjectIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
-    virtual void beginVisit ( const JSONArraySizeIterator& ) = 0;
-    virtual void endVisit   ( const JSONArraySizeIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONArrayMemberIterator& ) = 0;
     virtual void endVisit   ( const JSONArrayMemberIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONArrayMembersIterator& ) = 0;
     virtual void endVisit   ( const JSONArrayMembersIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
+    virtual void beginVisit ( const JSONArraySizeIterator& ) = 0;
+    virtual void endVisit   ( const JSONArraySizeIterator& ) = 0;
+
     virtual void beginVisit ( const JSONArrayFlattenIterator& ) = 0;
     virtual void endVisit   ( const JSONArrayFlattenIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
-    virtual void beginVisit ( const JSONDocIterator& ) = 0;
-    virtual void endVisit   ( const JSONDocIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
-    virtual void beginVisit ( const JSONItemAccessorIterator& ) = 0;
-    virtual void endVisit   ( const JSONItemAccessorIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONNullIterator& ) = 0;
     virtual void endVisit   ( const JSONNullIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONIsNullIterator& ) = 0;
     virtual void endVisit   ( const JSONIsNullIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONObjectInsertIterator& ) = 0;
     virtual void endVisit   ( const JSONObjectInsertIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONArrayInsertIterator& ) = 0;
     virtual void endVisit   ( const JSONArrayInsertIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONDeleteIterator& ) = 0;
     virtual void endVisit   ( const JSONDeleteIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONReplaceValueIterator& ) = 0;
     virtual void endVisit   ( const JSONReplaceValueIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONRenameIterator& ) = 0;
     virtual void endVisit   ( const JSONRenameIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONArrayAppendIterator& ) = 0;
     virtual void endVisit   ( const JSONArrayAppendIterator& ) = 0;
-#endif
-#ifdef ZORBA_WITH_JSON
+
     virtual void beginVisit ( const JSONBoxIterator& ) = 0;
     virtual void endVisit   ( const JSONBoxIterator& ) = 0;
-#endif
+
     virtual void beginVisit ( const SqrtIterator& ) = 0;
     virtual void endVisit   ( const SqrtIterator& ) = 0;
 

=== modified file 'src/runtime/visitors/pregenerated/printer_visitor.cpp'
--- src/runtime/visitors/pregenerated/printer_visitor.cpp	2013-06-04 21:47:40 +0000
+++ src/runtime/visitors/pregenerated/printer_visitor.cpp	2013-06-05 07:09:43 +0000
@@ -2012,7 +2012,7 @@
 }
 // </JSONSerializeInternal>
 
-#ifdef ZORBA_WITH_JSON
+
 // <JSONDecodeFromRoundtripIterator>
 void PrinterVisitor::beginVisit ( const JSONDecodeFromRoundtripIterator& a) {
   thePrinter.startBeginVisit("JSONDecodeFromRoundtripIterator", ++theId);
@@ -2026,8 +2026,7 @@
 }
 // </JSONDecodeFromRoundtripIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONEncodeForRoundtripIterator>
 void PrinterVisitor::beginVisit ( const JSONEncodeForRoundtripIterator& a) {
   thePrinter.startBeginVisit("JSONEncodeForRoundtripIterator", ++theId);
@@ -2041,8 +2040,7 @@
 }
 // </JSONEncodeForRoundtripIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONParseIterator>
 void PrinterVisitor::beginVisit ( const JSONParseIterator& a) {
   thePrinter.startBeginVisit("JSONParseIterator", ++theId);
@@ -2056,8 +2054,35 @@
 }
 // </JSONParseIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
+// <JSONDocIterator>
+void PrinterVisitor::beginVisit ( const JSONDocIterator& a) {
+  thePrinter.startBeginVisit("JSONDocIterator", ++theId);
+  printCommons( &a, theId );
+  thePrinter.endBeginVisit( theId );
+}
+
+void PrinterVisitor::endVisit ( const JSONDocIterator& ) {
+  thePrinter.startEndVisit();
+  thePrinter.endEndVisit();
+}
+// </JSONDocIterator>
+
+
+// <JSONItemAccessorIterator>
+void PrinterVisitor::beginVisit ( const JSONItemAccessorIterator& a) {
+  thePrinter.startBeginVisit("JSONItemAccessorIterator", ++theId);
+  printCommons( &a, theId );
+  thePrinter.endBeginVisit( theId );
+}
+
+void PrinterVisitor::endVisit ( const JSONItemAccessorIterator& ) {
+  thePrinter.startEndVisit();
+  thePrinter.endEndVisit();
+}
+// </JSONItemAccessorIterator>
+
+
 // <JSONObjectNamesIterator>
 void PrinterVisitor::beginVisit ( const JSONObjectNamesIterator& a) {
   thePrinter.startBeginVisit("JSONObjectNamesIterator", ++theId);
@@ -2071,8 +2096,7 @@
 }
 // </JSONObjectNamesIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONObjectValueIterator>
 void PrinterVisitor::beginVisit ( const JSONObjectValueIterator& a) {
   thePrinter.startBeginVisit("JSONObjectValueIterator", ++theId);
@@ -2086,8 +2110,7 @@
 }
 // </JSONObjectValueIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONObjectProjectIterator>
 void PrinterVisitor::beginVisit ( const JSONObjectProjectIterator& a) {
   thePrinter.startBeginVisit("JSONObjectProjectIterator", ++theId);
@@ -2101,23 +2124,7 @@
 }
 // </JSONObjectProjectIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
-// <JSONArraySizeIterator>
-void PrinterVisitor::beginVisit ( const JSONArraySizeIterator& a) {
-  thePrinter.startBeginVisit("JSONArraySizeIterator", ++theId);
-  printCommons( &a, theId );
-  thePrinter.endBeginVisit( theId );
-}
-
-void PrinterVisitor::endVisit ( const JSONArraySizeIterator& ) {
-  thePrinter.startEndVisit();
-  thePrinter.endEndVisit();
-}
-// </JSONArraySizeIterator>
-
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONArrayMemberIterator>
 void PrinterVisitor::beginVisit ( const JSONArrayMemberIterator& a) {
   thePrinter.startBeginVisit("JSONArrayMemberIterator", ++theId);
@@ -2131,8 +2138,7 @@
 }
 // </JSONArrayMemberIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONArrayMembersIterator>
 void PrinterVisitor::beginVisit ( const JSONArrayMembersIterator& a) {
   thePrinter.startBeginVisit("JSONArrayMembersIterator", ++theId);
@@ -2146,8 +2152,21 @@
 }
 // </JSONArrayMembersIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
+// <JSONArraySizeIterator>
+void PrinterVisitor::beginVisit ( const JSONArraySizeIterator& a) {
+  thePrinter.startBeginVisit("JSONArraySizeIterator", ++theId);
+  printCommons( &a, theId );
+  thePrinter.endBeginVisit( theId );
+}
+
+void PrinterVisitor::endVisit ( const JSONArraySizeIterator& ) {
+  thePrinter.startEndVisit();
+  thePrinter.endEndVisit();
+}
+// </JSONArraySizeIterator>
+
+
 // <JSONArrayFlattenIterator>
 void PrinterVisitor::beginVisit ( const JSONArrayFlattenIterator& a) {
   thePrinter.startBeginVisit("JSONArrayFlattenIterator", ++theId);
@@ -2161,38 +2180,7 @@
 }
 // </JSONArrayFlattenIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
-// <JSONDocIterator>
-void PrinterVisitor::beginVisit ( const JSONDocIterator& a) {
-  thePrinter.startBeginVisit("JSONDocIterator", ++theId);
-  printCommons( &a, theId );
-  thePrinter.endBeginVisit( theId );
-}
-
-void PrinterVisitor::endVisit ( const JSONDocIterator& ) {
-  thePrinter.startEndVisit();
-  thePrinter.endEndVisit();
-}
-// </JSONDocIterator>
-
-#endif
-#ifdef ZORBA_WITH_JSON
-// <JSONItemAccessorIterator>
-void PrinterVisitor::beginVisit ( const JSONItemAccessorIterator& a) {
-  thePrinter.startBeginVisit("JSONItemAccessorIterator", ++theId);
-  printCommons( &a, theId );
-  thePrinter.endBeginVisit( theId );
-}
-
-void PrinterVisitor::endVisit ( const JSONItemAccessorIterator& ) {
-  thePrinter.startEndVisit();
-  thePrinter.endEndVisit();
-}
-// </JSONItemAccessorIterator>
-
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONNullIterator>
 void PrinterVisitor::beginVisit ( const JSONNullIterator& a) {
   thePrinter.startBeginVisit("JSONNullIterator", ++theId);
@@ -2206,8 +2194,7 @@
 }
 // </JSONNullIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONIsNullIterator>
 void PrinterVisitor::beginVisit ( const JSONIsNullIterator& a) {
   thePrinter.startBeginVisit("JSONIsNullIterator", ++theId);
@@ -2221,8 +2208,7 @@
 }
 // </JSONIsNullIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONObjectInsertIterator>
 void PrinterVisitor::beginVisit ( const JSONObjectInsertIterator& a) {
   thePrinter.startBeginVisit("JSONObjectInsertIterator", ++theId);
@@ -2236,8 +2222,7 @@
 }
 // </JSONObjectInsertIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONArrayInsertIterator>
 void PrinterVisitor::beginVisit ( const JSONArrayInsertIterator& a) {
   thePrinter.startBeginVisit("JSONArrayInsertIterator", ++theId);
@@ -2251,8 +2236,7 @@
 }
 // </JSONArrayInsertIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONDeleteIterator>
 void PrinterVisitor::beginVisit ( const JSONDeleteIterator& a) {
   thePrinter.startBeginVisit("JSONDeleteIterator", ++theId);
@@ -2266,8 +2250,7 @@
 }
 // </JSONDeleteIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONReplaceValueIterator>
 void PrinterVisitor::beginVisit ( const JSONReplaceValueIterator& a) {
   thePrinter.startBeginVisit("JSONReplaceValueIterator", ++theId);
@@ -2281,8 +2264,7 @@
 }
 // </JSONReplaceValueIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONRenameIterator>
 void PrinterVisitor::beginVisit ( const JSONRenameIterator& a) {
   thePrinter.startBeginVisit("JSONRenameIterator", ++theId);
@@ -2296,8 +2278,7 @@
 }
 // </JSONRenameIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONArrayAppendIterator>
 void PrinterVisitor::beginVisit ( const JSONArrayAppendIterator& a) {
   thePrinter.startBeginVisit("JSONArrayAppendIterator", ++theId);
@@ -2311,8 +2292,7 @@
 }
 // </JSONArrayAppendIterator>
 
-#endif
-#ifdef ZORBA_WITH_JSON
+
 // <JSONBoxIterator>
 void PrinterVisitor::beginVisit ( const JSONBoxIterator& a) {
   thePrinter.startBeginVisit("JSONBoxIterator", ++theId);
@@ -2326,7 +2306,6 @@
 }
 // </JSONBoxIterator>
 
-#endif
 
 // <SqrtIterator>
 void PrinterVisitor::beginVisit ( const SqrtIterator& a) {

=== modified file 'src/runtime/visitors/pregenerated/printer_visitor.h'
--- src/runtime/visitors/pregenerated/printer_visitor.h	2013-06-04 21:47:40 +0000
+++ src/runtime/visitors/pregenerated/printer_visitor.h	2013-06-05 07:09:43 +0000
@@ -511,110 +511,68 @@
     void beginVisit( const JSONSerializeInternal& );
     void endVisit  ( const JSONSerializeInternal& );
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONDecodeFromRoundtripIterator& );
     void endVisit  ( const JSONDecodeFromRoundtripIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONEncodeForRoundtripIterator& );
     void endVisit  ( const JSONEncodeForRoundtripIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONParseIterator& );
     void endVisit  ( const JSONParseIterator& );
-#endif
-
-#ifdef ZORBA_WITH_JSON
+
+    void beginVisit( const JSONDocIterator& );
+    void endVisit  ( const JSONDocIterator& );
+
+    void beginVisit( const JSONItemAccessorIterator& );
+    void endVisit  ( const JSONItemAccessorIterator& );
+
     void beginVisit( const JSONObjectNamesIterator& );
     void endVisit  ( const JSONObjectNamesIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONObjectValueIterator& );
     void endVisit  ( const JSONObjectValueIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONObjectProjectIterator& );
     void endVisit  ( const JSONObjectProjectIterator& );
-#endif
-
-#ifdef ZORBA_WITH_JSON
-    void beginVisit( const JSONArraySizeIterator& );
-    void endVisit  ( const JSONArraySizeIterator& );
-#endif
-
-#ifdef ZORBA_WITH_JSON
+
     void beginVisit( const JSONArrayMemberIterator& );
     void endVisit  ( const JSONArrayMemberIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONArrayMembersIterator& );
     void endVisit  ( const JSONArrayMembersIterator& );
-#endif
-
-#ifdef ZORBA_WITH_JSON
+
+    void beginVisit( const JSONArraySizeIterator& );
+    void endVisit  ( const JSONArraySizeIterator& );
+
     void beginVisit( const JSONArrayFlattenIterator& );
     void endVisit  ( const JSONArrayFlattenIterator& );
-#endif
-
-#ifdef ZORBA_WITH_JSON
-    void beginVisit( const JSONDocIterator& );
-    void endVisit  ( const JSONDocIterator& );
-#endif
-
-#ifdef ZORBA_WITH_JSON
-    void beginVisit( const JSONItemAccessorIterator& );
-    void endVisit  ( const JSONItemAccessorIterator& );
-#endif
-
-#ifdef ZORBA_WITH_JSON
+
     void beginVisit( const JSONNullIterator& );
     void endVisit  ( const JSONNullIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONIsNullIterator& );
     void endVisit  ( const JSONIsNullIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONObjectInsertIterator& );
     void endVisit  ( const JSONObjectInsertIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONArrayInsertIterator& );
     void endVisit  ( const JSONArrayInsertIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONDeleteIterator& );
     void endVisit  ( const JSONDeleteIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONReplaceValueIterator& );
     void endVisit  ( const JSONReplaceValueIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONRenameIterator& );
     void endVisit  ( const JSONRenameIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONArrayAppendIterator& );
     void endVisit  ( const JSONArrayAppendIterator& );
-#endif
 
-#ifdef ZORBA_WITH_JSON
     void beginVisit( const JSONBoxIterator& );
     void endVisit  ( const JSONBoxIterator& );
-#endif
 
     void beginVisit( const SqrtIterator& );
     void endVisit  ( const SqrtIterator& );

=== modified file 'src/store/api/item.h'
--- src/store/api/item.h	2013-05-24 22:52:47 +0000
+++ src/store/api/item.h	2013-06-05 07:09:43 +0000
@@ -67,8 +67,9 @@
     PUL        = 0x3, 
     FUNCTION   = 0x5,
     LIST       = 0x7,
-    JSONIQ     = 0x9,
-    ERROR_     = 0xB
+    OBJECT     = 0x9,
+    ARRAY      = 0xB,
+    ERROR_     = 0xD
   };
 
 protected:
@@ -139,9 +140,17 @@
   /**
    *  @return  "true" if the item is a JSON item
    */
-  bool isJSONItem() const
-  {
-    return ((theUnion.itemKind & 0xF) == JSONIQ); 
+  bool isObject() const
+  {
+    return ((theUnion.itemKind & 0xF) == OBJECT); 
+  }
+
+  /**
+   *  @return  "true" if the item is a JSON item
+   */
+  bool isArray() const
+  {
+    return ((theUnion.itemKind & 0xF) == ARRAY); 
   }
 
   /**
@@ -191,7 +200,16 @@
   bool 
   isStructuredItem() const
   {
-    return isNode() || isJSONItem();
+    return isNode() || isObject() || isArray();
+  }
+
+  /**
+   *  @return  "true" if the item is a JSON item
+   */
+  bool 
+  isJSONItem() const
+  {
+    return (isObject() || isArray());
   }
 
   /**
@@ -200,18 +218,6 @@
   zstring printKind() const;
 
   /**
-   *  @return  "true" if the item is a JSON object item
-   */
-  virtual bool 
-  isJSONObject() const;
-
-  /**
-   *  @return  "true" if the item is a JSON array item
-   */
-  virtual bool 
-  isJSONArray() const;
-
-  /**
    *  @return the qname identifying the XQuery type of the item
    */
   virtual Item*

=== modified file 'src/store/naive/item.cpp'
--- src/store/naive/item.cpp	2013-05-21 21:44:25 +0000
+++ src/store/naive/item.cpp	2013-06-05 07:09:43 +0000
@@ -67,15 +67,14 @@
     SYNC_CODE(static_cast<const simplestore::XmlNode*>(this)->getRCLock()->release());
     return;
   }
-#ifdef ZORBA_WITH_JSON
-  case JSONIQ:
+  case OBJECT:
+  case ARRAY:
   {
     SYNC_CODE(static_cast<const simplestore::json::JSONItem*>(this)->getRCLock()->acquire());
     ++theRefCount;
     SYNC_CODE(static_cast<const simplestore::json::JSONItem*>(this)->getRCLock()->release());
     return;
   }
-#endif
   case ATOMIC:
   case ERROR_:
   {
@@ -149,8 +148,8 @@
     SYNC_CODE(static_cast<const simplestore::XmlNode*>(this)->getRCLock()->release());
     return;
   }
-#ifdef ZORBA_WITH_JSON
-  case JSONIQ:
+  case OBJECT:
+  case ARRAY:
   {
     SYNC_CODE(static_cast<const simplestore::json::JSONItem*>(this)->getRCLock()->acquire());
 
@@ -164,7 +163,6 @@
     SYNC_CODE(static_cast<const simplestore::json::JSONItem*>(this)->getRCLock()->release());
     return;
   }
-#endif
   case ATOMIC:
   case ERROR_:
   {
@@ -236,36 +234,21 @@
 }
 
 
-#ifdef ZORBA_WITH_JSON
-
-bool Item::isJSONObject() const
-{
-  return false;
-}
-
-
-bool Item::isJSONArray() const
-{
-  return false;
-}
-
-#endif
-
-
 zstring Item::printKind() const
 {
-  if (isNode())
+  switch (getKind())
+  {
+  case ATOMIC:
+    return "atomic";
+
+  case NODE:
     return "node";
 
-  switch (theUnion.itemKind)
-  {
-  case ATOMIC:
-    return "atomic";
+  case OBJECT:
+    return "object";
 
-#ifdef ZORBA_WITH_JSON
-  case JSONIQ:
-    return "json";
-#endif
+  case ARRAY:
+    return "array";
 
   case FUNCTION:
     return "function";

=== modified file 'src/store/naive/json_items.cpp'
--- src/store/naive/json_items.cpp	2013-04-16 21:12:12 +0000
+++ src/store/naive/json_items.cpp	2013-06-05 07:09:43 +0000
@@ -254,9 +254,7 @@
       store::Item_t lKey = lIter->first;
       store::Item_t lValue = lIter->second;
       
-      if (lValue->isJSONObject() ||
-          lValue->isJSONArray() ||
-          lValue->isNode())
+      if (lValue->isStructuredItem())
       {
         store::Item_t lCopiedValue = lValue->copy(NULL, copymode);
         lNewObject->add(lKey, lCopiedValue, false);
@@ -270,7 +268,7 @@
 
   if (parent)
   {
-    assert(parent->isJSONArray());
+    assert(parent->isArray());
     assert(dynamic_cast<JSONArray*>(parent));
     JSONArray* a = static_cast<JSONArray*>(parent);
 
@@ -322,7 +320,7 @@
 
     store::Item* lValue = thePairs[lPosition].second;
 
-    if (lValue->isJSONArray())
+    if (lValue->isArray())
     {
       static_cast<SimpleJSONArray*>(lValue)->push_back(aValue);
     }
@@ -1129,9 +1127,7 @@
     {
       store::Item_t lValue = *lIter;
 
-      if (lValue->isJSONObject() ||
-          lValue->isJSONArray() ||
-          lValue->isNode())
+      if (lValue->isStructuredItem())
       {
         lValue = lValue->copy(NULL, copymode);
       }
@@ -1142,7 +1138,7 @@
 
   if (parent)
   {
-    assert(parent->isJSONArray());
+    assert(parent->isArray());
     JSONArray* a = static_cast<JSONArray*>(parent);
     a->push_back(lNewArray);
   }

=== modified file 'src/store/naive/json_items.h'
--- src/store/naive/json_items.h	2013-04-22 16:50:49 +0000
+++ src/store/naive/json_items.h	2013-06-05 07:09:43 +0000
@@ -112,7 +112,7 @@
 public:
   SYNC_CODE(RCLock* getRCLock() const { return &theRCLock; })
 
-  JSONItem() : StructuredItem(store::Item::JSONIQ), theCollectionInfo(NULL) {}
+  JSONItem(store::Item::ItemKind k) : StructuredItem(k), theCollectionInfo(NULL) {}
 
   virtual ~JSONItem();
   
@@ -168,6 +168,8 @@
 {
 public:
 
+  JSONObject() : JSONItem(store::Item::OBJECT) {}
+
   // store API
 
   virtual store::StoreConsts::JSONItemKind getJSONItemKind() const 
@@ -175,8 +177,6 @@
     return store::StoreConsts::jsonObject;
   }
 
-  virtual bool isJSONObject() const { return true; }
-
   virtual store::Iterator_t getObjectKeys() const = 0;
 
   virtual store::Item_t getObjectValue(const store::Item_t& aKey) const = 0;
@@ -242,7 +242,7 @@
   Pairs  thePairs;
 
 public:
-  SimpleJSONObject() {}
+  SimpleJSONObject() : JSONObject() {}
 
   virtual ~SimpleJSONObject();
 
@@ -312,12 +312,10 @@
 class JSONArray : public JSONItem
 {
 public:
-  JSONArray() : JSONItem() {}
+  JSONArray() : JSONItem(store::Item::ARRAY) {}
 
   // store API
   
-  bool isJSONArray() const { return true; }
-
   store::StoreConsts::JSONItemKind
   getJSONItemKind() const { return store::StoreConsts::jsonArray; }
 
@@ -391,8 +389,9 @@
   Members theContent;
 
 public:
-  SimpleJSONArray()
-  {}
+  SimpleJSONArray() : JSONArray()
+  {
+  }
 
   SimpleJSONArray(size_t aReservedSize)
   {

=== modified file 'src/store/naive/node_iterators.cpp'
--- src/store/naive/node_iterators.cpp	2013-04-24 17:26:02 +0000
+++ src/store/naive/node_iterators.cpp	2013-06-05 07:09:43 +0000
@@ -266,10 +266,9 @@
     {
       if (!item->isNode())
       {
-#ifdef ZORBA_WITH_JSON
         // If no JSON item should be found (like in a path expression), this
         // is handled by the consumer of this iterator.
-        ZORBA_ASSERT(item->isJSONObject() || item->isJSONArray());
+        ZORBA_ASSERT(item->isJSONItem());
 
         json::JSONItem* jsonItem = static_cast<json::JSONItem*>(item.getp());
 
@@ -289,9 +288,6 @@
 
         result = jsonItem;
         return true;
-#else
-        ZORBA_ASSERT_WITH_MSG(false, "Non-node found in node sorting iterator.");
-#endif
       }
 
       theNodes.push_back(reinterpret_cast<XmlNode*>(item.release()));

=== modified file 'src/store/naive/pul_primitives.cpp'
--- src/store/naive/pul_primitives.cpp	2013-04-29 14:39:04 +0000
+++ src/store/naive/pul_primitives.cpp	2013-06-05 07:09:43 +0000
@@ -29,9 +29,7 @@
 #include "node_factory.h"
 #include "simple_index.h"
 #include "simple_index_value.h"
-#ifdef ZORBA_WITH_JSON
 #include "json_items.h"
-#endif
 
 #include "store/api/iterator.h"
 #include "store/api/copymode.h"
@@ -40,9 +38,7 @@
 #include "diagnostics/xquery_diagnostics.h"
 #include "diagnostics/util_macros.h"
 
-#ifdef ZORBA_WITH_JSON
 using namespace zorba::simplestore::json;
-#endif
 
 namespace zorba {
 
@@ -2001,7 +1997,7 @@
 
 void UpdJSONObjectInsert::apply()
 {
-  ZORBA_ASSERT(theTarget->isJSONObject());
+  ZORBA_ASSERT(theTarget->isObject());
 
   JSONObject* obj = static_cast<JSONObject*>(theTarget.getp());
 
@@ -2049,7 +2045,7 @@
   UpdatePrimitive(pul, loc, target),
   theName(name)
 {
-  assert(theTarget->isJSONObject());
+  assert(theTarget->isObject());
 }
 
 
@@ -2185,7 +2181,7 @@
   UpdatePrimitive(pul, loc, target),
   thePosition(pos)
 {
-  assert(theTarget->isJSONArray());
+  assert(theTarget->isArray());
 }
 
 
@@ -2197,7 +2193,7 @@
   UpdatePrimitive(pul, loc, target),
   thePosition(0)
 {
-  assert(theTarget->isJSONArray());
+  assert(theTarget->isArray());
 }
 
 

=== modified file 'src/store/naive/simple_item_factory.cpp'
--- src/store/naive/simple_item_factory.cpp	2013-05-22 02:22:35 +0000
+++ src/store/naive/simple_item_factory.cpp	2013-06-05 07:09:43 +0000
@@ -2385,7 +2385,7 @@
 
     while (source->next(objItem))
     {
-      assert(objItem->isJSONObject());
+      assert(objItem->isObject());
 
       json::SimpleJSONObject* sourceObj = 
       static_cast<json::SimpleJSONObject*>(objItem.getp());
@@ -2397,10 +2397,7 @@
       while (sourceKeys->next(keyItem))
       {
         valueItem = objItem->getObjectValue(keyItem);
-        if (copymode.theDoCopy &&
-            (valueItem->isJSONArray() ||
-             valueItem->isJSONObject() ||
-             valueItem->isNode()))
+        if (copymode.theDoCopy && valueItem->isStructuredItem())
         {
           valueItem = valueItem->copy(NULL, copymode);
         }

=== modified file 'src/store/naive/simple_pul.cpp'
--- src/store/naive/simple_pul.cpp	2013-05-08 20:14:47 +0000
+++ src/store/naive/simple_pul.cpp	2013-06-05 07:09:43 +0000
@@ -1104,7 +1104,6 @@
 }
 
 
-#ifdef ZORBA_WITH_JSON
 /*******************************************************************************
 
 ********************************************************************************/
@@ -1113,7 +1112,7 @@
      store::Item_t& target,
      store::Item_t& content)
 {
-  assert(content->isJSONObject());
+  assert(content->isObject());
   assert(dynamic_cast<json::JSONObject*>(content.getp()));
   json::JSONObject* lObject = static_cast<json::JSONObject*>(content.getp());
   store::Iterator_t lIterator = lObject->getObjectKeys();
@@ -1678,8 +1677,6 @@
   }
 }
 
-#endif // ZORBA_WITH_JSON
-
 
 /*******************************************************************************
   Merge PULs
@@ -3470,7 +3467,6 @@
     applyList(theReplaceContentList);
     applyList(theDeleteList);
 
-#ifdef ZORBA_WITH_JSON
     applyList(theJSONObjectDeleteList);
     applyList(theJSONObjectReplaceValueList);
     applyList(theJSONObjectRenameList);
@@ -3485,7 +3481,7 @@
       NodeToUpdatesMap::iterator end = theNodeToUpdatesMap.end();
       for (; ite != end; ++ite)
       {
-        if (!(*ite).first->isJSONArray())
+        if (!(*ite).first->isArray())
           continue;
 
         NodeUpdates* updates = (*ite).second;
@@ -3500,7 +3496,6 @@
         }
       }
     }
-#endif
 
     // Check if any inconsistencies that were detected during the application
     // of XQUF primitives were only temporary and have been resolved by now.
@@ -3643,7 +3638,6 @@
     }
     theMergeList.clear();
 
-#ifdef ZORBA_WITH_JSON
     undoList(theJSONObjectInsertList);
     undoList(theJSONObjectRenameList);
     undoList(theJSONObjectReplaceValueList);
@@ -3658,7 +3652,7 @@
       NodeToUpdatesMap::iterator end = theNodeToUpdatesMap.end();
       for (; ite != end; ++ite)
       {
-        if (!(*ite).first->isJSONArray())
+        if (!(*ite).first->isArray())
           continue;
 
         NodeUpdates* updates = (*ite).second;
@@ -3671,7 +3665,6 @@
         }
       }
     }
-#endif
 
     undoList(theDeleteList);
     undoList(theReplaceContentList);

=== modified file 'src/zorbaserialization/serialize_zorba_types.cpp'
--- src/zorbaserialization/serialize_zorba_types.cpp	2013-05-22 02:22:35 +0000
+++ src/zorbaserialization/serialize_zorba_types.cpp	2013-06-05 07:09:43 +0000
@@ -322,11 +322,9 @@
     kind = obj->getKind();
 
     if (kind == store::Item::NODE ||
-        kind == store::Item::FUNCTION
-#ifdef ZORBA_WITH_JSON
-        || kind == store::Item::JSONIQ
-#endif
-        )
+        kind == store::Item::FUNCTION ||
+        kind == store::Item::OBJECT ||
+        kind == store::Item::ARRAY)
     {
       ar.set_is_temp_field(true);
     }
@@ -337,11 +335,9 @@
                                    ARCHIVE_FIELD_PTR);
 
     if (kind == store::Item::NODE ||
-        kind == store::Item::FUNCTION
-#ifdef ZORBA_WITH_JSON
-        || kind == store::Item::JSONIQ
-#endif
-        )
+        kind == store::Item::FUNCTION ||
+        kind == store::Item::OBJECT ||
+        kind == store::Item::ARRAY)
     {
       ar.set_is_temp_field(false);
     }
@@ -369,8 +365,8 @@
 
         break;
       }
-#ifdef ZORBA_WITH_JSON
-      case store::Item::JSONIQ:
+      case store::Item::OBJECT:
+      case store::Item::ARRAY:
       {
         ar.set_is_temp_field(true);
         ar.set_is_temp_field_one_level(true);
@@ -382,7 +378,6 @@
 
         break;
       }
-#endif
       case store::Item::FUNCTION:
       {
         FunctionItem* fitem = static_cast<FunctionItem*>(obj);
@@ -461,8 +456,8 @@
 
         break;
       }
-#ifdef ZORBA_WITH_JSON
-      case store::Item::JSONIQ:
+      case store::Item::OBJECT:
+      case store::Item::ARRAY:
       {
         ar.set_is_temp_field(true);
         ar.set_is_temp_field_one_level(true);
@@ -474,7 +469,6 @@
 
         break;
       }
-#endif
       case store::Item::FUNCTION:
       {
         FunctionItem* fitem = NULL;

=== modified file 'test/fots/CMakeLists.txt'
--- test/fots/CMakeLists.txt	2013-06-05 08:41:43 +0000
+++ test/fots/CMakeLists.txt	2013-06-05 07:09:43 +0000
@@ -345,6 +345,7 @@
 EXPECTED_FOTS_FAILURE (xs-anyURI cbcl-anyURI-006 0)
 EXPECTED_FOTS_FAILURE (xs-base64Binary base64-115 0)
 EXPECTED_FOTS_FAILURE (fn-function-lookup fn-function-lookup-062 0)
+EXPECTED_FOTS_FAILURE (misc-HigherOrderFunctions xqhof11 0)
 EXPECTED_FOTS_FAILURE (misc-HigherOrderFunctions xqhof12 0)
 EXPECTED_FOTS_FAILURE (xs-error xs-error-005 1170470)
 EXPECTED_FOTS_FAILURE (xs-error xs-error-006 1170470)
@@ -369,6 +370,23 @@
 EXPECTED_FOTS_FAILURE (fn-function-lookup fn-function-lookup-424 1182910)
 EXPECTED_FOTS_FAILURE (fn-function-lookup fn-function-lookup-426 1182910)
 EXPECTED_FOTS_FAILURE (fn-function-lookup fn-function-lookup-430 1182910)
+<<<<<<< TREE
+=======
+EXPECTED_FOTS_FAILURE (fn-function-lookup fn-function-lookup-431 1182910)
+EXPECTED_FOTS_FAILURE (fn-function-lookup fn-function-lookup-432 1182910)
+EXPECTED_FOTS_FAILURE (fn-function-lookup fn-function-lookup-530 0)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair for-each-pair-001 1182910)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair for-each-pair-002 1182910)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair for-each-pair-003 1182910)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair for-each-pair-004 1182910)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair for-each-pair-005 1182910)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair for-each-pair-006 1182910)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair for-each-pair-007 1182910)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair for-each-pair-008 1182910)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair fn-for-each-pair-008 1182910)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair fn-for-each-pair-017 1182910)
+EXPECTED_FOTS_FAILURE (fn-for-each-pair fn-for-each-pair-025 1182910)
+>>>>>>> MERGE-SOURCE
 EXPECTED_FOTS_FAILURE (fn-for-each-pair fn-for-each-pair-026 1182910)
 EXPECTED_FOTS_FAILURE (prod-NamedFunctionRef function-literal-062 1182910)
 EXPECTED_FOTS_FAILURE (prod-NamedFunctionRef function-literal-424 1182910)

=== removed file 'test/rbkt/Queries/zorba/jsoniq/value_02.jq'
--- test/rbkt/Queries/zorba/jsoniq/value_02.jq	2013-03-20 22:49:31 +0000
+++ test/rbkt/Queries/zorba/jsoniq/value_02.jq	1970-01-01 00:00:00 +0000
@@ -1,2 +0,0 @@
-let $o := ({ "foo" : "bar"}, [ 1 ])
-return $o.foo


Follow ups