// Increments global program stack information private void IncreaseProgramStack() { Depth++; LocalOffsets.Push(LocalOffset); ParameterOffsets.Push(ParameterOffset); LocalOffset = GlobalConfiguration.BaseLocalOffset; ParameterOffset = GlobalConfiguration.BaseParameterOffset; }
// Decrements global program stack information private void DecreaseProgramStack() { OutputThreeAddressCode($"ENDP {CurrentFunction.Lexeme}{Environment.NewLine}"); SymbolTable.OutputSymbolTable(Depth); SymbolTable.DeleteDepth(Depth); Depth--; if (!CommonTools.SemanticAnalysisDebug) { CurrentFunction.LocalsSize = Math.Abs(LocalOffset) - Math.Abs(GlobalConfiguration.BaseLocalOffset); CurrentFunction.ParametersSize = Math.Abs(ParameterOffset) - GlobalConfiguration.BaseParameterOffset; } LocalOffset = LocalOffsets.Pop(); ParameterOffset = ParameterOffsets.Pop(); }