Merge branch 'master' into merge

This commit is contained in:
Vyacheslav Egorov 2024-09-20 17:29:25 +03:00
commit d66e088af8
3 changed files with 38 additions and 4 deletions

View file

@ -23,17 +23,18 @@ jobs:
run: cmake . -DCMAKE_BUILD_TYPE=Release run: cmake . -DCMAKE_BUILD_TYPE=Release
- name: build - name: build
run: cmake --build . --target Luau.Repl.CLI Luau.Analyze.CLI Luau.Compile.CLI --config Release -j 2 run: cmake --build . --target Luau.Repl.CLI Luau.Analyze.CLI Luau.Compile.CLI --config Release -j 2
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v4
if: matrix.os.name != 'windows' if: matrix.os.name != 'windows'
with: with:
name: luau-${{matrix.os.name}} name: luau-${{matrix.os.name}}
path: luau* path: luau*
- uses: actions/upload-artifact@v2 overwrite: true
- uses: actions/upload-artifact@v4
if: matrix.os.name == 'windows' if: matrix.os.name == 'windows'
with: with:
name: luau-${{matrix.os.name}} name: luau-${{matrix.os.name}}
path: Release\luau*.exe path: Release\luau*.exe
overwrite: true
web: web:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@ -52,7 +53,8 @@ jobs:
source emsdk/emsdk_env.sh source emsdk/emsdk_env.sh
emcmake cmake . -DLUAU_BUILD_WEB=ON -DCMAKE_BUILD_TYPE=Release emcmake cmake . -DLUAU_BUILD_WEB=ON -DCMAKE_BUILD_TYPE=Release
make -j2 Luau.Web make -j2 Luau.Web
- uses: actions/upload-artifact@v2 - uses: actions/upload-artifact@v4
with: with:
name: Luau.Web.js name: Luau.Web.js
path: Luau.Web.js path: Luau.Web.js
overwrite: true

View file

@ -2206,6 +2206,12 @@ TypeFunctionReductionResult<TypeId> indexFunctionImpl(
return {std::nullopt, true, {}, {}}; return {std::nullopt, true, {}, {}};
TypeId indexerTy = follow(typeParams.at(1)); TypeId indexerTy = follow(typeParams.at(1));
if (isPending(indexerTy, ctx->solver))
{
return {std::nullopt, false, {indexerTy}, {}};
}
std::shared_ptr<const NormalizedType> indexerNormTy = ctx->normalizer->normalize(indexerTy); std::shared_ptr<const NormalizedType> indexerNormTy = ctx->normalizer->normalize(indexerTy);
// if the indexer failed to normalize, we can't reduce, but know nothing about inhabitance. // if the indexer failed to normalize, we can't reduce, but know nothing about inhabitance.

View file

@ -927,6 +927,32 @@ TEST_CASE_FIXTURE(BuiltinsFixture, "index_type_function_works")
CHECK_EQ("string", toString(tpm->givenTp)); CHECK_EQ("string", toString(tpm->givenTp));
} }
TEST_CASE_FIXTURE(BuiltinsFixture, "index_wait_for_pending_no_crash")
{
if (!FFlag::LuauSolverV2)
return;
CheckResult result = check(R"(
local PlayerData = {
Coins = 0,
Level = 1,
Exp = 0,
MaxExp = 100
}
type Keys = index<typeof(PlayerData), keyof<typeof(PlayerData)>>
-- This function makes it think that there's going to be a pending expansion
local function UpdateData(key: Keys, value)
PlayerData[key] = value
end
UpdateData("Coins", 2)
)");
// Should not crash!
}
TEST_CASE_FIXTURE(BuiltinsFixture, "index_type_function_works_w_array") TEST_CASE_FIXTURE(BuiltinsFixture, "index_type_function_works_w_array")
{ {
if (!FFlag::LuauSolverV2) if (!FFlag::LuauSolverV2)