mirror of
https://github.com/QB64-Phoenix-Edition/QB64pe.git
synced 2024-07-01 13:50:36 +00:00
Adapt CLEAR
to deal with var-length UDT variables.
This commit is contained in:
parent
5c9cc96ca7
commit
7413e2fe6f
|
@ -11486,7 +11486,8 @@ FOR i = 1 TO idn
|
||||||
END IF
|
END IF
|
||||||
IF typ AND ISUDT THEN
|
IF typ AND ISUDT THEN
|
||||||
IF udtxvariable(typ AND 511) THEN
|
IF udtxvariable(typ AND 511) THEN
|
||||||
'this is where new code must come to clear UDTs with variable-length strings
|
'this next procedure resets values of UDT variables with variable-length strings
|
||||||
|
clear_udt_with_varstrings e$, typ AND 511, 12, 0
|
||||||
ELSE
|
ELSE
|
||||||
PRINT #12, "memset((void*)" + e$ + ",0," + bytes$ + ");"
|
PRINT #12, "memset((void*)" + e$ + ",0," + bytes$ + ");"
|
||||||
END IF
|
END IF
|
||||||
|
@ -25915,6 +25916,30 @@ SUB free_udt_varstrings (n$, udt, file, base_offset)
|
||||||
LOOP
|
LOOP
|
||||||
END SUB
|
END SUB
|
||||||
|
|
||||||
|
SUB clear_udt_with_varstrings (n$, udt, file, base_offset)
|
||||||
|
IF NOT udtxvariable(udt) THEN EXIT SUB
|
||||||
|
element = udtxnext(udt)
|
||||||
|
offset = 0
|
||||||
|
DO WHILE element
|
||||||
|
IF udtetype(element) AND ISSTRING THEN
|
||||||
|
IF (udtetype(element) AND ISFIXEDLENGTH) = 0 THEN
|
||||||
|
PRINT #file, "(*(qbs**)(((char*)" + n$ + ")+" + STR$(base_offset + offset) + "))->len=0;"
|
||||||
|
ELSE
|
||||||
|
PRINT #file, "memset((void*)" + n$ + "+" + STR$(base_offset + offset) + ",0," + STR$(udtesize(element) \ 8) + ");"
|
||||||
|
END IF
|
||||||
|
ELSE
|
||||||
|
IF udtetype(element) AND ISUDT THEN
|
||||||
|
clear_udt_with_varstrings n$, udtetype(element) AND 511, file, base_offset + offset
|
||||||
|
ELSE
|
||||||
|
PRINT #file, "memset((void*)" + n$ + "+" + STR$(base_offset + offset) + ",0," + STR$(udtesize(element) \ 8) + ");"
|
||||||
|
END IF
|
||||||
|
END IF
|
||||||
|
offset = offset + udtesize(element) \ 8
|
||||||
|
element = udtenext(element)
|
||||||
|
LOOP
|
||||||
|
END SUB
|
||||||
|
|
||||||
|
|
||||||
SUB initialise_array_udt_varstrings (n$, udt, base_offset, bytesperelement$, acc$)
|
SUB initialise_array_udt_varstrings (n$, udt, base_offset, bytesperelement$, acc$)
|
||||||
IF NOT udtxvariable(udt) THEN EXIT SUB
|
IF NOT udtxvariable(udt) THEN EXIT SUB
|
||||||
offset = base_offset
|
offset = base_offset
|
||||||
|
|
Loading…
Reference in a new issue