1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-06-26 17:10:38 +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_elementoffset = _CV(_OFFSET, MID$(vw_value$, 14, LEN(vw_elementoffset)))
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))
IF vw_i THEN
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
'vw_address now points to the actual data
PRINT "vw_elementoffset =" ; vw_elementoffset
vw_address = vw_address + vw_elementoffset
vw_buf$ = SPACE$(vw_varSize)
vw_m = _MEM(vw_address, vw_varSize)

View file

@ -7574,8 +7574,10 @@ SUB DebugMode
RETURN
GetVarSize:
varSize& = 0
varType$ = usedVariableList(tempIndex&).varType
IF INSTR(varType$, "STRING *") THEN varType$ = "STRING"
checkVarType:
SELECT CASE varType$
CASE "_BYTE", "_UNSIGNED _BYTE", "BYTE", "UNSIGNED BYTE": 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 "_OFFSET", "_UNSIGNED _OFFSET", "OFFSET", "UNSIGNED OFFSET": varSize& = LEN(dummy%&)
CASE "STRING": varSize& = LEN(dummy%&) + LEN(dummy&)
CASE ELSE 'UDT?
varType$ = usedVariableList(tempIndex&).elementTypes
IF LEN(varType$) THEN GOTO checkVarType
END SELECT
RETURN
END SUB
@ -8078,6 +8083,47 @@ FUNCTION idevariablewatchbox$(currentScope$, filter$, selectVar, returnAction)
usedVariableList(varDlgList(y).index).elementOffset = 0
GOTO unWatch
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")
usedVariableList(varDlgList(y).index).elementOffset = VAL(MID$(result$, _INSTRREV(result$, sp3) + 1))
END IF

View file

@ -112,7 +112,7 @@ TYPE usedVarList
AS LONG id, linenumber, includeLevel, includedLine, scope, localIndex
AS _BYTE used, watch, isarray
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
END TYPE
@ -25986,6 +25986,7 @@ SUB manageVariableList (__name$, __cname$, localIndex AS LONG, action AS _BYTE)
usedVariableList(i).watchRange = ""
usedVariableList(i).indexes = ""
usedVariableList(i).elements = ""
usedVariableList(i).elementTypes = ""
usedVariableList(i).elementOffset = 0
totalVariablesCreated = totalVariablesCreated + 1
END IF