@@ -559,6 +559,31 @@ bool CheckLoad(InterpState &S, CodePtr OpPC, const Pointer &Ptr,
559559 return true ;
560560}
561561
562+ // / This is not used by any of the opcodes directly. It's used by
563+ // / EvalEmitter to do the final lvalue-to-rvalue conversion.
564+ bool CheckFinalLoad (InterpState &S, CodePtr OpPC, const Pointer &Ptr) {
565+ if (!CheckLive (S, OpPC, Ptr, AK_Read))
566+ return false ;
567+ if (!CheckConstant (S, OpPC, Ptr))
568+ return false ;
569+
570+ if (!CheckDummy (S, OpPC, Ptr, AK_Read))
571+ return false ;
572+ if (!CheckExtern (S, OpPC, Ptr))
573+ return false ;
574+ if (!CheckRange (S, OpPC, Ptr, AK_Read))
575+ return false ;
576+ if (!CheckActive (S, OpPC, Ptr, AK_Read))
577+ return false ;
578+ if (!CheckInitialized (S, OpPC, Ptr, AK_Read))
579+ return false ;
580+ if (!CheckTemporary (S, OpPC, Ptr, AK_Read))
581+ return false ;
582+ if (!CheckMutable (S, OpPC, Ptr))
583+ return false ;
584+ return true ;
585+ }
586+
562587bool CheckStore (InterpState &S, CodePtr OpPC, const Pointer &Ptr) {
563588 if (!CheckLive (S, OpPC, Ptr, AK_Assign))
564589 return false ;
0 commit comments