@@ -549,9 +549,9 @@ XDRResult js::PrivateScriptData::XDR(XDRState<mode>* xdr, HandleScript script,
549
549
HandleScriptSourceObject sourceObject,
550
550
HandleScope scriptEnclosingScope,
551
551
HandleFunction fun) {
552
+ uint32_t nscopes = 0 ;
552
553
uint32_t nconsts = 0 ;
553
554
uint32_t nobjects = 0 ;
554
- uint32_t nscopes = 0 ;
555
555
uint32_t ntrynotes = 0 ;
556
556
uint32_t nscopenotes = 0 ;
557
557
uint32_t nresumeoffsets = 0 ;
@@ -3223,6 +3223,45 @@ PrivateScriptData* PrivateScriptData::new_(JSContext* cx, uint32_t nscopes,
3223
3223
nscopenotes, nresumeoffsets);
3224
3224
}
3225
3225
3226
+ /* static */ bool PrivateScriptData::InitFromEmitter (
3227
+ JSContext* cx, js::HandleScript script, frontend::BytecodeEmitter* bce) {
3228
+ uint32_t nscopes = bce->scopeList .length ();
3229
+ uint32_t nconsts = bce->numberList .length ();
3230
+ uint32_t nobjects = bce->objectList .length ;
3231
+ uint32_t ntrynotes = bce->tryNoteList .length ();
3232
+ uint32_t nscopenotes = bce->scopeNoteList .length ();
3233
+ uint32_t nresumeoffsets = bce->resumeOffsetList .length ();
3234
+
3235
+ // Create and initialize PrivateScriptData
3236
+ if (!JSScript::createPrivateScriptData (cx, script, nscopes, nconsts, nobjects,
3237
+ ntrynotes, nscopenotes,
3238
+ nresumeoffsets)) {
3239
+ return false ;
3240
+ }
3241
+
3242
+ js::PrivateScriptData* data = script->data_ ;
3243
+ if (nscopes) {
3244
+ bce->scopeList .finish (data->scopes ());
3245
+ }
3246
+ if (nconsts) {
3247
+ bce->numberList .finish (data->consts ());
3248
+ }
3249
+ if (nobjects) {
3250
+ bce->objectList .finish (data->objects ());
3251
+ }
3252
+ if (ntrynotes) {
3253
+ bce->tryNoteList .finish (data->tryNotes ());
3254
+ }
3255
+ if (nscopenotes) {
3256
+ bce->scopeNoteList .finish (data->scopeNotes ());
3257
+ }
3258
+ if (nresumeoffsets) {
3259
+ bce->resumeOffsetList .finish (data->resumeOffsets ());
3260
+ }
3261
+
3262
+ return true ;
3263
+ }
3264
+
3226
3265
void PrivateScriptData::traceChildren (JSTracer* trc) {
3227
3266
auto scopearray = scopes ();
3228
3267
TraceRange (trc, scopearray.size (), scopearray.data (), " scopes" );
@@ -3575,10 +3614,8 @@ bool JSScript::fullyInitFromEmitter(JSContext* cx, HandleScript script,
3575
3614
script->setFlag (ImmutableFlags::NeedsFunctionEnvironmentObjects,
3576
3615
NeedsFunctionEnvironmentObjects (bce));
3577
3616
3578
- if (!createPrivateScriptData (
3579
- cx, script, bce->scopeList .length (), bce->numberList .length (),
3580
- bce->objectList .length , bce->tryNoteList .length (),
3581
- bce->scopeNoteList .length (), bce->resumeOffsetList .length ())) {
3617
+ // Create and initialize PrivateScriptData
3618
+ if (!PrivateScriptData::InitFromEmitter (cx, script, bce)) {
3582
3619
return false ;
3583
3620
}
3584
3621
@@ -3599,26 +3636,6 @@ bool JSScript::fullyInitFromEmitter(JSContext* cx, HandleScript script,
3599
3636
return false ;
3600
3637
}
3601
3638
3602
- js::PrivateScriptData* data = script->data_ ;
3603
- if (bce->numberList .length () != 0 ) {
3604
- bce->numberList .finish (data->consts ());
3605
- }
3606
- if (bce->objectList .length != 0 ) {
3607
- bce->objectList .finish (data->objects ());
3608
- }
3609
- if (bce->scopeList .length () != 0 ) {
3610
- bce->scopeList .finish (data->scopes ());
3611
- }
3612
- if (bce->tryNoteList .length () != 0 ) {
3613
- bce->tryNoteList .finish (data->tryNotes ());
3614
- }
3615
- if (bce->scopeNoteList .length () != 0 ) {
3616
- bce->scopeNoteList .finish (data->scopeNotes ());
3617
- }
3618
- if (bce->resumeOffsetList .length () != 0 ) {
3619
- bce->resumeOffsetList .finish (data->resumeOffsets ());
3620
- }
3621
-
3622
3639
// There shouldn't be any fallible operation after initFromFunctionBox,
3623
3640
// JSFunction::hasUncompletedScript relies on the fact that the existence
3624
3641
// of the pointer to JSScript means the pointed JSScript is complete.
0 commit comments