diff --git a/lib/Parser/rterrors.h b/lib/Parser/rterrors.h
index 38b3be27e86..8b82e1110e8 100644
--- a/lib/Parser/rterrors.h
+++ b/lib/Parser/rterrors.h
@@ -342,3 +342,14 @@ RT_ERROR_MSG(JSERR_ResolveExportFailed, 5647, "Resolve export %s failed due to c
RT_ERROR_MSG(JSERR_ObjectCoercible, 5648, "", "Cannot convert null or undefined to object", kjstTypeError, 0)
RT_ERROR_MSG(JSERR_SIMDConversion, 5649, "%s: cannot be converted to a number", "Cannot be converted to a number", kjstTypeError, 0)
+
+
+// JSON.parse errors. When this happens we want to make it explicitly clear the issue is in JSON.parse and not in the code
+RT_ERROR_MSG(JSERR_JsonSyntax, 5650, "JSON.parse Error: Unexpected input at position:%s", "JSON.parse syntax error", kjstTypeError, 0)
+RT_ERROR_MSG(JSERR_JsonNoColon, 5651,"JSON.parse Error: Expected ':' at position:%s", "JSON.parse syntax error", kjstTypeError, 0)
+RT_ERROR_MSG(JSERR_JsonNoRbrack, 5652, "JSON.parse Error: Expected ']' at position:%s", "JSON.parse syntax error", kjstTypeError, 0)
+RT_ERROR_MSG(JSERR_JsonNoRcurly, 5653, "JSON.parse Error: Expected '}' at position:%s", "JSON.parse syntax error", kjstTypeError, 0)
+RT_ERROR_MSG(JSERR_JsonBadNumber, 5654, "JSON.parse Error: Invalid number at position:%s", "JSON.parse syntax error", kjstTypeError, 0)
+RT_ERROR_MSG(JSERR_JsonIllegalChar, 5655, "JSON.parse Error: Invalid character at position:%s", "JSON.parse syntax error", kjstTypeError, 0)
+RT_ERROR_MSG(JSERR_JsonBadHexDigit, 5656, "JSON.parse Error: Expected hexadecimal digit at position:%s", "JSON.parse syntax error", kjstTypeError, 0)
+RT_ERROR_MSG(JSERR_JsonNoStrEnd, 5657, "JSON.parse Error: Unterminated string constant at position:%s", "JSON.parse syntax error", kjstTypeError, 0)
diff --git a/lib/Runtime/Library/JSONParser.cpp b/lib/Runtime/Library/JSONParser.cpp
index ce1dceb2a37..d19f704d711 100644
--- a/lib/Runtime/Library/JSONParser.cpp
+++ b/lib/Runtime/Library/JSONParser.cpp
@@ -35,7 +35,7 @@ namespace JSON
Js::Var ret = ParseObject();
if (m_token.tk != tkEOF)
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRsyntax);
+ m_scanner.ThrowSyntaxError(JSERR_JsonSyntax);
}
return ret;
}
@@ -232,7 +232,7 @@ namespace JSON
}
else
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRbadNumber);
+ m_scanner.ThrowSyntaxError(JSERR_JsonBadNumber);
}
case tkLBrack:
@@ -260,11 +260,11 @@ namespace JSON
Scan();
if(tkRBrack == m_token.tk)
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRillegalChar);
+ m_scanner.ThrowSyntaxError(JSERR_JsonIllegalChar);
}
}
//check and consume the ending ']'
- CheckCurrentToken(tkRBrack, ERRnoRbrack);
+ CheckCurrentToken(tkRBrack, JSERR_JsonNoRbrack);
return arrayObj;
}
@@ -311,7 +311,7 @@ namespace JSON
//pick "name"
if(tkStrCon != m_token.tk)
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRsyntax);
+ m_scanner.ThrowSyntaxError(JSERR_JsonIllegalChar);
}
// currentStrLength = length w/o null-termination
@@ -332,7 +332,7 @@ namespace JSON
//check and consume ":"
if(Scan() != tkColon )
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRnoColon);
+ m_scanner.ThrowSyntaxError(JSERR_JsonNoColon);
}
Scan();
@@ -365,7 +365,7 @@ namespace JSON
//check and consume ":"
if(Scan() != tkColon )
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRnoColon);
+ m_scanner.ThrowSyntaxError(JSERR_JsonNoColon);
}
Scan();
Js::Var value = ParseObject();
@@ -404,12 +404,12 @@ namespace JSON
}
// check and consume the ending '}"
- CheckCurrentToken(tkRCurly, ERRnoRcurly);
+ CheckCurrentToken(tkRCurly, JSERR_JsonNoRcurly);
return object;
}
default:
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRsyntax);
+ m_scanner.ThrowSyntaxError(JSERR_JsonSyntax);
}
}
} // namespace JSON
diff --git a/lib/Runtime/Library/JSONParser.h b/lib/Runtime/Library/JSONParser.h
index 35d7cae1050..a59de86e23e 100644
--- a/lib/Runtime/Library/JSONParser.h
+++ b/lib/Runtime/Library/JSONParser.h
@@ -70,7 +70,7 @@ namespace JSON
void CheckCurrentToken(int tk, int wErr)
{
if (m_token.tk != tk)
- Js::JavascriptError::ThrowSyntaxError(scriptContext, wErr);
+ m_scanner.ThrowSyntaxError(wErr);
Scan();
}
diff --git a/lib/Runtime/Library/JSONScanner.cpp b/lib/Runtime/Library/JSONScanner.cpp
index 2a557d14789..609fa0476c5 100644
--- a/lib/Runtime/Library/JSONScanner.cpp
+++ b/lib/Runtime/Library/JSONScanner.cpp
@@ -82,7 +82,7 @@ namespace JSON
const char16* saveCurrentChar = currentChar;
if(!IsJSONNumber())
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRbadNumber);
+ ThrowSyntaxError(JSERR_JsonBadNumber);
}
currentChar = saveCurrentChar;
double val;
@@ -90,7 +90,7 @@ namespace JSON
val = Js::NumberUtilities::StrToDbl(currentChar, &end, scriptContext);
if(currentChar == end)
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRbadNumber);
+ ThrowSyntaxError(JSERR_JsonBadNumber);
}
AssertMsg(!Js::JavascriptNumber::IsNan(val), "Bad result from string to double conversion");
pToken->tk = tkFltCon;
@@ -121,7 +121,7 @@ namespace JSON
currentChar += 3;
return (pToken->tk = tkNULL);
}
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRillegalChar);
+ ThrowSyntaxError(JSERR_JsonIllegalChar);
case 't':
//check for 'true'
@@ -130,7 +130,7 @@ namespace JSON
currentChar += 3;
return (pToken->tk = tkTRUE);
}
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRillegalChar);
+ ThrowSyntaxError(JSERR_JsonIllegalChar);
case 'f':
//check for 'false'
@@ -139,7 +139,7 @@ namespace JSON
currentChar += 4;
return (pToken->tk = tkFALSE);
}
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRillegalChar);
+ ThrowSyntaxError(JSERR_JsonIllegalChar);
case '{':
return (pToken->tk = tkLCurly);
@@ -148,7 +148,7 @@ namespace JSON
return (pToken->tk = tkRCurly);
default:
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRillegalChar);
+ ThrowSyntaxError(JSERR_JsonIllegalChar);
}
}
@@ -245,12 +245,12 @@ namespace JSON
else if (ch <= 0x1F)
{
//JSON doesn't accept \u0000 - \u001f range, LS(\u2028) and PS(\u2029) are ok
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRillegalChar);
+ ThrowSyntaxError(JSERR_JsonIllegalChar);
}
else if ( 0 == ch )
{
currentChar--;
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRnoStrEnd);
+ ThrowSyntaxError(JSERR_JsonNoStrEnd);
}
else if ('\\' == ch)
{
@@ -258,7 +258,7 @@ namespace JSON
// unlikely V5.8 regular chars are not escaped, i.e '\g'' in a string is illegal not 'g'
if (currentChar >= inputText + inputLen )
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRnoStrEnd);
+ ThrowSyntaxError(JSERR_JsonNoStrEnd);
}
ch = ReadNextChar();
@@ -266,7 +266,7 @@ namespace JSON
{
case 0:
currentChar--;
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRnoStrEnd);
+ ThrowSyntaxError(JSERR_JsonNoStrEnd);
case '"':
case '/':
@@ -301,30 +301,30 @@ namespace JSON
if (currentChar + 3 >= inputText + inputLen)
{
//no room left for 4 hex chars
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRnoStrEnd);
+ ThrowSyntaxError(JSERR_JsonNoStrEnd);
}
if (!Js::NumberUtilities::FHexDigit((WCHAR)ReadNextChar(), &tempHex))
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRbadHexDigit);
+ ThrowSyntaxError(JSERR_JsonBadHexDigit);
}
chcode = tempHex * 0x1000;
if (!Js::NumberUtilities::FHexDigit((WCHAR)ReadNextChar(), &tempHex))
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRbadHexDigit);
+ ThrowSyntaxError(JSERR_JsonBadHexDigit);
}
chcode += tempHex * 0x0100;
if (!Js::NumberUtilities::FHexDigit((WCHAR)ReadNextChar(), &tempHex))
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRbadHexDigit);
+ ThrowSyntaxError(JSERR_JsonBadHexDigit);
}
chcode += tempHex * 0x0010;
if (!Js::NumberUtilities::FHexDigit((WCHAR)ReadNextChar(), &tempHex))
{
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRbadHexDigit);
+ ThrowSyntaxError(JSERR_JsonBadHexDigit);
}
chcode += tempHex;
AssertMsg(chcode == (chcode & 0xFFFF), "Bad unicode code");
@@ -334,7 +334,7 @@ namespace JSON
default:
// Any other '\o' is an error in JSON
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRillegalChar);
+ ThrowSyntaxError(JSERR_JsonIllegalChar);
}
// flush
@@ -367,7 +367,7 @@ namespace JSON
if (!endFound)
{
// no ending '"' found
- Js::JavascriptError::ThrowSyntaxError(scriptContext, ERRnoStrEnd);
+ ThrowSyntaxError(JSERR_JsonNoStrEnd);
}
if (isStringDirectInputTextMapped == false)
diff --git a/lib/Runtime/Library/JSONScanner.h b/lib/Runtime/Library/JSONScanner.h
index f91bef78681..e8c75d6ee0a 100644
--- a/lib/Runtime/Library/JSONScanner.h
+++ b/lib/Runtime/Library/JSONScanner.h
@@ -20,9 +20,16 @@ namespace JSON
::Js::ScriptContext* sc, const char16* current, ArenaAllocator* allocator);
void Finalizer();
- char16* GetCurrentString(){return currentString;}
- uint GetCurrentStringLen(){return currentIndex;}
+ char16* GetCurrentString() { return currentString; }
+ uint GetCurrentStringLen() { return currentIndex; }
+ uint GetScanPosition() { return uint(currentChar - inputText); }
+ void __declspec(noreturn) ThrowSyntaxError(int wErr)
+ {
+ char16 scanPos[16];
+ ::_itow_s(GetScanPosition(), scanPos, _countof(scanPos) / sizeof(char16), 10);
+ Js::JavascriptError::ThrowSyntaxError(scriptContext, wErr, scanPos);
+ }
private:
diff --git a/test/JSON/jx2.baseline b/test/JSON/jx2.baseline
index 2c4eb8a4bc8..b4be89e4bb6 100644
--- a/test/JSON/jx2.baseline
+++ b/test/JSON/jx2.baseline
@@ -194,7 +194,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -328,7 +328,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -462,7 +462,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -655,7 +655,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -848,7 +848,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -885,7 +885,7 @@ true
.........."nullMember": null,
.........."stringmember": "this string ends the obj. You should not see functionMember and undefinedMember"
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Object with nested objects and array ------
{
@@ -915,14 +915,14 @@ true
..........},
.........."stringmember": "this string ends the obj. You should not see functionMember and undefinedMember"
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Simple array ------
[
.........."document.location",
.........."foolish"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Complex array ------
[
@@ -951,7 +951,7 @@ true
..........],
.........."[0]-document.location, [1]-string, [2]-number, [3]-date, [4]-empty obj, [5]-missing, [6]-obj, [7]-null, [8]-undef, [9]-function, [10]-nestedArray, [11]-this"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
@@ -1029,7 +1029,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1163,7 +1163,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1319,7 +1319,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1475,7 +1475,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1524,7 +1524,7 @@ true
.........."document.location",
.........."foolish"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Complex array ------
[
@@ -1547,7 +1547,7 @@ true
..........],
.........."[0]-document.location, [1]-string, [2]-number, [3]-date, [4]-empty obj, [5]-missing, [6]-obj, [7]-null, [8]-undef, [9]-function, [10]-nestedArray, [11]-this"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
@@ -1625,7 +1625,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1759,7 +1759,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1925,7 +1925,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2091,7 +2091,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2138,14 +2138,14 @@ true
....................}
..........}
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Simple array ------
[
.........."document.location",
.........."foolish"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Complex array ------
[
@@ -2170,7 +2170,7 @@ true
..........],
.........."[0]-document.location, [1]-string, [2]-number, [3]-date, [4]-empty obj, [5]-missing, [6]-obj, [7]-null, [8]-undef, [9]-function, [10]-nestedArray, [11]-this"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
@@ -2248,7 +2248,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2382,7 +2382,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2548,7 +2548,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2714,7 +2714,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2761,14 +2761,14 @@ true
....................}
..........}
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Simple array ------
[
.........."document.location",
.........."foolish"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Complex array ------
[
@@ -2793,7 +2793,7 @@ true
..........],
.........."[0]-document.location, [1]-string, [2]-number, [3]-date, [4]-empty obj, [5]-missing, [6]-obj, [7]-null, [8]-undef, [9]-function, [10]-nestedArray, [11]-this"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
@@ -2871,7 +2871,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -3005,7 +3005,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -3202,7 +3202,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -3399,7 +3399,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -3436,7 +3436,7 @@ true
.........."nullMember": null,
.........."stringmember": "this string ends the obj. You should not see functionMember and undefinedMember"
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Object with nested objects and array ------
{
@@ -3470,14 +3470,14 @@ true
..........},
.........."stringmember": "this string ends the obj. You should not see functionMember and undefinedMember"
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Simple array ------
[
.........."document.location",
.........."foolish"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Complex array ------
[
@@ -3506,4 +3506,4 @@ true
..........],
.........."[0]-document.location, [1]-string, [2]-number, [3]-date, [4]-empty obj, [5]-missing, [6]-obj, [7]-null, [8]-undef, [9]-function, [10]-nestedArray, [11]-this"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
diff --git a/test/JSON/rlexe.xml b/test/JSON/rlexe.xml
index d59ae447229..e30af8e616a 100644
--- a/test/JSON/rlexe.xml
+++ b/test/JSON/rlexe.xml
@@ -89,4 +89,10 @@
jsonParseWalkTest.baseline
+
+
+ syntaxError.js
+ syntaxError.baseline
+
+
diff --git a/test/JSON/syntaxError.baseline b/test/JSON/syntaxError.baseline
new file mode 100644
index 00000000000..d3ac16adf36
--- /dev/null
+++ b/test/JSON/syntaxError.baseline
@@ -0,0 +1,7 @@
+SyntaxError: JSON.parse Error: Unexpected input at position:0
+SyntaxError: JSON.parse Error: Invalid number at position:2
+SyntaxError: JSON.parse Error: Unterminated string constant at position:9
+SyntaxError: JSON.parse Error: Expected ':' at position:9
+SyntaxError: JSON.parse Error: Expected '}' at position:9
+SyntaxError: JSON.parse Error: Expected ']' at position:3
+SyntaxError: JSON.parse Error: Invalid character at position:5
diff --git a/test/JSON/syntaxError.js b/test/JSON/syntaxError.js
new file mode 100644
index 00000000000..b4e8882790f
--- /dev/null
+++ b/test/JSON/syntaxError.js
@@ -0,0 +1,12 @@
+//-------------------------------------------------------------------------------------------------------
+// Copyright (C) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
+//-------------------------------------------------------------------------------------------------------
+
+try { JSON.parse(''); } catch(e) { WScript.Echo(e); }
+try { JSON.parse('--'); } catch(e) { WScript.Echo(e); }
+try { JSON.parse('{"asdf }'); } catch(e) { WScript.Echo(e); }
+try { JSON.parse('{"asdf" }'); } catch(e) { WScript.Echo(e); }
+try { JSON.parse('{"asdf":1'); } catch(e) { WScript.Echo(e); }
+try { JSON.parse("[23"); } catch(e) { WScript.Echo(e); }
+try { JSON.parse("[23,]"); } catch(e) { WScript.Echo(e); }
diff --git a/test/es5/jx3.baseline b/test/es5/jx2.baseline
similarity index 94%
rename from test/es5/jx3.baseline
rename to test/es5/jx2.baseline
index 2c4eb8a4bc8..b4be89e4bb6 100644
--- a/test/es5/jx3.baseline
+++ b/test/es5/jx2.baseline
@@ -194,7 +194,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -328,7 +328,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -462,7 +462,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -655,7 +655,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -848,7 +848,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -885,7 +885,7 @@ true
.........."nullMember": null,
.........."stringmember": "this string ends the obj. You should not see functionMember and undefinedMember"
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Object with nested objects and array ------
{
@@ -915,14 +915,14 @@ true
..........},
.........."stringmember": "this string ends the obj. You should not see functionMember and undefinedMember"
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Simple array ------
[
.........."document.location",
.........."foolish"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Complex array ------
[
@@ -951,7 +951,7 @@ true
..........],
.........."[0]-document.location, [1]-string, [2]-number, [3]-date, [4]-empty obj, [5]-missing, [6]-obj, [7]-null, [8]-undef, [9]-function, [10]-nestedArray, [11]-this"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
@@ -1029,7 +1029,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1163,7 +1163,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1319,7 +1319,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1475,7 +1475,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1524,7 +1524,7 @@ true
.........."document.location",
.........."foolish"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Complex array ------
[
@@ -1547,7 +1547,7 @@ true
..........],
.........."[0]-document.location, [1]-string, [2]-number, [3]-date, [4]-empty obj, [5]-missing, [6]-obj, [7]-null, [8]-undef, [9]-function, [10]-nestedArray, [11]-this"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
@@ -1625,7 +1625,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1759,7 +1759,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -1925,7 +1925,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2091,7 +2091,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2138,14 +2138,14 @@ true
....................}
..........}
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Simple array ------
[
.........."document.location",
.........."foolish"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Complex array ------
[
@@ -2170,7 +2170,7 @@ true
..........],
.........."[0]-document.location, [1]-string, [2]-number, [3]-date, [4]-empty obj, [5]-missing, [6]-obj, [7]-null, [8]-undef, [9]-function, [10]-nestedArray, [11]-this"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
@@ -2248,7 +2248,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2382,7 +2382,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2548,7 +2548,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2714,7 +2714,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -2761,14 +2761,14 @@ true
....................}
..........}
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Simple array ------
[
.........."document.location",
.........."foolish"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Complex array ------
[
@@ -2793,7 +2793,7 @@ true
..........],
.........."[0]-document.location, [1]-string, [2]-number, [3]-date, [4]-empty obj, [5]-missing, [6]-obj, [7]-null, [8]-undef, [9]-function, [10]-nestedArray, [11]-this"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
@@ -2871,7 +2871,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -3005,7 +3005,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -3202,7 +3202,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -3399,7 +3399,7 @@ null
------ JSON test stringify: undefined ------
undefined
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:1
------ JSON test stringify: Date(2008, 10, 10) ------
"2008-11-10T08:00:00.000Z"
@@ -3436,7 +3436,7 @@ true
.........."nullMember": null,
.........."stringmember": "this string ends the obj. You should not see functionMember and undefinedMember"
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Object with nested objects and array ------
{
@@ -3470,14 +3470,14 @@ true
..........},
.........."stringmember": "this string ends the obj. You should not see functionMember and undefinedMember"
}
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Simple array ------
[
.........."document.location",
.........."foolish"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
------ JSON test stringify: Complex array ------
[
@@ -3506,4 +3506,4 @@ true
..........],
.........."[0]-document.location, [1]-string, [2]-number, [3]-date, [4]-empty obj, [5]-missing, [6]-obj, [7]-null, [8]-undef, [9]-function, [10]-nestedArray, [11]-this"
]
-!!Exception: SyntaxError: Invalid character
+!!Exception: SyntaxError: JSON.parse Error: Invalid character at position:3
diff --git a/test/es5/rlexe.xml b/test/es5/rlexe.xml
index 78aefab19d1..97f1302257f 100644
--- a/test/es5/rlexe.xml
+++ b/test/es5/rlexe.xml
@@ -66,7 +66,7 @@
jx2.js
- jx3.baseline
+ jx2.baseline
fail_mutators,exclude_jenkins