0.709
Immutable
release. Only release title and notes can be modified.
We skipped the release last week, but we're back today with some new additions to the VM and Native Code Generation (and as always, improvements to typechecking).
Analysis
- Fixed some instances of "unreduced table types" like { x: number } | { x: number }, especially for data-like arrays (extremely large tables that have the same element of a given type).
-- Prior, hovering would claim `t: {{number} | {number}}`, and now
-- we will claim it is a `{{number}}`
local t = {
{1, 2, 3},
{4, 5, 6}
}- Fixed a bug where user defined type function could crash if passed too many arguments.
- Enables autocomplete to use type information for function arguments to suggest results when those types are variadic. For example:
local function foo(...: "Val1") end
foo(@1)will now suggest "Val1"
- Partially annotated local statements with type packs on the right-hand-side (see example) are now correctly inferred. Prior, we mishandled this case in a way that caused subsequent assignments to assume the first element of the type pack corresponded to the first unannotated element:
local function foo(): (number, boolean, string)
return 1, true "three"
end
-- Prior to this fix, we inferred that `y: number` for this statement ...
local x: number, y, z: string = foo()
-- ... similarly, this would have inferred `z: number` ...
local x: number, y: boolean, z = foo()
-- ... and this would have inferred `y: number` and `z: boolean`
local x: number, y, z = foo()VM
- Fix a use-after-free in
table.find.
Native Code Generation
- Fix a bug in NCG caused by using an incorrect operand in a buffer length check.
- NCG now unmaps executable pages when functions are garbage-collected.
- Provide a native implementation for
math.isnan
Co-authored-by: Hunter Goldstein hgoldstein@roblox.com
Co-authored-by: Ilya Rezvov irezvov@roblox.com
Co-authored-by: Sora Kanosue skanosue@roblox.com
Co-authored-by: Varun Saini vsaini@roblox.com
Co-authored-by: Vyacheslav Egorov vegorov@roblox.com