1
1
Fork 0
mirror of https://github.com/QB64Official/qb64.git synced 2024-07-03 07:41:21 +00:00

Begins work for variable watching

This commit is contained in:
Fellippe Heitor 2021-07-15 17:00:31 -03:00
parent 4ec2243007
commit f0751243ef
2 changed files with 46 additions and 13 deletions

View file

@ -108,6 +108,7 @@ TYPE usedVarList
includeLevel AS LONG
includedLine AS LONG
includedFile AS STRING
scope AS LONG
cname AS STRING
name AS STRING
END TYPE
@ -5257,12 +5258,27 @@ DO
l$ = SCase$("End") + sp + secondelement$
layoutdone = 1: IF LEN(layout$) THEN layout$ = layout$ + sp + l$ ELSE layout$ = l$
IF vWatchOn = 1 THEN
totalLocalVariables = 0
localVariablesList$ = ""
FOR i = 1 TO totalVariablesCreated
IF usedVariableList(i).scope = subfuncn THEN
totalLocalVariables = totalLocalVariables + 1
localVariablesList$ = localVariablesList$ + "vwatch_local_vars[" + str2$(totalLocalVariables - 1) + "] = &" + usedVariableList(i).cname + ";" + CRLF
END IF
NEXT
IF totalLocalVariables > 0 THEN
PRINT #13, "void *vwatch_local_vars["; totalLocalVariables; "];"
PRINT #13, localVariablesList$
END IF
END IF
staticarraylist = "": staticarraylistn = 0 'remove previously listed arrays
dimstatic = 0
PRINT #12, "exit_subfunc:;"
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
IF NoChecks = 0 THEN
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
END IF
PRINT #12, "*__LONG_VWATCH_SUBLEVEL=*__LONG_VWATCH_SUBLEVEL- 1 ;"
END IF
@ -5540,7 +5556,7 @@ DO
IF stringprocessinghappened THEN e$ = cleanupstringprocessingcall$ + e$ + ")"
IF (typ AND ISSTRING) THEN a$ = "WHILE ERROR! Cannot accept a STRING type.": GOTO errmes
IF NoChecks = 0 AND vWatchOn = 1 THEN
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
END IF
PRINT #12, "while((" + e$ + ")||new_error){"
ELSE
@ -5599,13 +5615,13 @@ DO
IF (typ AND ISSTRING) THEN a$ = "DO ERROR! Cannot accept a STRING type.": GOTO errmes
IF whileuntil = 1 THEN PRINT #12, "while((" + e$ + ")||new_error){" ELSE PRINT #12, "while((!(" + e$ + "))||new_error){"
IF NoChecks = 0 AND vWatchOn = 1 THEN
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
END IF
controltype(controllevel) = 4
ELSE
controltype(controllevel) = 3
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 AND NoChecks = 0 THEN
PRINT #12, "do{*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "do{*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
ELSE
PRINT #12, "do{"
END IF
@ -5639,14 +5655,14 @@ DO
IF (typ AND ISSTRING) THEN a$ = "LOOP ERROR! Cannot accept a STRING type.": GOTO errmes
PRINT #12, "dl_continue_" + str2$(controlid(controllevel)) + ":;"
IF NoChecks = 0 AND vWatchOn = 1 THEN
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
END IF
IF whileuntil = 1 THEN PRINT #12, "}while((" + e$ + ")&&(!new_error));" ELSE PRINT #12, "}while((!(" + e$ + "))&&(!new_error));"
ELSE
PRINT #12, "dl_continue_" + str2$(controlid(controllevel)) + ":;"
IF NoChecks = 0 AND vWatchOn = 1 THEN
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
END IF
IF controltype(controllevel) = 4 THEN
@ -5799,7 +5815,7 @@ DO
IF Error_Happened THEN GOTO errmes
IF NoChecks = 0 AND vWatchOn = 1 THEN
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
END IF
PRINT #12, "fornext_step" + u$ + "=" + e$ + ";"
@ -5886,7 +5902,7 @@ DO
IF NoChecks = 0 THEN
PRINT #12, "S_" + str2$(statementn) + ":;": dynscope = 1
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
END IF
END IF
FOR i = controllevel TO 1 STEP -1
@ -5927,7 +5943,7 @@ DO
IF NoChecks = 0 THEN
PRINT #12, "S_" + str2$(statementn) + ":;": dynscope = 1
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
END IF
END IF
@ -6025,7 +6041,7 @@ DO
IF NoChecks = 0 THEN
PRINT #12, "S_" + str2$(statementn) + ":;": dynscope = 1
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
END IF
END IF
@ -6263,7 +6279,7 @@ DO
IF NoChecks = 0 THEN
PRINT #12, "S_" + str2$(statementn) + ":;": dynscope = 1
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
END IF
END IF
@ -6451,7 +6467,7 @@ DO
IF NoChecks = 0 THEN
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
PRINT #12, "do{*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER);"
PRINT #12, "do{*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH(__LONG_VWATCH_LINENUMBER,(ptrszint)*vwatch_local_vars);"
ELSE
PRINT #12, "do{"
END IF
@ -11600,6 +11616,22 @@ IF Resize_Scale THEN
END IF
CLOSE #fh
IF vWatchOn = 1 THEN
totalLocalVariables = 0
localVariablesList$ = ""
FOR i = 1 TO totalVariablesCreated
IF usedVariableList(i).scope = 0 THEN
totalLocalVariables = totalLocalVariables + 1
localVariablesList$ = localVariablesList$ + "vwatch_local_vars[" + str2$(totalLocalVariables - 1) + "] = &" + usedVariableList(i).cname + ";" + CRLF
END IF
NEXT
IF totalLocalVariables > 0 THEN
PRINT #18, "void *vwatch_local_vars["; totalLocalVariables; "];"
PRINT #18, localVariablesList$
END IF
END IF
'DATA_finalize
PRINT #18, "ptrszint data_size=" + str2(DataOffset) + ";"
IF DataOffset = 0 THEN
@ -25673,6 +25705,7 @@ SUB manageVariableList (name$, __cname$, action AS _BYTE)
usedVariableList(i).includedLine = 0
usedVariableList(i).includedFile = ""
END IF
usedVariableList(i).scope = subfuncn
usedVariableList(i).cname = cname$
usedVariableList(i).name = name$
totalVariablesCreated = totalVariablesCreated + 1

View file

@ -1,6 +1,6 @@
$CHECKING:OFF
SUB vwatch (linenumber AS LONG)
SUB vwatch (linenumber AS LONG, localVariables AS _OFFSET)
STATIC AS LONG ide, breakpointCount, timeout, startLevel, lastLine
STATIC AS _BYTE pauseMode, stepOver, bypass
STATIC buffer$, endc$