File tree Expand file tree Collapse file tree 4 files changed +17
-12
lines changed Expand file tree Collapse file tree 4 files changed +17
-12
lines changed Original file line number Diff line number Diff line change @@ -16,8 +16,7 @@ extern async def spawn(task: Task[Unit]): Unit =
16
16
js "$effekt.capture(k => { setTimeout(() => k($effekt.unit), 0); return $effekt.run(${task}) })"
17
17
llvm """
18
18
call void @c_yield(%Stack %stack)
19
- %unboxed = call ccc %Neg @coercePosNeg(%Pos ${task})
20
- call void @run(%Neg %unboxed)
19
+ call void @run(%Pos %task)
21
20
ret void
22
21
"""
23
22
Original file line number Diff line number Diff line change @@ -401,7 +401,7 @@ void c_tcp_accept_cb(uv_stream_t* server, int status) {
401
401
}
402
402
403
403
sharePositive (accept_closure -> handler );
404
- run_Int (unbox ( accept_closure -> handler ) , (int64_t )client );
404
+ run_Int (accept_closure -> handler , (int64_t )client );
405
405
}
406
406
407
407
void c_tcp_accept (Int listener , struct Pos handler , Stack stack ) {
Original file line number Diff line number Diff line change @@ -706,7 +706,10 @@ define void @resume_Pos(%Stack %stack, %Pos %argument) {
706
706
ret void
707
707
}
708
708
709
- define void @run (%Neg %f ) {
709
+ define void @run (%Pos %boxed ) {
710
+ ; unbox
711
+ %f = call %Neg @coercePosNeg (%Pos %boxed )
712
+
710
713
; fresh stack
711
714
%stack = call %Stack @withEmptyStack ()
712
715
@@ -721,7 +724,10 @@ define void @run(%Neg %f) {
721
724
ret void
722
725
}
723
726
724
- define void @run_Int (%Neg %f , i64 %argument ) {
727
+ define void @run_Int (%Pos %boxed , i64 %argument ) {
728
+ ; unbox
729
+ %f = call %Neg @coercePosNeg (%Pos %boxed )
730
+
725
731
; fresh stack
726
732
%stack = call %Stack @withEmptyStack ()
727
733
@@ -736,7 +742,10 @@ define void @run_Int(%Neg %f, i64 %argument) {
736
742
ret void
737
743
}
738
744
739
- define void @run_Pos (%Neg %f , %Pos %argument ) {
745
+ define void @run_Pos (%Pos %boxed , %Pos %argument ) {
746
+ ; unbox
747
+ %f = call %Neg @coercePosNeg (%Pos %boxed )
748
+
740
749
; fresh stack
741
750
%stack = call %Stack @withEmptyStack ()
742
751
Original file line number Diff line number Diff line change @@ -34,15 +34,12 @@ typedef struct StackValue* Stack;
34
34
35
35
// Defined in rts.ll
36
36
37
- extern struct Pos box (struct Neg );
38
- extern struct Neg unbox (struct Pos );
39
-
40
37
extern void resume_Int (Stack , Int );
41
38
extern void resume_Pos (Stack , struct Pos );
42
39
43
- extern void run (struct Neg );
44
- extern void run_Int (struct Neg , Int );
45
- extern void run_Pos (struct Neg , struct Pos );
40
+ extern void run (struct Pos );
41
+ extern void run_Int (struct Pos , Int );
42
+ extern void run_Pos (struct Pos , struct Pos );
46
43
47
44
// Reference counting primitives defined in LLVM
48
45
extern void eraseNegative (struct Neg );
You can’t perform that action at this time.
0 commit comments