From 7ab98a5a9e286d52dbdb84f6177142b52b0d6915 Mon Sep 17 00:00:00 2001 From: FellippeHeitor Date: Sat, 2 Oct 2021 03:52:40 -0300 Subject: [PATCH] Remove previous variables from Watch List if TYPEs change --- source/ide/ide_methods.bas | 7 +++++++ source/qb64.bas | 24 ++++++++++++++++-------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/source/ide/ide_methods.bas b/source/ide/ide_methods.bas index eab007599..5b8cf8483 100644 --- a/source/ide/ide_methods.bas +++ b/source/ide/ide_methods.bas @@ -510,6 +510,7 @@ FUNCTION ide2 (ignore) REDIM IdeSkipLines(iden) AS _BYTE variableWatchList$ = "" backupVariableWatchList$ = "": REDIM backupUsedVariableList(1000) AS usedVarList + backupTypeDefinitions$ = "" watchpointList$ = "" callstacklist$ = "": callStackLength = 0 ideunsaved = -1 @@ -608,6 +609,7 @@ FUNCTION ide2 (ignore) REDIM IdeSkipLines(iden) AS _BYTE variableWatchList$ = "" backupVariableWatchList$ = "": REDIM backupUsedVariableList(1000) AS usedVarList + backupTypeDefinitions$ = "" watchpointList$ = "" callstacklist$ = "": callStackLength = 0 IF ideStartAtLine > 0 AND ideStartAtLine <= iden THEN @@ -6019,6 +6021,8 @@ FUNCTION ide2 (ignore) REDIM IdeBreakpoints(1) AS _BYTE REDIM IdeSkipLines(1) AS _BYTE variableWatchList$ = "" + backupVariableWatchList$ = "": REDIM backupUsedVariableList(1000) AS usedVarList + backupTypeDefinitions$ = "" watchpointList$ = "" callstacklist$ = "": callStackLength = 0 idet$ = MKL$(0) + MKL$(0): idel = 1: ideli = 1: iden = 1: IdeBmkN = 0 @@ -6920,6 +6924,7 @@ SUB DebugMode IF result = 2 THEN variableWatchList$ = "" backupVariableWatchList$ = "": REDIM backupUsedVariableList(1000) AS usedVarList + backupTypeDefinitions$ = "" FOR i = 1 TO totalVariablesCreated usedVariableList(i).watch = 0 NEXT @@ -8684,6 +8689,7 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction) (IdeDebugMode > 0 AND focus = 7 AND info <> 0) THEN variableWatchList$ = "" backupVariableWatchList$ = "" 'used in case this program is edited in the same session + backupTypeDefinitions$ = typeDefinitions$ 'store current TYPE definitions for later comparison longestVarName = 0 nextvWatchDataSlot = 0 totalVisibleVariables = 0 @@ -11928,6 +11934,7 @@ FUNCTION idefiledialog$(programname$, mode AS _BYTE) REDIM IdeSkipLines(iden) AS _BYTE variableWatchList$ = "" backupVariableWatchList$ = "": REDIM backupUsedVariableList(1000) AS usedVarList + backupTypeDefinitions$ = "" callstacklist$ = "": callStackLength = 0 ideerror = 1 diff --git a/source/qb64.bas b/source/qb64.bas index 8e3c75015..4d908b7ae 100644 --- a/source/qb64.bas +++ b/source/qb64.bas @@ -121,6 +121,7 @@ TYPE usedVarList END TYPE REDIM SHARED backupUsedVariableList(1000) AS usedVarList +DIM SHARED typeDefinitions$, backupTypeDefinitions$ DIM SHARED totalVariablesCreated AS LONG, totalMainVariablesCreated AS LONG DIM SHARED bypassNextVariable AS _BYTE DIM SHARED totalWarnings AS LONG, warningListItems AS LONG, lastWarningHeader AS STRING @@ -1464,6 +1465,7 @@ SelectCaseCounter = 0 ExecCounter = 0 UserDefineCount = 7 totalVariablesCreated = 0 +typeDefinitions$ = "" totalMainVariablesCreated = 0 REDIM SHARED usedVariableList(1000) AS usedVarList totalWarnings = 0 @@ -1962,9 +1964,9 @@ DO IF validname(n$) = 0 THEN a$ = "Invalid name": GOTO errmes udtename(i2) = n$ - udtecname(i2) = getelement$(ca$, 1) NormalTypeBlock: + typeDefinitions$ = typeDefinitions$ + MKL$(i2) + MKL$(LEN(n$)) + n$ udtetype(i2) = typ udtetypesize(i2) = typsize @@ -2092,10 +2094,12 @@ DO IF firstelement$ = "TYPE" THEN IF n <> 2 THEN a$ = "Expected TYPE typename": GOTO errmes lasttype = lasttype + 1 + typeDefinitions$ = typeDefinitions$ + MKL$(-1) + MKL$(lasttype) definingtype = lasttype i = definingtype WHILE i > UBOUND(udtenext): increaseUDTArrays: WEND IF validname(secondelement$) = 0 THEN a$ = "Invalid name": GOTO errmes + typeDefinitions$ = typeDefinitions$ + MKL$(LEN(secondelement$)) + secondelement$ udtxname(i) = secondelement$ udtxcname(i) = getelement(ca$, 2) udtxnext(i) = 0 @@ -26155,14 +26159,18 @@ SUB manageVariableList (__name$, __cname$, localIndex AS LONG, action AS _BYTE) 'this variable existed in a previous edit of this program 'in this same session; let's preselect it. j = CVL(MID$(backupVariableWatchList$, found + LEN(temp$), 4)) - usedVariableList(i).watch = backupUsedVariableList(j).watch - usedVariableList(i).watchRange = backupUsedVariableList(j).watchRange - usedVariableList(i).indexes = backupUsedVariableList(j).indexes - usedVariableList(i).elements = backupUsedVariableList(j).elements - usedVariableList(i).elementTypes = backupUsedVariableList(j).elementTypes - usedVariableList(i).elementOffset = backupUsedVariableList(j).elementOffset - END IF + 'if there have been changes in TYPEs, this variable won't be preselected + IF (LEN(backupUsedVariableList(j).elements) > 0 AND backupTypeDefinitions$ = typeDefinitions$) OR _ + (LEN(backupUsedVariableList(j).elements) = 0) THEN + usedVariableList(i).watch = backupUsedVariableList(j).watch + usedVariableList(i).watchRange = backupUsedVariableList(j).watchRange + usedVariableList(i).indexes = backupUsedVariableList(j).indexes + usedVariableList(i).elements = backupUsedVariableList(j).elements + usedVariableList(i).elementTypes = backupUsedVariableList(j).elementTypes + usedVariableList(i).elementOffset = backupUsedVariableList(j).elementOffset + END IF + END IF END IF CASE ELSE 'find and mark as used IF found THEN