Created
April 4, 2014 16:05
-
-
Save ramntry/9977755 to your computer and use it in GitHub Desktop.
g-function with GC support example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Object merge2_(Object ctr, Object hda_, Object tla_) { | |
struct { | |
struct RootsBlock header; | |
Object gcall_cnd; | |
Object gcall_merge2; | |
Object gcall_merge2_1; | |
Object gcall_lss; | |
Object ctr_Cons; | |
Object ctr_Cons_1; | |
Object ctr_Cons_2; | |
} m = { { sll_roots, 7 } }; | |
sll_roots = &m.header; | |
Object result = NULL; | |
switch (SLL_get_ctr_id(ctr[0])) { | |
case Cons_: { | |
m.gcall_lss = lss_(hda_, (Object)ctr[1]); | |
m.gcall_merge2 = merge2_(tla_, (Object)ctr[1], (Object)ctr[2]); | |
m.ctr_Cons = create_object_2(Cons_, hda_, m.gcall_merge2); | |
m.gcall_merge2_1 = merge2_((Object)ctr[2], hda_, tla_); | |
m.ctr_Cons_1 = create_object_2(Cons_, (Object)ctr[1], m.gcall_merge2_1); | |
m.gcall_cnd = cnd_(m.gcall_lss, m.ctr_Cons, m.ctr_Cons_1); | |
result = m.gcall_cnd; | |
break; | |
} case Nil_: { | |
m.ctr_Cons_2 = create_object_2(Cons_, hda_, tla_); | |
result = m.ctr_Cons_2; | |
break; | |
} default: | |
sll_fatal_error("Inexhaustive pattern matching"); | |
} | |
sll_roots = m.header.next; | |
return result; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment