This commit is contained in:
Folkert 2023-01-08 14:49:13 +01:00
parent 1c1112ec35
commit 98ba49baf6
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
6 changed files with 48 additions and 23 deletions

View file

@ -4591,9 +4591,6 @@ pub fn build_procedures<'a, 'ctx, 'env>(
let niche = Niche::NONE; let niche = Niche::NONE;
for (symbol, top_level) in glue_layouts.getters.iter().copied() { for (symbol, top_level) in glue_layouts.getters.iter().copied() {
dbg!(symbol, unsafe {
std::mem::transmute::<Symbol, u64>(symbol)
});
let it = top_level.arguments.iter().copied(); let it = top_level.arguments.iter().copied();
let bytes = roc_alias_analysis::func_name_bytes_help(symbol, it, niche, &top_level.result); let bytes = roc_alias_analysis::func_name_bytes_help(symbol, it, niche, &top_level.result);
let func_name = FuncName(&bytes); let func_name = FuncName(&bytes);
@ -4613,6 +4610,8 @@ pub fn build_procedures<'a, 'ctx, 'env>(
let name = getter_fn.get_name().to_str().unwrap(); let name = getter_fn.get_name().to_str().unwrap();
let getter_name = symbol.as_str(&env.interns); let getter_name = symbol.as_str(&env.interns);
dbg!(&getter_name);
// Add the getter function to the module. // Add the getter function to the module.
let _ = expose_function_to_host_help_c_abi( let _ = expose_function_to_host_help_c_abi(
env, env,

View file

@ -974,7 +974,7 @@ fn add_type_help<'a>(
add_type_help(env, ret_layout, *ret_var, None, types) add_type_help(env, ret_layout, *ret_var, None, types)
}; };
let name = format!("TODO_roc_function_{:?}", closure_var); let name = format!("RocFunction_{:?}", closure_var);
let fn_type_id = types.add_named( let fn_type_id = types.add_named(
&env.layout_cache.interner, &env.layout_cache.interner,
name.clone(), name.clone(),

View file

@ -7,5 +7,9 @@ platform "echo-in-rust"
Op : [StdoutWrite Str ({} -> Op), StderrWrite Str ({} -> Op), Done] Op : [StdoutWrite Str ({} -> Op), StderrWrite Str ({} -> Op), Done]
# mainForHost : { bar: Str, foo: I64 -> I64 }
# mainForHost = { bar: main, foo: \x -> x }
mainForHost : Op mainForHost : Op
mainForHost = main mainForHost = main

View file

@ -97,6 +97,21 @@ union union_Op {
_sizer: [u8; 8], _sizer: [u8; 8],
} }
#[derive(Clone)]
struct RocFunction_3 {
closure_data: T
}
impl RocFunction_3 {
pub fn call(self) -> U {
extern "C" {
fn call_the_closure(T) -> U ;
}
call_the_closure(self.closure_data)
}
}
impl Op { impl Op {
#[cfg(any( #[cfg(any(
target_arch = "arm", target_arch = "arm",

View file

@ -93,7 +93,7 @@ pub extern "C" fn rust_main() -> i32 {
println!("Let's do things!"); println!("Let's do things!");
let op: Op = unsafe { let mut op: Op = unsafe {
let mut mem = MaybeUninit::uninit(); let mut mem = MaybeUninit::uninit();
roc_main(mem.as_mut_ptr()); roc_main(mem.as_mut_ptr());
@ -101,10 +101,11 @@ pub extern "C" fn rust_main() -> i32 {
mem.assume_init() mem.assume_init()
}; };
loop {
match dbg!(op.discriminant()) { match dbg!(op.discriminant()) {
StdoutWrite => { StdoutWrite => {
let output: RocStr = unsafe { op.get_StdoutWrite_0() }; let output: RocStr = unsafe { op.get_StdoutWrite_0() };
// let _next = unsafe { op.get_StdoutWrite_1() }; op = unsafe { op.get_StdoutWrite_1() };
dbg!(&output); dbg!(&output);
@ -115,12 +116,18 @@ pub extern "C" fn rust_main() -> i32 {
StderrWrite => { StderrWrite => {
let output: RocStr = unsafe { op.get_StderrWrite_0() }; let output: RocStr = unsafe { op.get_StderrWrite_0() };
// let _next = unsafe { op.get_StderrWrite_1() }; // let _next = unsafe { op.get_StderrWrite_1() };
dbg!(&output);
break;
if let Err(e) = std::io::stderr().write_all(output.as_bytes()) { if let Err(e) = std::io::stderr().write_all(output.as_bytes()) {
panic!("Writing to stderr failed! {:?}", e); panic!("Writing to stderr failed! {:?}", e);
} }
} }
Done => {} Done => {
break;
}
}
} }
println!("Done!"); println!("Done!");

View file

@ -5,5 +5,5 @@ platform "echo-in-zig"
imports [] imports []
provides [mainForHost] provides [mainForHost]
mainForHost : Str mainForHost : { bar: Str, foo: I64 -> I64 }
mainForHost = main mainForHost = { bar: main, foo: \x -> x }