mirror of
https://github.com/QB64Official/qb64.git
synced 2024-07-04 23:30:24 +00:00
Groundwork for variable requesting from the IDE (nonworking state).
The _MEMGET part needs extra work. m is of type _MEM, but it's never assigned - does that have something to do with it? Should we have something on the C++ side to access those memory blocks?
This commit is contained in:
parent
3523208b3c
commit
cedff4ef5a
|
@ -1,14 +1,14 @@
|
|||
$CHECKING:OFF
|
||||
|
||||
SUB vwatch (localVariables AS _OFFSET)
|
||||
SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
|
||||
STATIC AS LONG ideHost, breakpointCount, skipCount, timeout, startLevel, lastLine
|
||||
STATIC AS LONG callStackLength, runToLine
|
||||
STATIC AS _BYTE pauseMode, stepOver, bypass, setNextLine
|
||||
STATIC buffer$, endc$
|
||||
DIM AS LONG i
|
||||
DIM AS LONG i, tempIndex, localIndex
|
||||
DIM AS _OFFSET address
|
||||
DIM AS _MEM m
|
||||
DIM start!, temp$, cmd$, value$, k&
|
||||
DIM start!, temp$, cmd$, value$, k&, dataType$, result$
|
||||
|
||||
DECLARE LIBRARY
|
||||
SUB vwatch_stoptimers ALIAS stop_timers
|
||||
|
@ -213,10 +213,27 @@ SUB vwatch (localVariables AS _OFFSET)
|
|||
CASE "call stack"
|
||||
'send call stack history"
|
||||
GOSUB SendCallStack
|
||||
CASE "local"
|
||||
i = CVL(value$)
|
||||
address = localVariables + LEN(address) * i
|
||||
PRINT "Local"; i; "is at"; _MEMGET(m, address, _OFFSET)
|
||||
CASE "global var"
|
||||
tempIndex = CVL(LEFT$(value$, 4))
|
||||
localIndex = CVL(MID$(value$, 5, 4))
|
||||
dataType$ = MID$(value$, 9)
|
||||
address = globalVariables + LEN(address) * localIndex
|
||||
GOSUB GetMemData
|
||||
$CONSOLE
|
||||
_ECHO "global var requested:" + STR$(tempIndex) + dataType$
|
||||
_ECHO "== result = " + result$
|
||||
cmd$ = "global var:" + MKL$(tempIndex) + result$
|
||||
GOSUB SendCommand
|
||||
CASE "local var"
|
||||
tempIndex = CVL(LEFT$(value$, 4))
|
||||
localIndex = CVL(MID$(value$, 5, 4))
|
||||
dataType$ = MID$(value$, 9)
|
||||
address = localVariables + LEN(address) * localIndex
|
||||
GOSUB GetMemData
|
||||
_ECHO "local var requested:" + STR$(tempIndex) + dataType$
|
||||
_ECHO "== result = " + result$
|
||||
cmd$ = "local var:" + MKL$(tempIndex) + result$
|
||||
GOSUB SendCommand
|
||||
CASE "current sub"
|
||||
cmd$ = "current sub:" + vwatch_subname
|
||||
GOSUB SendCommand
|
||||
|
@ -285,4 +302,31 @@ SUB vwatch (localVariables AS _OFFSET)
|
|||
PUT #ideHost, , cmd$
|
||||
cmd$ = ""
|
||||
RETURN
|
||||
|
||||
GetMemData:
|
||||
DIM integerType AS INTEGER, uintegerType AS _UNSIGNED INTEGER
|
||||
DIM longType AS LONG, ulongType AS _UNSIGNED LONG
|
||||
DIM singleType AS SINGLE, doubleType AS DOUBLE
|
||||
|
||||
SELECT CASE dataType$
|
||||
CASE "INTEGER"
|
||||
integerType = _MEMGET(m, address, INTEGER)
|
||||
result$ = STR$(integerType)
|
||||
CASE "_UNSIGNED INTEGER"
|
||||
uintegerType = _MEMGET(m, address, _UNSIGNED INTEGER)
|
||||
result$ = STR$(uintegerType)
|
||||
CASE "LONG"
|
||||
longType = _MEMGET(m, address, LONG)
|
||||
result$ = STR$(longType)
|
||||
CASE "_UNSIGNED LONG"
|
||||
ulongType = _MEMGET(m, address, _UNSIGNED LONG)
|
||||
result$ = STR$(ulongType)
|
||||
CASE "SINGLE"
|
||||
singleType = _MEMGET(m, address, SINGLE)
|
||||
result$ = STR$(singleType)
|
||||
CASE "DOUBLE"
|
||||
doubleType = _MEMGET(m, address, DOUBLE)
|
||||
result$ = STR$(doubleType)
|
||||
END SELECT
|
||||
RETURN
|
||||
END SUB
|
||||
|
|
|
@ -11,7 +11,7 @@ DIM SHARED IDEBuildModeChanged
|
|||
DIM SHARED IdeInfo AS STRING
|
||||
DIM SHARED IdeContextHelpSF AS _BYTE
|
||||
|
||||
DIM SHARED host&, hostport$
|
||||
DIM SHARED host&, hostport$, variableWatchList$
|
||||
|
||||
DIM SHARED IdeSystem AS LONG
|
||||
'1=Entering text into the main IDE window
|
||||
|
|
|
@ -6743,48 +6743,15 @@ SUB DebugMode
|
|||
END IF
|
||||
GOSUB UpdateDisplay
|
||||
CASE 15872 'F4
|
||||
IF PauseMode THEN
|
||||
requestCallStack:
|
||||
cmd$ = "call stack"
|
||||
IF PauseMode = 0 THEN
|
||||
cmd$ = "break"
|
||||
PauseMode = -1
|
||||
GOSUB SendCommand
|
||||
|
||||
IF BypassRequestCallStack THEN GOTO ShowCallStack
|
||||
dummy = DarkenFGBG(0)
|
||||
clearStatusWindow 0
|
||||
setStatusMessage 1, "Requesting call stack...", 7
|
||||
|
||||
start! = TIMER
|
||||
callStackLength = -1
|
||||
DO
|
||||
GOSUB GetCommand
|
||||
IF cmd$ = "call stack size" THEN
|
||||
callStackLength = CVL(value$)
|
||||
IF callStackLength = 0 THEN EXIT DO
|
||||
END IF
|
||||
_LIMIT 100
|
||||
LOOP UNTIL cmd$ = "call stack" OR TIMER - start! > timeout
|
||||
|
||||
IF cmd$ = "call stack" THEN
|
||||
'display call stack
|
||||
callstacklist$ = value$
|
||||
ShowCallStack:
|
||||
clearStatusWindow 0
|
||||
setStatusMessage 1, "Paused.", 2
|
||||
retval = idecallstackbox
|
||||
PCOPY 3, 0: SCREEN , , 3, 0
|
||||
WHILE _MOUSEINPUT: WEND
|
||||
ELSE
|
||||
IF callStackLength = -1 THEN
|
||||
callStackLength = 0
|
||||
clearStatusWindow 0
|
||||
setStatusMessage 1, "Error retrieving call stack.", 2
|
||||
ELSEIF callStackLength = 0 THEN
|
||||
clearStatusWindow 0
|
||||
setStatusMessage 1, "No call stack log available.", 2
|
||||
END IF
|
||||
END IF
|
||||
noFocusMessage = NOT noFocusMessage
|
||||
END IF
|
||||
result = idevariablewatchbox
|
||||
PCOPY 3, 0: SCREEN , , 3, 0
|
||||
WHILE _MOUSEINPUT: WEND
|
||||
GOSUB UpdateDisplay
|
||||
CASE 16128 'F5
|
||||
requestContinue:
|
||||
PauseMode = 0
|
||||
|
@ -6856,6 +6823,49 @@ SUB DebugMode
|
|||
GOSUB SendCommand
|
||||
END IF
|
||||
GOSUB UpdateDisplay
|
||||
CASE 34304 'F12
|
||||
IF PauseMode THEN
|
||||
requestCallStack:
|
||||
cmd$ = "call stack"
|
||||
GOSUB SendCommand
|
||||
|
||||
IF BypassRequestCallStack THEN GOTO ShowCallStack
|
||||
dummy = DarkenFGBG(0)
|
||||
clearStatusWindow 0
|
||||
setStatusMessage 1, "Requesting call stack...", 7
|
||||
|
||||
start! = TIMER
|
||||
callStackLength = -1
|
||||
DO
|
||||
GOSUB GetCommand
|
||||
IF cmd$ = "call stack size" THEN
|
||||
callStackLength = CVL(value$)
|
||||
IF callStackLength = 0 THEN EXIT DO
|
||||
END IF
|
||||
_LIMIT 100
|
||||
LOOP UNTIL cmd$ = "call stack" OR TIMER - start! > timeout
|
||||
|
||||
IF cmd$ = "call stack" THEN
|
||||
'display call stack
|
||||
callstacklist$ = value$
|
||||
ShowCallStack:
|
||||
clearStatusWindow 0
|
||||
setStatusMessage 1, "Paused.", 2
|
||||
retval = idecallstackbox
|
||||
PCOPY 3, 0: SCREEN , , 3, 0
|
||||
WHILE _MOUSEINPUT: WEND
|
||||
ELSE
|
||||
IF callStackLength = -1 THEN
|
||||
callStackLength = 0
|
||||
clearStatusWindow 0
|
||||
setStatusMessage 1, "Error retrieving call stack.", 2
|
||||
ELSEIF callStackLength = 0 THEN
|
||||
clearStatusWindow 0
|
||||
setStatusMessage 1, "No call stack log available.", 2
|
||||
END IF
|
||||
END IF
|
||||
noFocusMessage = NOT noFocusMessage
|
||||
END IF
|
||||
CASE 103, 71 'g, G
|
||||
IF _KEYDOWN(100306) OR _KEYDOWN(100305) THEN
|
||||
IF _KEYDOWN(100304) OR _KEYDOWN(100303) THEN
|
||||
|
@ -6920,6 +6930,26 @@ SUB DebugMode
|
|||
setStatusMessage 1, "Paused.", 2
|
||||
END IF
|
||||
PauseMode = -1
|
||||
|
||||
'request variables
|
||||
IF LEN(variableWatchList$) THEN
|
||||
temp$ = variableWatchList$
|
||||
DO WHILE LEN(temp$)
|
||||
tempIndex& = CVL(LEFT$(temp$, 4))
|
||||
temp$ = MID$(temp$, 5)
|
||||
IF LEN(usedVariableList(tempIndex&).subfunc) = 0 THEN
|
||||
cmd$ = "global var:"
|
||||
ELSE
|
||||
cmd$ = "local var:"
|
||||
END IF
|
||||
cmd$ = cmd$ + MKL$(tempIndex&) + MKL$(usedVariableList(tempIndex&).localIndex) + usedVariableList(tempIndex&).varType
|
||||
GOSUB SendCommand
|
||||
LOOP
|
||||
END IF
|
||||
CASE "global var", "local var"
|
||||
tempIndex& = CVL(LEFT$(value$, 4))
|
||||
value$ = MID$(value$, 5)
|
||||
usedVariableList(tempIndex&).mostRecentValue = value$
|
||||
CASE "quit"
|
||||
CLOSE #client&
|
||||
dummy = DarkenFGBG(0)
|
||||
|
@ -7018,7 +7048,7 @@ FUNCTION idevariablewatchbox
|
|||
|
||||
'-------- init --------
|
||||
|
||||
mainmodule$ = "MAIN MODULE"
|
||||
mainmodule$ = "GLOBAL"
|
||||
maxModuleNameLen = LEN(mainmodule$)
|
||||
maxVarLen = LEN("Variable")
|
||||
maxTypeLen = LEN("Type")
|
||||
|
@ -7068,6 +7098,9 @@ FUNCTION idevariablewatchbox
|
|||
END IF
|
||||
|
||||
l$ = l$ + text$ + l3$
|
||||
IF IdeDebugMode > 0 AND LEN(usedVariableList(x).mostRecentValue) > 0 THEN
|
||||
l$ = l$ + " = " + usedVariableList(x).mostRecentValue
|
||||
END IF
|
||||
IF x < totalVariablesCreated THEN l$ = l$ + sep
|
||||
NEXT
|
||||
|
||||
|
@ -7191,6 +7224,12 @@ FUNCTION idevariablewatchbox
|
|||
END IF
|
||||
|
||||
IF K$ = CHR$(27) OR (focus = 4 AND info <> 0) THEN
|
||||
variableWatchList$ = ""
|
||||
FOR y = 1 TO totalVisibleVariables
|
||||
IF usedVariableList(varDlgList(y).index).watch THEN
|
||||
variableWatchList$ = variableWatchList$ + MKL$(varDlgList(y).index)
|
||||
END IF
|
||||
NEXT
|
||||
EXIT FUNCTION
|
||||
END IF
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ Set_OrderOfOperations
|
|||
|
||||
DIM SHARED vWatchOn, vWatchRecompileAttempts, vWatchDesiredState, vWatchErrorCall$
|
||||
DIM SHARED vWatchNewVariable$, vWatchVariableExclusions$
|
||||
vWatchErrorCall$ = "if (stop_program) {*__LONG_VWATCH_LINENUMBER=0; SUB_VWATCH((ptrszint*)vwatch_local_vars);};if(new_error){bkp_new_error=new_error;new_error=0;*__LONG_VWATCH_LINENUMBER=-1; SUB_VWATCH((ptrszint*)vwatch_local_vars);new_error=bkp_new_error;};"
|
||||
vWatchErrorCall$ = "if (stop_program) {*__LONG_VWATCH_LINENUMBER=0; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);};if(new_error){bkp_new_error=new_error;new_error=0;*__LONG_VWATCH_LINENUMBER=-1; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);new_error=bkp_new_error;};"
|
||||
vWatchVariableExclusions$ = "@__LONG_VWATCH_LINENUMBER@__LONG_VWATCH_SUBLEVEL@__LONG_VWATCH_GOTO@" + _
|
||||
"@__STRING_VWATCH_SUBNAME@__STRING_VWATCH_CALLSTACK@__ARRAY_BYTE_VWATCH_BREAKPOINTS" + _
|
||||
"@__ARRAY_BYTE_VWATCH_SKIPLINES@"
|
||||
|
@ -111,6 +111,7 @@ DIM SHARED MonochromeLoggingMode AS _BYTE
|
|||
TYPE usedVarList
|
||||
used AS _BYTE
|
||||
watch AS _BYTE
|
||||
mostRecentValue AS STRING
|
||||
linenumber AS LONG
|
||||
includeLevel AS LONG
|
||||
includedLine AS LONG
|
||||
|
@ -5157,7 +5158,7 @@ DO
|
|||
|
||||
PRINT #12, "qbs_set(__STRING_VWATCH_SUBNAME,qbs_new_txt_len(" + CHR$(34) + inclinenump$ + subfuncoriginalname$ + CHR$(34) + "," + str2$(LEN(inclinenump$ + subfuncoriginalname$)) + "));"
|
||||
PRINT #12, "qbs_cleanup(qbs_tmp_base,0);"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER=-2; SUB_VWATCH((ptrszint*)vwatch_local_vars);"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER=-2; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);"
|
||||
END IF
|
||||
END IF
|
||||
|
||||
|
@ -5301,7 +5302,7 @@ DO
|
|||
IF vWatchOn = 1 THEN
|
||||
IF NoChecks = 0 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
vWatchAddLabel 0, -1
|
||||
END IF
|
||||
PRINT #12, "*__LONG_VWATCH_SUBLEVEL=*__LONG_VWATCH_SUBLEVEL- 1 ;"
|
||||
|
@ -5569,7 +5570,7 @@ DO
|
|||
PRINT #12, "fornext_continue_" + str2$(controlid(controllevel)) + ":;"
|
||||
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 AND NoChecks = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
PRINT #12, "}"
|
||||
PRINT #12, "fornext_exit_" + str2$(controlid(controllevel)) + ":;"
|
||||
|
@ -5619,7 +5620,7 @@ DO
|
|||
IF (typ AND ISSTRING) THEN a$ = "WHILE ERROR! Cannot accept a STRING type.": GOTO errmes
|
||||
IF NoChecks = 0 AND vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
PRINT #12, "while((" + e$ + ")||new_error){"
|
||||
ELSE
|
||||
|
@ -5679,14 +5680,14 @@ DO
|
|||
IF whileuntil = 1 THEN PRINT #12, "while((" + e$ + ")||new_error){" ELSE PRINT #12, "while((!(" + e$ + "))||new_error){"
|
||||
IF NoChecks = 0 AND vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
controltype(controllevel) = 4
|
||||
ELSE
|
||||
controltype(controllevel) = 3
|
||||
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 AND NoChecks = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "do{*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "do{*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
ELSE
|
||||
PRINT #12, "do{"
|
||||
END IF
|
||||
|
@ -5721,7 +5722,7 @@ DO
|
|||
PRINT #12, "dl_continue_" + str2$(controlid(controllevel)) + ":;"
|
||||
IF NoChecks = 0 AND vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
IF whileuntil = 1 THEN PRINT #12, "}while((" + e$ + ")&&(!new_error));" ELSE PRINT #12, "}while((!(" + e$ + "))&&(!new_error));"
|
||||
ELSE
|
||||
|
@ -5729,7 +5730,7 @@ DO
|
|||
|
||||
IF NoChecks = 0 AND vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
|
||||
IF controltype(controllevel) = 4 THEN
|
||||
|
@ -5883,7 +5884,7 @@ DO
|
|||
|
||||
IF NoChecks = 0 AND vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
|
||||
PRINT #12, "fornext_step" + u$ + "=" + e$ + ";"
|
||||
|
@ -5971,7 +5972,7 @@ DO
|
|||
PRINT #12, "S_" + str2$(statementn) + ":;": dynscope = 1
|
||||
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
END IF
|
||||
FOR i = controllevel TO 1 STEP -1
|
||||
|
@ -6013,7 +6014,7 @@ DO
|
|||
PRINT #12, "S_" + str2$(statementn) + ":;": dynscope = 1
|
||||
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
END IF
|
||||
|
||||
|
@ -6096,7 +6097,7 @@ DO
|
|||
|
||||
IF NoChecks = 0 AND vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
|
||||
PRINT #12, "}"
|
||||
|
@ -6117,7 +6118,7 @@ DO
|
|||
PRINT #12, "S_" + str2$(statementn) + ":;": dynscope = 1
|
||||
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
END IF
|
||||
|
||||
|
@ -6243,7 +6244,7 @@ DO
|
|||
|
||||
IF NoChecks = 0 AND vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
|
||||
IF SelectCaseCounter > 0 AND SelectCaseHasCaseBlock(SelectCaseCounter) = 0 THEN
|
||||
|
@ -6362,7 +6363,7 @@ DO
|
|||
PRINT #12, "S_" + str2$(statementn) + ":;": dynscope = 1
|
||||
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
END IF
|
||||
|
||||
|
@ -6551,7 +6552,7 @@ DO
|
|||
IF NoChecks = 0 THEN
|
||||
IF vWatchOn = 1 AND inclinenumber(inclevel) = 0 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "do{*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "do{*__LONG_VWATCH_LINENUMBER= " + str2$(linenumber) + "; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
ELSE
|
||||
PRINT #12, "do{"
|
||||
END IF
|
||||
|
@ -7548,7 +7549,6 @@ DO
|
|||
END IF
|
||||
END IF
|
||||
|
||||
IF ids(currentid).share = 0 THEN vWatchVariable RTRIM$(ids(currentid).callname), -2
|
||||
ids(currentid).share = ids(currentid).share OR 2 'set as temporarily shared
|
||||
|
||||
'method must apply to the current sub/function regardless of how the variable was defined in 'main'
|
||||
|
@ -8910,7 +8910,7 @@ DO
|
|||
|
||||
IF vWatchOn = 1 THEN
|
||||
vWatchAddLabel linenumber, 0
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= 0; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= 0; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
END IF
|
||||
PRINT #12, "if (sub_gl_called) error(271);"
|
||||
PRINT #12, "close_program=1;"
|
||||
|
@ -8933,7 +8933,7 @@ DO
|
|||
END IF
|
||||
layoutdone = 1: IF LEN(layout$) THEN layout$ = layout$ + sp + l$ ELSE layout$ = l$
|
||||
IF vWatchOn = 1 AND NoChecks = 0 AND inclinenumber(inclevel) = 0 THEN
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER=-3; SUB_VWATCH((ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER=-3; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars); if (*__LONG_VWATCH_GOTO>0) goto VWATCH_SETNEXTLINE; if (*__LONG_VWATCH_GOTO<0) goto VWATCH_SKIPLINE;"
|
||||
vWatchAddLabel linenumber, 0
|
||||
ELSE
|
||||
PRINT #12, "close_program=1;"
|
||||
|
@ -14223,19 +14223,13 @@ END SUB
|
|||
SUB vWatchVariable (this$, action AS _BYTE)
|
||||
STATIC totalLocalVariables AS LONG, localVariablesList$
|
||||
STATIC totalMainModuleVariables AS LONG, mainModuleVariablesList$
|
||||
STATIC totalSharedVariablesFromMainModule AS LONG, mainModuleSharedVariablesList$
|
||||
|
||||
SELECT CASE action
|
||||
CASE -2 'new variable added to main module using SHARED in a SUB
|
||||
totalLocalVariables = totalLocalVariables + 1
|
||||
localVariablesList$ = localVariablesList$ + "vwatch_local_vars[" + str2$(totalLocalVariables - 1) + "] = &" + this$ + ";" + CRLF
|
||||
CASE -1 'reset
|
||||
totalLocalVariables = 0
|
||||
localVariablesList$ = ""
|
||||
totalMainModuleVariables = 0
|
||||
mainModuleVariablesList$ = ""
|
||||
totalSharedVariablesFromMainModule = 0
|
||||
mainModuleSharedVariablesList$ = ""
|
||||
CASE 0 'add
|
||||
IF INSTR(vWatchVariableExclusions$, "@" + this$ + "@") > 0 OR LEFT$(this$, 12) = "_SUB_VWATCH_" THEN
|
||||
EXIT SUB
|
||||
|
@ -14244,12 +14238,7 @@ SUB vWatchVariable (this$, action AS _BYTE)
|
|||
vWatchNewVariable$ = this$
|
||||
IF subfunc = "" THEN
|
||||
totalMainModuleVariables = totalMainModuleVariables + 1
|
||||
mainModuleVariablesList$ = mainModuleVariablesList$ + "vwatch_local_vars[" + str2$(totalMainModuleVariables - 1) + "] = &" + this$ + ";" + CRLF
|
||||
IF dimshared = 1 THEN
|
||||
'DIM SHARED variables will be appended to every SUB
|
||||
totalSharedVariablesFromMainModule = totalSharedVariablesFromMainModule + 1
|
||||
mainModuleSharedVariablesList$ = mainModuleSharedVariablesList$ + MKL$(LEN(this$)) + this$
|
||||
END IF
|
||||
mainModuleVariablesList$ = mainModuleVariablesList$ + "vwatch_global_vars[" + str2$(totalMainModuleVariables - 1) + "] = &" + this$ + ";" + CRLF
|
||||
manageVariableList id.cn, this$, totalMainModuleVariables - 1, 0
|
||||
ELSE
|
||||
totalLocalVariables = totalLocalVariables + 1
|
||||
|
@ -14259,28 +14248,20 @@ SUB vWatchVariable (this$, action AS _BYTE)
|
|||
CASE 1 'dump to data[].txt & reset
|
||||
IF subfunc = "" THEN
|
||||
IF totalMainModuleVariables > 0 THEN
|
||||
PRINT #13, "void *vwatch_local_vars["; totalMainModuleVariables; "];"
|
||||
PRINT #13, "void *vwatch_local_vars[0];"
|
||||
PRINT #18, "void *vwatch_global_vars["; totalMainModuleVariables; "];"
|
||||
PRINT #13, mainModuleVariablesList$
|
||||
ELSE
|
||||
PRINT #13, "void *vwatch_local_vars[0];"
|
||||
PRINT #18, "void *vwatch_global_vars[0];"
|
||||
END IF
|
||||
|
||||
mainModuleVariablesList$ = ""
|
||||
totalMainModuleVariables = 0
|
||||
ELSE
|
||||
IF subfunc <> "SUB_VWATCH" THEN
|
||||
IF totalLocalVariables + totalSharedVariablesFromMainModule > 0 THEN
|
||||
PRINT #13, "void *vwatch_local_vars["; (totalLocalVariables + totalSharedVariablesFromMainModule); "];"
|
||||
i = totalLocalVariables
|
||||
tempShared$ = mainModuleSharedVariablesList$
|
||||
tempVar$ = ""
|
||||
DO UNTIL i = totalLocalVariables + totalSharedVariablesFromMainModule
|
||||
length = CVL(LEFT$(tempShared$, 4))
|
||||
tempVar$ = MID$(tempShared$, 5, length)
|
||||
tempShared$ = MID$(tempShared$, 5 + length)
|
||||
localVariablesList$ = localVariablesList$ + "vwatch_local_vars[" + str2$(i) + "] = &" + tempVar$ + ";" + CRLF
|
||||
i = i + 1
|
||||
LOOP
|
||||
IF totalLocalVariables > 0 THEN
|
||||
PRINT #13, "void *vwatch_local_vars["; (totalLocalVariables); "];"
|
||||
PRINT #13, localVariablesList$
|
||||
ELSE
|
||||
PRINT #13, "void *vwatch_local_vars[0];"
|
||||
|
@ -22817,7 +22798,7 @@ END FUNCTION
|
|||
SUB xend
|
||||
IF vWatchOn = 1 THEN
|
||||
IF (inclinenumber(inclevel) = 0 OR closedmain = 0) THEN vWatchAddLabel 0, -1
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= 0; SUB_VWATCH((ptrszint*)vwatch_local_vars);"
|
||||
PRINT #12, "*__LONG_VWATCH_LINENUMBER= 0; SUB_VWATCH((ptrszint*)vwatch_global_vars,(ptrszint*)vwatch_local_vars);"
|
||||
END IF
|
||||
PRINT #12, "sub_end();"
|
||||
END SUB
|
||||
|
@ -25941,6 +25922,7 @@ SUB manageVariableList (__name$, __cname$, localIndex AS LONG, action AS _BYTE)
|
|||
END IF
|
||||
usedVariableList(i).used = 0
|
||||
usedVariableList(i).watch = 0
|
||||
usedVariableList(i).mostRecentValue = ""
|
||||
usedVariableList(i).linenumber = linenumber
|
||||
usedVariableList(i).includeLevel = inclevel
|
||||
IF inclevel > 0 THEN
|
||||
|
|
Loading…
Reference in a new issue