mirror of
https://github.com/roc-lang/roc.git
synced 2025-10-02 16:21:11 +00:00
get foreign call compiling (but not working)
This commit is contained in:
parent
2f42463a97
commit
4c3f0a5002
3 changed files with 69 additions and 4 deletions
|
@ -3264,7 +3264,33 @@ pub fn with_hole<'a>(
|
|||
foreign_symbol,
|
||||
args,
|
||||
ret_var,
|
||||
} => todo!(),
|
||||
} => {
|
||||
let mut arg_symbols = Vec::with_capacity_in(args.len(), env.arena);
|
||||
|
||||
for (_, arg_expr) in args.iter() {
|
||||
arg_symbols.push(possible_reuse_symbol(env, procs, &arg_expr));
|
||||
}
|
||||
let arg_symbols = arg_symbols.into_bump_slice();
|
||||
|
||||
// layout of the return type
|
||||
let layout = layout_cache
|
||||
.from_var(env.arena, ret_var, env.subs)
|
||||
.unwrap_or_else(|err| todo!("TODO turn fn_var into a RuntimeError {:?}", err));
|
||||
|
||||
let result = Stmt::Let(
|
||||
assigned,
|
||||
Expr::ForeignCall(foreign_symbol.clone(), arg_symbols),
|
||||
layout,
|
||||
hole,
|
||||
);
|
||||
|
||||
let iter = args
|
||||
.into_iter()
|
||||
.rev()
|
||||
.map(|(a, b)| (a, Located::at_zero(b)))
|
||||
.zip(arg_symbols.iter().rev());
|
||||
assign_to_symbols(env, procs, layout_cache, iter, result)
|
||||
}
|
||||
|
||||
RunLowLevel { op, args, ret_var } => {
|
||||
let op = optimize_low_level(env.subs, op, &args);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue