mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 15:21:12 +00:00
fix import of top-level thunks
This commit is contained in:
parent
3d827f40f4
commit
05a6b30644
4 changed files with 11 additions and 4 deletions
|
@ -4758,6 +4758,8 @@ fn reuse_function_symbol<'a>(
|
||||||
.from_var(env.arena, arg_var, env.subs)
|
.from_var(env.arena, arg_var, env.subs)
|
||||||
.expect("creating layout does not fail");
|
.expect("creating layout does not fail");
|
||||||
|
|
||||||
|
add_needed_external(procs, env, arg_var, original);
|
||||||
|
|
||||||
procs.insert_passed_by_name(
|
procs.insert_passed_by_name(
|
||||||
env,
|
env,
|
||||||
arg_var,
|
arg_var,
|
||||||
|
@ -4765,6 +4767,11 @@ fn reuse_function_symbol<'a>(
|
||||||
layout.clone(),
|
layout.clone(),
|
||||||
layout_cache,
|
layout_cache,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// an imported symbol is always a function pointer:
|
||||||
|
// either it's a function, or a top-level 0-argument thunk
|
||||||
|
let expr = Expr::FunctionPointer(original, layout.clone());
|
||||||
|
return Stmt::Let(original, expr, layout, env.arena.alloc(result));
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
// danger: a foreign symbol may not be specialized!
|
// danger: a foreign symbol may not be specialized!
|
||||||
|
|
|
@ -5,4 +5,4 @@ app "effect-example"
|
||||||
|
|
||||||
main : Task.Task {} F64
|
main : Task.Task {} F64
|
||||||
main =
|
main =
|
||||||
Task.after (Task.getLine {}) \lineThisThing -> Task.putLine lineThisThing
|
Task.after Task.getLine \lineThisThing -> Task.putLine lineThisThing
|
||||||
|
|
|
@ -8,7 +8,7 @@ platform folkertdev/foo
|
||||||
{
|
{
|
||||||
putChar : I64 -> Effect {},
|
putChar : I64 -> Effect {},
|
||||||
putLine : Str -> Effect {},
|
putLine : Str -> Effect {},
|
||||||
getLine : {} -> Effect Str
|
getLine : Effect Str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ always = \x -> Effect.always (Ok x)
|
||||||
fail : err -> Task * err
|
fail : err -> Task * err
|
||||||
fail = \x -> Effect.always (Err x)
|
fail = \x -> Effect.always (Err x)
|
||||||
|
|
||||||
getLine : {} -> Task Str *
|
getLine : Task Str *
|
||||||
getLine = \{} -> Effect.after (Effect.getLine {}) always
|
getLine = Effect.after Effect.getLine always
|
||||||
|
|
||||||
putLine : Str -> Task {} *
|
putLine : Str -> Task {} *
|
||||||
putLine = \line -> Effect.map (Effect.putLine line) (\_ -> Ok {})
|
putLine = \line -> Effect.map (Effect.putLine line) (\_ -> Ok {})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue