1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-06-30 05:10:37 +00:00

Allows watching one element of UDTs (no strings yet).

This commit is contained in:
FellippeHeitor 2021-08-22 00:12:01 -03:00
parent 1049d9db16
commit 9423080f6b
3 changed files with 50 additions and 1 deletions

View file

@ -261,6 +261,7 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
vw_arrayIndex = CVL(MID$(vw_value$, 10, 4)) vw_arrayIndex = CVL(MID$(vw_value$, 10, 4))
vw_elementoffset = _CV(_OFFSET, MID$(vw_value$, 14, LEN(vw_elementoffset))) vw_elementoffset = _CV(_OFFSET, MID$(vw_value$, 14, LEN(vw_elementoffset)))
vw_varSize = CVL(MID$(vw_value$, 14 + LEN(vw_elementoffset), 4)) vw_varSize = CVL(MID$(vw_value$, 14 + LEN(vw_elementoffset), 4))
IF vw_varSize = 0 THEN PRINT "NoSize": GOTO cmdProcessingDone
vw_i = CVI(MID$(vw_value$, 18 + LEN(vw_elementoffset), 2)) vw_i = CVI(MID$(vw_value$, 18 + LEN(vw_elementoffset), 2))
IF vw_i THEN IF vw_i THEN
vw_scope$ = MID$(vw_value$, 20 + LEN(vw_elementoffset), vw_i) vw_scope$ = MID$(vw_value$, 20 + LEN(vw_elementoffset), vw_i)
@ -315,6 +316,7 @@ SUB vwatch (globalVariables AS _OFFSET, localVariables AS _OFFSET)
END IF END IF
'vw_address now points to the actual data 'vw_address now points to the actual data
PRINT "vw_elementoffset =" ; vw_elementoffset
vw_address = vw_address + vw_elementoffset vw_address = vw_address + vw_elementoffset
vw_buf$ = SPACE$(vw_varSize) vw_buf$ = SPACE$(vw_varSize)
vw_m = _MEM(vw_address, vw_varSize) vw_m = _MEM(vw_address, vw_varSize)

View file

@ -7574,8 +7574,10 @@ SUB DebugMode
RETURN RETURN
GetVarSize: GetVarSize:
varSize& = 0
varType$ = usedVariableList(tempIndex&).varType varType$ = usedVariableList(tempIndex&).varType
IF INSTR(varType$, "STRING *") THEN varType$ = "STRING" IF INSTR(varType$, "STRING *") THEN varType$ = "STRING"
checkVarType:
SELECT CASE varType$ SELECT CASE varType$
CASE "_BYTE", "_UNSIGNED _BYTE", "BYTE", "UNSIGNED BYTE": varSize& = LEN(dummy%%) CASE "_BYTE", "_UNSIGNED _BYTE", "BYTE", "UNSIGNED BYTE": varSize& = LEN(dummy%%)
CASE "INTEGER", "_UNSIGNED INTEGER", "UNSIGNED INTEGER": varSize& = LEN(dummy%) CASE "INTEGER", "_UNSIGNED INTEGER", "UNSIGNED INTEGER": varSize& = LEN(dummy%)
@ -7586,6 +7588,9 @@ SUB DebugMode
CASE "_FLOAT", "FLOAT": varSize& = LEN(dummy##) CASE "_FLOAT", "FLOAT": varSize& = LEN(dummy##)
CASE "_OFFSET", "_UNSIGNED _OFFSET", "OFFSET", "UNSIGNED OFFSET": varSize& = LEN(dummy%&) CASE "_OFFSET", "_UNSIGNED _OFFSET", "OFFSET", "UNSIGNED OFFSET": varSize& = LEN(dummy%&)
CASE "STRING": varSize& = LEN(dummy%&) + LEN(dummy&) CASE "STRING": varSize& = LEN(dummy%&) + LEN(dummy&)
CASE ELSE 'UDT?
varType$ = usedVariableList(tempIndex&).elementTypes
IF LEN(varType$) THEN GOTO checkVarType
END SELECT END SELECT
RETURN RETURN
END SUB END SUB
@ -8078,6 +8083,47 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction)
usedVariableList(varDlgList(y).index).elementOffset = 0 usedVariableList(varDlgList(y).index).elementOffset = 0
GOTO unWatch GOTO unWatch
ELSE ELSE
typ = typ - ISUDT
typ = typ - ISREFERENCE
IF typ AND ISINCONVENTIONALMEMORY THEN typ = typ - ISINCONVENTIONALMEMORY
SELECT CASE typ
CASE BYTETYPE
usedVariableList(varDlgList(y).index).elementTypes = "_BYTE"
CASE UBYTETYPE
usedVariableList(varDlgList(y).index).elementTypes = "_UNSIGNED _BYTE"
CASE INTEGERTYPE
usedVariableList(varDlgList(y).index).elementTypes = "INTEGER"
CASE UINTEGERTYPE
usedVariableList(varDlgList(y).index).elementTypes = "_UNSIGNED INTEGER"
CASE LONGTYPE
usedVariableList(varDlgList(y).index).elementTypes = "LONG"
CASE ULONGTYPE
usedVariableList(varDlgList(y).index).elementTypes = "_UNSIGNED LONG"
CASE INTEGER64TYPE
usedVariableList(varDlgList(y).index).elementTypes = "_INTEGER64"
CASE UINTEGER64TYPE
usedVariableList(varDlgList(y).index).elementTypes = "_UNSIGNED _INTEGER64"
CASE SINGLETYPE
usedVariableList(varDlgList(y).index).elementTypes = "SINGLE"
CASE DOUBLETYPE
usedVariableList(varDlgList(y).index).elementTypes = "DOUBLE"
CASE FLOATTYPE
usedVariableList(varDlgList(y).index).elementTypes = "_FLOAT"
CASE OFFSETTYPE
usedVariableList(varDlgList(y).index).elementTypes = "_OFFSET"
CASE UOFFSETTYPE
usedVariableList(varDlgList(y).index).elementTypes = "_UNSIGNED _OFFSET"
CASE ELSE
IF typ AND ISSTRING THEN
usedVariableList(varDlgList(y).index).elementTypes = "STRING"
ELSE
usedVariableList(varDlgList(y).index).watch = 0
usedVariableList(varDlgList(y).index).elements = ""
usedVariableList(varDlgList(y).index).elementOffset = 0
result = idemessagebox("Error", "Element must be of a native data type", "#OK")
GOTO unWatch
END IF
END SELECT
'result = idemessagebox("Result", v$ + "\n" + result$ + "\n" + STR$(typ), "#OK") 'result = idemessagebox("Result", v$ + "\n" + result$ + "\n" + STR$(typ), "#OK")
usedVariableList(varDlgList(y).index).elementOffset = VAL(MID$(result$, _INSTRREV(result$, sp3) + 1)) usedVariableList(varDlgList(y).index).elementOffset = VAL(MID$(result$, _INSTRREV(result$, sp3) + 1))
END IF END IF

View file

@ -112,7 +112,7 @@ TYPE usedVarList
AS LONG id, linenumber, includeLevel, includedLine, scope, localIndex AS LONG id, linenumber, includeLevel, includedLine, scope, localIndex
AS _BYTE used, watch, isarray AS _BYTE used, watch, isarray
AS STRING name, cname, varType, includedFile, subfunc, mostRecentValue AS STRING name, cname, varType, includedFile, subfunc, mostRecentValue
AS STRING watchRange, indexes, elements 'for Arrays and UDTs AS STRING watchRange, indexes, elements, elementTypes 'for Arrays and UDTs
AS _OFFSET elementOffset AS _OFFSET elementOffset
END TYPE END TYPE
@ -25986,6 +25986,7 @@ SUB manageVariableList (__name$, __cname$, localIndex AS LONG, action AS _BYTE)
usedVariableList(i).watchRange = "" usedVariableList(i).watchRange = ""
usedVariableList(i).indexes = "" usedVariableList(i).indexes = ""
usedVariableList(i).elements = "" usedVariableList(i).elements = ""
usedVariableList(i).elementTypes = ""
usedVariableList(i).elementOffset = 0 usedVariableList(i).elementOffset = 0
totalVariablesCreated = totalVariablesCreated + 1 totalVariablesCreated = totalVariablesCreated + 1
END IF END IF