void routineExit(SymTableNodePtr routineIdPtr) { if(debugger) debugger->traceRoutineExit(routineIdPtr); //----------------------------------------- // De-alloc parameters & local variables... SymTableNodePtr idPtr; for(idPtr = (SymTableNodePtr)(routineIdPtr->defn.info.routine.params); idPtr != nullptr; idPtr = idPtr->next) freeLocal(idPtr); for(idPtr = (SymTableNodePtr)(routineIdPtr->defn.info.routine.locals); idPtr != nullptr; idPtr = idPtr->next) if(idPtr->defn.info.data.varType == VAR_TYPE_NORMAL) freeLocal(idPtr); StackFrameHeaderPtr headerPtr = (StackFrameHeaderPtr)stackFrameBasePtr; codeSegmentPtr = headerPtr->returnAddress.address; if(routineIdPtr->typePtr == nullptr) tos = stackFrameBasePtr - 1; else tos = stackFrameBasePtr; stackFrameBasePtr = (StackItemPtr)headerPtr->dynamicLink.address; }