mirror of
https://github.com/imezx/Warp.git
synced 2026-03-18 00:44:16 +00:00
chore(buffer): prevent unexpected crash due precomputes
This commit is contained in:
parent
492da9e607
commit
4d958a91fb
1 changed files with 10 additions and 6 deletions
|
|
@ -9,6 +9,7 @@ export type Writer = {
|
||||||
}
|
}
|
||||||
|
|
||||||
local DEFAULT_CAPACITY: number = 64
|
local DEFAULT_CAPACITY: number = 64
|
||||||
|
local NaN_VALUE: number = 0/0
|
||||||
|
|
||||||
-- 0x00-0x7F: + fixint (0-127) - single byte
|
-- 0x00-0x7F: + fixint (0-127) - single byte
|
||||||
-- 0x80-0x9F: - fixint (-32 to -1) - single byte
|
-- 0x80-0x9F: - fixint (-32 to -1) - single byte
|
||||||
|
|
@ -65,13 +66,13 @@ local T_COLSEQ = 0xF2 -- ColorSequence
|
||||||
local T_NUMSEQ = 0xF3 -- NumberSequence
|
local T_NUMSEQ = 0xF3 -- NumberSequence
|
||||||
local T_BOOL_ARR = 0xDD
|
local T_BOOL_ARR = 0xDD
|
||||||
|
|
||||||
local F16_LOOKUP = table.create(65536)
|
local F16_LOOKUP: { number } = table.create(65536, 0)
|
||||||
do -- precomputes for readf16
|
do -- precomputes for readf16
|
||||||
for raw = 0, 65535 do
|
for raw = 0, 65535 do
|
||||||
local sign = bit32.btest(raw, 0x8000) and -1 or 1
|
local sign: number = bit32.btest(raw, 0x8000) and -1 or 1
|
||||||
local exponent = bit32.extract(raw, 10, 5)
|
local exponent: number = bit32.extract(raw, 10, 5)
|
||||||
local mantissa = bit32.band(raw, 0x03FF)
|
local mantissa: number = bit32.band(raw, 0x03FF)
|
||||||
local value
|
local value: number
|
||||||
if exponent == 0 then
|
if exponent == 0 then
|
||||||
if mantissa == 0 then
|
if mantissa == 0 then
|
||||||
value = 0 * sign
|
value = 0 * sign
|
||||||
|
|
@ -82,12 +83,15 @@ do -- precomputes for readf16
|
||||||
if mantissa == 0 then
|
if mantissa == 0 then
|
||||||
value = sign * math.huge
|
value = sign * math.huge
|
||||||
else
|
else
|
||||||
value = 0/0 -- nan
|
value = NaN_VALUE -- nan
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
value = sign * (1 + mantissa / 1024) * math.ldexp(1, exponent - 15)
|
value = sign * (1 + mantissa / 1024) * math.ldexp(1, exponent - 15)
|
||||||
end
|
end
|
||||||
F16_LOOKUP[raw + 1] = value
|
F16_LOOKUP[raw + 1] = value
|
||||||
|
if raw % 500 == 0 then
|
||||||
|
task.wait()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue