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

Improves detection of used variables; Arrays still to be worked on.

This commit is contained in:
FellippeHeitor 2021-07-21 14:25:21 -03:00
parent b1ddfd06c7
commit 0724910a2e

View file

@ -18555,33 +18555,6 @@ FUNCTION findid& (n2$)
id = ids(i) id = ids(i)
t = id.t t = id.t
IF id.subfunc = 0 THEN
IF t = 0 THEN
t = id.arraytype
IF t AND ISUDT THEN
manageVariableList "", scope$ + "ARRAY_UDT_" + RTRIM$(id.n), 1
ELSE
n$ = id2shorttypename$
IF LEFT$(n$, 1) = "_" THEN
manageVariableList "", scope$ + "ARRAY" + n$ + "_" + RTRIM$(id.n), 2
ELSE
manageVariableList "", scope$ + "ARRAY_" + n$ + "_" + RTRIM$(id.n), 3
END IF
END IF
ELSE
IF t AND ISUDT THEN
manageVariableList "", scope$ + "UDT_" + RTRIM$(id.n), 4
ELSE
n$ = id2shorttypename$
IF LEFT$(n$, 1) = "_" THEN
'manageVariableList "", scope$ + MID$(n$, 2) + "_" + RTRIM$(id.n), 5
ELSE
manageVariableList "", scope$ + n$ + "_" + RTRIM$(id.n), 6
END IF
END IF
END IF
END IF
currentid = i currentid = i
EXIT FUNCTION EXIT FUNCTION
@ -20906,6 +20879,7 @@ FUNCTION refer$ (a2$, typ AS LONG, method AS LONG)
n$ = "UDT_" + RTRIM$(id.n) n$ = "UDT_" + RTRIM$(id.n)
IF id.t = 0 THEN n$ = "ARRAY_" + n$ IF id.t = 0 THEN n$ = "ARRAY_" + n$
n$ = scope$ + n$ n$ = scope$ + n$
manageVariableList "", n$, 1
refer$ = n$ refer$ = n$
EXIT FUNCTION EXIT FUNCTION
END IF END IF
@ -20938,6 +20912,7 @@ FUNCTION refer$ (a2$, typ AS LONG, method AS LONG)
END IF END IF
'print "REFER:"+r$+","+str2$(typ) 'print "REFER:"+r$+","+str2$(typ)
manageVariableList "", r$, 2
refer$ = r$ refer$ = r$
EXIT FUNCTION EXIT FUNCTION
END IF END IF
@ -20949,6 +20924,7 @@ FUNCTION refer$ (a2$, typ AS LONG, method AS LONG)
n$ = RTRIM$(id.callname) n$ = RTRIM$(id.callname)
IF method = 1 THEN IF method = 1 THEN
refer$ = n$ refer$ = n$
manageVariableList "", n$, 3
typ = typbak typ = typbak
EXIT FUNCTION EXIT FUNCTION
END IF END IF
@ -20962,6 +20938,7 @@ FUNCTION refer$ (a2$, typ AS LONG, method AS LONG)
r$ = "((qbs*)(((uint64*)(" + n$ + "[0]))[" + a$ + "]))" r$ = "((qbs*)(((uint64*)(" + n$ + "[0]))[" + a$ + "]))"
END IF END IF
stringprocessinghappened = 1 stringprocessinghappened = 1
manageVariableList "", r$, 4
refer$ = r$ refer$ = r$
EXIT FUNCTION EXIT FUNCTION
END IF END IF
@ -20973,6 +20950,7 @@ FUNCTION refer$ (a2$, typ AS LONG, method AS LONG)
r$ = r$ + "(" + str2(typ AND 511) + "," r$ = r$ + "(" + str2(typ AND 511) + ","
r$ = r$ + "(uint8*)(" + n$ + "[0])" + "," r$ = r$ + "(uint8*)(" + n$ + "[0])" + ","
r$ = r$ + a$ + ")" r$ = r$ + a$ + ")"
manageVariableList "", r$, 5
refer$ = r$ refer$ = r$
EXIT FUNCTION EXIT FUNCTION
ELSE ELSE
@ -20999,6 +20977,7 @@ FUNCTION refer$ (a2$, typ AS LONG, method AS LONG)
END IF END IF
IF t$ = "" THEN Give_Error "Cannot find C type to return array data": EXIT FUNCTION IF t$ = "" THEN Give_Error "Cannot find C type to return array data": EXIT FUNCTION
r$ = "((" + t$ + "*)(" + n$ + "[0]))[" + a$ + "]" r$ = "((" + t$ + "*)(" + n$ + "[0]))[" + a$ + "]"
manageVariableList "", r$, 6
refer$ = r$ refer$ = r$
EXIT FUNCTION EXIT FUNCTION
END IF 'array END IF 'array
@ -21046,6 +21025,7 @@ FUNCTION refer$ (a2$, typ AS LONG, method AS LONG)
IF LEFT$(r$, 1) = "*" THEN r$ = RIGHT$(r$, LEN(r$) - 1) IF LEFT$(r$, 1) = "*" THEN r$ = RIGHT$(r$, LEN(r$) - 1)
typ = typbak typ = typbak
END IF END IF
manageVariableList "", r$, 7
refer$ = r$ refer$ = r$
EXIT FUNCTION EXIT FUNCTION
END IF 'variable END IF 'variable
@ -22114,10 +22094,11 @@ SUB setrefer (a2$, typ2 AS LONG, e2$, method AS LONG)
'we have now established we have 2 pointers to similar data types! 'we have now established we have 2 pointers to similar data types!
'ASSUME BYTE TYPE!!! 'ASSUME BYTE TYPE!!!
src$ = "((char*)" + scope$ + n2$ + ")+(" + o2$ + ")" src$ = "((char*)" + scope$ + n2$ + ")+(" + o2$ + ")"
manageVariableList "", scope$ + n2$, 8
directudt: directudt:
IF u <> u2 OR e2 <> 0 THEN Give_Error "Expected = similar user defined type": EXIT SUB IF u <> u2 OR e2 <> 0 THEN Give_Error "Expected = similar user defined type": EXIT SUB
dst$ = "((char*)" + lhsscope$ + n$ + ")+(" + o$ + ")" dst$ = "((char*)" + lhsscope$ + n$ + ")+(" + o$ + ")"
manageVariableList "", lhsscope$ + n$, 9
copy_full_udt dst$, src$, 12, 0, u copy_full_udt dst$, src$, 12, 0, u
'print "setFULLUDTrefer!" 'print "setFULLUDTrefer!"
@ -22154,7 +22135,7 @@ SUB setrefer (a2$, typ2 AS LONG, e2$, method AS LONG)
'print "setUDTrefer:"+r$,e$ 'print "setUDTrefer:"+r$,e$
tlayout$ = tl$ tlayout$ = tl$
IF LEFT$(r$, 1) = "*" THEN r$ = MID$(r$, 2) IF LEFT$(r$, 1) = "*" THEN r$ = MID$(r$, 2)
manageVariableList "", scope$ + n$, 7 manageVariableList "", r$, 10
EXIT SUB EXIT SUB
END IF END IF
@ -22189,7 +22170,7 @@ SUB setrefer (a2$, typ2 AS LONG, e2$, method AS LONG)
PRINT #12, cleanupstringprocessingcall$ + "0);" PRINT #12, cleanupstringprocessingcall$ + "0);"
tlayout$ = tl$ tlayout$ = tl$
IF LEFT$(r$, 1) = "*" THEN r$ = MID$(r$, 2) IF LEFT$(r$, 1) = "*" THEN r$ = MID$(r$, 2)
manageVariableList "", r$, 8 manageVariableList "", r$, 11
EXIT SUB EXIT SUB
END IF END IF
@ -22236,6 +22217,7 @@ SUB setrefer (a2$, typ2 AS LONG, e2$, method AS LONG)
IF Error_Happened THEN EXIT SUB IF Error_Happened THEN EXIT SUB
ELSE ELSE
l$ = "if (!new_error) ((" + t$ + "*)(" + n$ + "[0]))[tmp_long]=" + e$ + ";" l$ = "if (!new_error) ((" + t$ + "*)(" + n$ + "[0]))[tmp_long]=" + e$ + ";"
manageVariableList "", e$, 12
END IF END IF
PRINT #12, l$ PRINT #12, l$
@ -22265,7 +22247,7 @@ SUB setrefer (a2$, typ2 AS LONG, e2$, method AS LONG)
IF arrayprocessinghappened THEN arrayprocessinghappened = 0 IF arrayprocessinghappened THEN arrayprocessinghappened = 0
tlayout$ = tl$ tlayout$ = tl$
IF LEFT$(r$, 1) = "*" THEN r$ = MID$(r$, 2) IF LEFT$(r$, 1) = "*" THEN r$ = MID$(r$, 2)
manageVariableList "", r$, 9 manageVariableList "", r$, 13
EXIT SUB EXIT SUB
END IF END IF
@ -22297,7 +22279,7 @@ SUB setrefer (a2$, typ2 AS LONG, e2$, method AS LONG)
IF arrayprocessinghappened THEN arrayprocessinghappened = 0 IF arrayprocessinghappened THEN arrayprocessinghappened = 0
tlayout$ = tl$ tlayout$ = tl$
IF LEFT$(r$, 1) = "*" THEN r$ = MID$(r$, 2) IF LEFT$(r$, 1) = "*" THEN r$ = MID$(r$, 2)
manageVariableList "", r$, 10 manageVariableList "", r$, 14
EXIT SUB EXIT SUB
END IF END IF
@ -22326,8 +22308,7 @@ SUB setrefer (a2$, typ2 AS LONG, e2$, method AS LONG)
tlayout$ = tl$ tlayout$ = tl$
IF LEFT$(r$, 1) = "*" THEN r$ = MID$(r$, 2) IF LEFT$(r$, 1) = "*" THEN r$ = MID$(r$, 2)
manageVariableList "", r$, 11 manageVariableList "", r$, 15
EXIT SUB EXIT SUB
END IF 'variable END IF 'variable
@ -25878,8 +25859,9 @@ SUB dump_udts
CLOSE #f CLOSE #f
END SUB END SUB
SUB manageVariableList (name$, __cname$, action AS _BYTE) SUB manageVariableList (__name$, __cname$, action AS _BYTE)
DIM findItem AS LONG, cname$, i AS LONG DIM findItem AS LONG, cname$, i AS LONG, name$
name$ = __name$
cname$ = __cname$ cname$ = __cname$
IF LEN(cname$) = 0 THEN EXIT SUB IF LEN(cname$) = 0 THEN EXIT SUB
@ -25914,6 +25896,7 @@ SUB manageVariableList (name$, __cname$, action AS _BYTE)
END IF END IF
usedVariableList(i).scope = subfuncn usedVariableList(i).scope = subfuncn
usedVariableList(i).cname = cname$ usedVariableList(i).cname = cname$
IF LEN(RTRIM$(id.musthave)) > 0 THEN name$ = name$ + RTRIM$(id.musthave)
usedVariableList(i).name = name$ usedVariableList(i).name = name$
totalVariablesCreated = totalVariablesCreated + 1 totalVariablesCreated = totalVariablesCreated + 1
END IF END IF