From 8e276e494cb866914a66d8df862fdc64d780ce82 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Wed, 22 Jan 2025 08:02:46 +0100 Subject: [PATCH] fix: ensure poly types rollback stack is consistent Fixes #915. --- spec/api/get_types_spec.lua | 14 ++++++++++++-- tl.lua | 6 +++--- tl.tl | 6 +++--- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/spec/api/get_types_spec.lua b/spec/api/get_types_spec.lua index 8239ac1f..33fc0bfb 100644 --- a/spec/api/get_types_spec.lua +++ b/spec/api/get_types_spec.lua @@ -22,16 +22,26 @@ describe("tl.get_types", function() local record R f: function(string) f: function(integer) + + g: function(string, X): {X} + g: function(integer, T): T end R.f("hello") + R.f(9) + local z = R.g(123, "hello") ]], env)) local tr, trenv = tl.get_types(result) - local y = 6 + local y = 9 local x = 11 local type_at_y_x = tr.by_pos[""][y][x] - assert(tr.types[type_at_y_x].str == "function(string)") + assert.same(tr.types[type_at_y_x].str, "function(string)") + + y = 11 + x = 21 + type_at_y_x = tr.by_pos[""][y][x] + assert.same(tr.types[type_at_y_x].str, "function(integer, T): T") end) it("reports record functions in record field list", function() diff --git a/tl.lua b/tl.lua index 757af8c5..adeede21 100644 --- a/tl.lua +++ b/tl.lua @@ -8222,8 +8222,8 @@ do end end - function TypeChecker:begin_scope_transaction() - self:begin_scope() + function TypeChecker:begin_scope_transaction(node) + self:begin_scope(node) local st = self.st st[#st].is_transaction = true end @@ -10003,7 +10003,7 @@ a.types[i], b.types[i]), } expected_rets = a_type(node, "tuple", { tuple = { node.expected } }) end - self:begin_scope_transaction() + self:begin_scope_transaction(node) local g local typeargs diff --git a/tl.tl b/tl.tl index 3d5827c1..8a1b046f 100644 --- a/tl.tl +++ b/tl.tl @@ -8222,8 +8222,8 @@ do end end - function TypeChecker:begin_scope_transaction() - self:begin_scope() + function TypeChecker:begin_scope_transaction(node: Node) + self:begin_scope(node) local st = self.st st[#st].is_transaction = true end @@ -10003,7 +10003,7 @@ do expected_rets = a_tuple(node, { node.expected }) end - self:begin_scope_transaction() + self:begin_scope_transaction(node) local g: GenericType local typeargs: {TypeArgType}