7c0cc3111a
The new test tc4.lua exposes the problem being fixed. We need separate caches otherwise we may mistakenly assume that an expression was already checked by the type checker, while only its type was inferred. Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
17 lines
603 B
Lua
17 lines
603 B
Lua
local env = empty_environment()
|
|
env = add_decl(env, mk_var_decl("or", mk_arrow(Bool, Bool, Bool)))
|
|
env = add_decl(env, mk_var_decl("A", Bool))
|
|
local Or = Const("or")
|
|
local A = Const("A")
|
|
local B = Const("B")
|
|
local tc = type_checker(env)
|
|
local F = Or(A, B)
|
|
assert(tc:infer(F) == Bool)
|
|
assert(not pcall(function()
|
|
-- The following test must fail since B is not
|
|
-- declared in env.
|
|
-- This test make sure that infer and check are
|
|
-- not sharing the same cache.
|
|
print(tc:check(F))
|
|
end
|
|
))
|