VirtualBox

Changeset 102582 in vbox for trunk


Ignore:
Timestamp:
Dec 12, 2023 8:50:56 AM (10 months ago)
Author:
vboxsync
Message:

VMM/IEM: Use a nested function for implicitly freeing simple variables. bugref:10371

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8vePython.py

    r102581 r102582  
    289289                del dVars[sVarName];
    290290
     291        def implicitFree(oStmt, dFreedVars, dVars, sVar):
     292            oVarInfo = dVars.get(sVar);
     293            if oVarInfo:
     294                dFreedVars[sVar] = oVarInfo;
     295                del dVars[sVar];
     296            else:
     297                self.raiseProblem('Variable %s was used after implictly freed by %s!' % (sVar, oStmt.sName,));
     298
    291299        dFreedVars = {};
    292300        for iStmt in range(len(aoStmts) - 1, -1, -1):
     
    380388                    #
    381389                    for sParam in oStmt.asParams:
    382                         oVarInfo = dVars.get(sParam);
    383                         if oVarInfo:
    384                             dFreedVars[sParam] = oVarInfo;
    385                             del dVars[sParam];
    386                         else:
    387                             self.raiseProblem('Variable %s was used after implictly freed by %s!' % (sParam, oStmt.sName,));
     390                        implicitFree(oStmt, dFreedVars, dVars, sParam);
    388391
    389392                elif oStmt.sName in ('IEM_MC_PUSH_U16', 'IEM_MC_PUSH_U32', 'IEM_MC_PUSH_U32_SREG', 'IEM_MC_PUSH_U64',
     
    394397                    #
    395398                    for sParam in oStmt.asParams:
    396                         oVarInfo = dVars.get(sParam);
    397                         if oVarInfo:
    398                             dFreedVars[sParam] = oVarInfo;
    399                             del dVars[sParam];
    400                         else:
    401                             self.raiseProblem('Variable %s was used after implictly freed by %s!' % (sParam, oStmt.sName,));
     399                        implicitFree(oStmt, dFreedVars, dVars, sParam);
    402400                else:
    403401                    #
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette