Skip to content

Commit f1b1fde

Browse files
committed
fix open resolve
Add test
1 parent f5a46b6 commit f1b1fde

4 files changed

Lines changed: 25 additions & 9 deletions

File tree

lib/std/core/unsafe.kk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
module std/core/unsafe
1111

1212
import std/core/types
13+
import std/core/hnd
1314

1415
// _Unsafe_. This function calls a function and pretends it did not have any effect at all.
1516
// Use with utmost care as it should not be used to dismiss user-defined effects that need

src/Core/OpenResolve.hs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -177,13 +177,13 @@ resOpen (Env penv gamma) eopen effFrom effTo tpFrom tpTo@(TFun targs _ tres) exp
177177
in case lsFrom of
178178
[] -> -- no handled effect, use cast
179179
case lsTo of
180-
[] -> trace (" no handled effect, in no handled effect context: use cast")
180+
[] | matchType tlFrom tlTo -> trace (" no handled effect, in no handled effect context: use cast")
181181
expr
182-
_ -> trace (" no handled effect; use none: " ++ show expr) $
183-
if (isHandlerFree expr)
184-
then trace ("*** remove open-none") $ -- fully total with using any operations that need evidence; just leave it as is
185-
expr
186-
else if (n <= 4)
182+
_ ->
183+
trace (" different effects: " ++ show (ppType penv tlFrom) ++ ", to " ++ show (ppType penv tlTo)
184+
++ " with effects: " ++ show (map (ppType penv) lsFrom, map (ppType penv) lsTo)) $
185+
if isHandlerFree expr then expr
186+
else if (n <= 4)
187187
then wrapper (resolve (nameOpenNone n)) [] -- fails in perf1c with exceeded stack size if --optmaxdup < 500 (since it prevents a tailcall)
188188
-- expr -- fails in nim as it evidence is not cleared
189189
else wrapperThunk (resolve (nameOpenNone 0)) []
@@ -236,9 +236,9 @@ isHandlerFree expr
236236
-> case handlerFreeFunType (typeOf vname) of
237237
Nothing -> True
238238
Just ok -> ok
239-
Var vname _ -> case handlerFreeFunType (typeOf vname) of
240-
Nothing -> True
241-
Just ok -> ok && (isSystemCoreName (getName vname))
239+
-- Var vname _ -> case handlerFreeFunType (typeOf vname) of
240+
-- Nothing -> True
241+
-- Just ok -> ok && (isSystemCoreName (getName vname))
242242
Con{} -> True
243243
Lit{} -> True
244244
_ -> False

test/cgen/open-resolve.kk

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import std/os/path
2+
import std/os/env
3+
4+
effect val package-root: path
5+
6+
fun main()
7+
println("Expecting :" ++ (cwd() / ".kokac").show)
8+
with set-package-root(cwd())
9+
println(package-root)
10+
11+
noinline fun set-package-root(root: path, f: () -> <package-root,ndet|e> a): <ndet|e> a
12+
with val package-root = root / ".kokac"
13+
f()

test/cgen/open-resolve.kk.out

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Expecting :"@@@/@kokac"
2+
"@@@/@kokac"

0 commit comments

Comments
 (0)