- return throwVMError(exec, createError(exec, "No input to stringify"));
- LocalScope scope(exec->globalData());
- Local<Unknown> value(exec->globalData(), exec->argument(0));
- Local<Unknown> replacer(exec->globalData(), exec->argument(1));
- Local<Unknown> space(exec->globalData(), exec->argument(2));
- return JSValue::encode(Stringifier(exec, replacer, space).stringify(value).get());
+ return throwVMError(exec, createError(exec, ASCIILiteral("No input to stringify")));
+ LocalScope scope(exec->vm());
+ Local<Unknown> value(exec->vm(), exec->uncheckedArgument(0));
+ Local<Unknown> replacer(exec->vm(), exec->argument(1));
+ Local<Unknown> space(exec->vm(), exec->argument(2));
+ JSValue result = Stringifier(exec, replacer, space).stringify(value).get();
+ return JSValue::encode(result);
+}
+
+JSValue JSONParse(ExecState* exec, const String& json)
+{
+ LocalScope scope(exec->vm());
+
+ if (json.is8Bit()) {
+ LiteralParser<LChar> jsonParser(exec, json.characters8(), json.length(), StrictJSON);
+ return jsonParser.tryLiteralParse();
+ }
+
+ LiteralParser<UChar> jsonParser(exec, json.characters16(), json.length(), StrictJSON);
+ return jsonParser.tryLiteralParse();