Skip to content
This repository was archived by the owner on Oct 15, 2020. It is now read-only.

Commit 3ec2f4f

Browse files
chakrashim: Fix JsParse/JsRun APIs
PR-URL: #140 Reviewed-By: Hitesh Kanwathirtha <hiteshk@microsoft.com> Reviewed-By: Jianchun Xu <Jianchun.Xu@microsoft.com> Reviewed-By: Kunal Pathak <Kunal.Pathak@microsoft.com>
1 parent e3860a2 commit 3ec2f4f

File tree

1 file changed

+38
-27
lines changed

1 file changed

+38
-27
lines changed

deps/chakrashim/core/lib/Jsrt/Jsrt.cpp

Lines changed: 38 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4277,11 +4277,28 @@ _ALWAYSINLINE JsErrorCode CompileRun(
42774277
{
42784278
PARAM_NOT_NULL(scriptVal);
42794279
VALIDATE_JSREF(scriptVal);
4280+
PARAM_NOT_NULL(sourceUrl);
42804281

42814282
bool isExternalArray = Js::ExternalArrayBuffer::Is(scriptVal),
42824283
isString = false;
42834284
bool isUtf8 = !(parseAttributes & JsParseScriptAttributeArrayBufferIsUtf16Encoded);
4284-
if (!isExternalArray)
4285+
4286+
LoadScriptFlag scriptFlag = LoadScriptFlag_None;
4287+
const byte* script;
4288+
size_t cb;
4289+
const wchar_t *url;
4290+
4291+
if (isExternalArray)
4292+
{
4293+
script = ((Js::ExternalArrayBuffer*)(scriptVal))->GetBuffer();
4294+
4295+
cb = ((Js::ExternalArrayBuffer*)(scriptVal))->GetByteLength();
4296+
4297+
scriptFlag = (LoadScriptFlag)(isUtf8 ?
4298+
LoadScriptFlag_ExternalArrayBuffer | LoadScriptFlag_Utf8Source :
4299+
LoadScriptFlag_ExternalArrayBuffer);
4300+
}
4301+
else
42854302
{
42864303
isString = Js::JavascriptString::Is(scriptVal);
42874304
if (!isString)
@@ -4290,36 +4307,30 @@ _ALWAYSINLINE JsErrorCode CompileRun(
42904307
}
42914308
}
42924309

4293-
LoadScriptFlag scriptFlag;
4294-
const byte* script = isExternalArray ?
4295-
((Js::ExternalArrayBuffer*)(scriptVal))->GetBuffer() :
4296-
(const byte*)((Js::JavascriptString*)(scriptVal))->GetSz();
4297-
const size_t cb = isExternalArray ?
4298-
((Js::ExternalArrayBuffer*)(scriptVal))->GetByteLength() :
4299-
((Js::JavascriptString*)(scriptVal))->GetLength();
4310+
JsErrorCode error = GlobalAPIWrapper_NoRecord([&]() -> JsErrorCode {
4311+
if (isString)
4312+
{
4313+
Js::JavascriptString* jsString = Js::JavascriptString::FromVar(scriptVal);
4314+
script = (const byte*)jsString->GetSz();
43004315

4301-
if (isExternalArray && isUtf8)
4302-
{
4303-
scriptFlag = (LoadScriptFlag) (LoadScriptFlag_ExternalArrayBuffer | LoadScriptFlag_Utf8Source);
4304-
}
4305-
else if (isUtf8)
4306-
{
4307-
scriptFlag = (LoadScriptFlag) (LoadScriptFlag_Utf8Source);
4308-
}
4309-
else
4310-
{
4311-
scriptFlag = LoadScriptFlag_None;
4312-
}
4316+
// JavascriptString is 2 bytes (wchar_t/char16)
4317+
cb = jsString->GetLength() * sizeof(wchar_t);
4318+
}
43134319

4314-
const wchar_t *url;
4320+
if (!Js::JavascriptString::Is(sourceUrl))
4321+
{
4322+
return JsErrorInvalidArgument;
4323+
}
43154324

4316-
if (sourceUrl && Js::JavascriptString::Is(sourceUrl))
4317-
{
4318-
url = ((Js::JavascriptString*)(sourceUrl))->GetSz();
4319-
}
4320-
else
4325+
url = Js::JavascriptString::FromVar(sourceUrl)->GetSz();
4326+
4327+
return JsNoError;
4328+
4329+
});
4330+
4331+
if (error != JsNoError)
43214332
{
4322-
return JsErrorInvalidArgument;
4333+
return error;
43234334
}
43244335

43254336
return RunScriptCore(scriptVal, script, cb, scriptFlag,

0 commit comments

Comments
 (0)