1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-06-29 11:40:38 +00:00

Initial implementation of call stack ($DEBUG).

This commit is contained in:
FellippeHeitor 2021-07-18 22:02:41 -03:00
parent c59cef04d7
commit 8d35b87fd1
5 changed files with 27 additions and 3 deletions

View file

@ -6315,6 +6315,11 @@ SUB DebugMode
COLOR , 4
setStatusMessage 1, "Error occurred on line" + STR$(l), 13
PauseMode = -1
CASE "call"
callstack = callstack + 1
onLine$ = STR$(CVL(RIGHT$(value$, 4)))
procedure$ = LEFT$(value$, LEN(value$) - 4)
'store this in an array and allow it to be inspected
END SELECT
_LIMIT 100

View file

@ -4761,6 +4761,7 @@ DO
END IF
subfunc = RTRIM$(id.callname) 'SUB_..."
subfuncoriginalname$ = RTRIM$(id.cn)
subfuncn = subfuncn + 1
closedsubfunc = 0
subfuncid = targetid
@ -5122,9 +5123,6 @@ DO
PRINT #12, "uint8 *tmp_mem_static_pointer=mem_static_pointer;"
PRINT #12, "uint32 tmp_cmem_sp=cmem_sp;"
PRINT #12, "#include " + CHR$(34) + "data" + str2$(subfuncn) + ".txt" + CHR$(34)
IF vWatchOn = 1 THEN
PRINT #12, "*__LONG_VWATCH_SUBLEVEL=*__LONG_VWATCH_SUBLEVEL+ 1 ;"
END IF
'create new _MEM lock for this scope
PRINT #12, "mem_lock *sf_mem_lock;" 'MUST not be static for recursion reasons
@ -5132,6 +5130,18 @@ DO
PRINT #12, "sf_mem_lock=mem_lock_tmp;"
PRINT #12, "sf_mem_lock->type=3;"
IF vWatchOn = 1 THEN
PRINT #12, "*__LONG_VWATCH_SUBLEVEL=*__LONG_VWATCH_SUBLEVEL+ 1 ;"
IF subfunc <> "SUB_VWATCH" THEN
temp$ = "FUNCTION "
IF id.subfunc = 2 THEN temp$ = "SUB "
temp$ = temp$ + subfuncoriginalname$
PRINT #12, "qbs_set(__STRING_VWATCH_SUBNAME,qbs_new_txt_len(" + CHR$(34) + temp$ + CHR$(34) + "," + str2$(LEN(temp$)) + "));"
PRINT #12, "qbs_cleanup(qbs_tmp_base,0);"
PRINT #12, "*__LONG_VWATCH_LINENUMBER=-2; SUB_VWATCH((ptrszint*)vwatch_local_vars);"
END IF
END IF
PRINT #12, "if (new_error) goto exit_subfunc;"
'statementn = statementn + 1

View file

@ -1,8 +1,10 @@
$CHECKING:OFF
DIM SHARED AS LONG vwatch_linenumber, vwatch_sublevel
DIM SHARED AS STRING vwatch_subname
REDIM SHARED vwatch_breakpoints(0) AS _BYTE
'next lines are just to avoid "unused variable" warnings:
vwatch_linenumber = 0
vwatch_sublevel = 0
vwatch_breakpoints(0) = 0
vwatch_subname = ""
$CHECKING:ON

View file

@ -75,6 +75,11 @@ SUB vwatch (localVariables AS _OFFSET)
cmd$ = "error:" + MKL$(lastLine)
GOSUB SendCommand
EXIT SUB
ELSEIF vwatch_linenumber = -2 THEN
'report a new sub/function has been "entered"
cmd$ = "call:" + vwatch_subname + MKL$(lastLine)
GOSUB SendCommand
EXIT SUB
END IF
IF vwatch_linenumber = lastLine THEN EXIT SUB

View file

@ -0,0 +1,2 @@
SUB vwatch ()
END SUB