anchor.diff:    exit aReviver.CallEx(aCaller, aRoot,aName, lItem);
   end;
   
  +
   method GlobalObject.JSONStr(aExecutionContext: ExecutionContext; aStack: List<Object>; aGap, aIndent: string; aReplacerFunction: EcmaScriptBaseFunctionObject; 
         aProplist: List<String>; aWork: EcmaScriptObject; aValue: String): string;
   begin
     var value := aWork.Get(aExecutionContext, 0, aValue);
     var lObj := EcmaScriptObject(Value);
  -  if lObj<> nil then begin
  +  if  (assigned(lObj))  then  begin
       var lCall := EcmaScriptBaseFunctionObject(lObj.Get(aExecutionContext, 0, 'toJSON'));
  -    if lCall <> nil then
  -      value := lCall.CallEx(aExecutionContext, lObj, aValue);
  +    if  (assigned(lCall))  then
  +      exit  (String(lCall.CallEx(aExecutionContext, lObj, aValue)));
     end;
     if aReplacerFunction <> nil then begin
       value := aReplacerFunction.CallEx(aExecutionContext, aWork,aValue, Value);
  
positive.code:   exit nil;
  end;
  
  class method GlobalObject.JSONQuote(val: String): string;
  begin
    var sb := new StringBuilder;
    sb.Append('"');
    for i: Integer := 0 to val.Length -1 do begin
      case val[i] of
        '"': sb.Append('\"');
        '\': sb.Append('\\');
        #10: sb.Append('\n');
        #13: sb.Append('\r');
        #12: sb.Append('\f');
        #9: sb.Append('\t');
        #8: sb.Append('\b');
        #0 .. #7, #11, #14 ..#31: begin
          sb.Append('\u');
          sb.Append(Integer(val[i]).ToString('x4'));
        end
      else
        sb.Append(val[i]);
      end; // case
    end;
  
    sb.Append('"');
    exit sb.ToString;
  end;
  
  end.
  
negative.code:     if lObj.Class = 'String' then Value := lObj.Value;
      if lObj.Class = 'Boolean' then Value := lObj.Value;
    end;
  
    var lResult: String := JSON.ToString(value);
    if  (assigned(lResult))  then
      exit  (lResult);
  
    lObj := EcmaScriptObject(VAlue);
    if (lObj <> nil) and ((lObj is not EcmaScriptBaseFunctionObject) or (lObj is EcmaScriptObjectWrapper)) then begin
      if aStack.Contains(lObj) then RaiseNativeError(NativeErrorType.TypeError, 'Recursive JSON structure');
  