@@ -4277,11 +4277,28 @@ _ALWAYSINLINE JsErrorCode CompileRun(
4277
4277
{
4278
4278
PARAM_NOT_NULL (scriptVal);
4279
4279
VALIDATE_JSREF (scriptVal);
4280
+ PARAM_NOT_NULL (sourceUrl);
4280
4281
4281
4282
bool isExternalArray = Js::ExternalArrayBuffer::Is (scriptVal),
4282
4283
isString = false ;
4283
4284
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
4285
4302
{
4286
4303
isString = Js::JavascriptString::Is (scriptVal);
4287
4304
if (!isString)
@@ -4290,36 +4307,30 @@ _ALWAYSINLINE JsErrorCode CompileRun(
4290
4307
}
4291
4308
}
4292
4309
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 ();
4300
4315
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
+ }
4313
4319
4314
- const wchar_t *url;
4320
+ if (!Js::JavascriptString::Is (sourceUrl))
4321
+ {
4322
+ return JsErrorInvalidArgument;
4323
+ }
4315
4324
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)
4321
4332
{
4322
- return JsErrorInvalidArgument ;
4333
+ return error ;
4323
4334
}
4324
4335
4325
4336
return RunScriptCore (scriptVal, script, cb, scriptFlag,
0 commit comments