Legend:

The case frame points to a table that has pointers to the alternatives of the case. Below you see the {{{False}}}

30

Before looking at the rest of the {{{not}}} function, let's look at the code for the {{{True}}} and {{{False}}} closures

31

{{{

32

True_info:

33

jump <address to True alternative>;

34

35

False_info:

36

jump <address to False alternative>;

37

}}}

38

they just jump to the appropriate case alternative that is evaluating the closure. These addresses are calculated from the case frame that is on the top of the stack. In this case they select the alternatives from the jump table that is referred to by the {{{not}}} case frame. Below you see the {{{True}}} alternative

31

39

{{{

32

40

sej_0_alt() {

33

41

R1 = False_closure;

34

42

Sp = Sp + 8;

35

jump <vectored return to False alternative>;

43

jump <address to False alternative>;

36

44

}

37

45

}}}

38

and {{{True}}} alternatives of the not function.

46

and the {{{False}}} alternative of the {{{not}}} function.

39

47

{{{

40

48

sej_1_alt() {

41

49

R1 = True_closure;

42

50

Sp = Sp + 8;

43

jump <vectored return to True alternative>;

51

jump <address to True alternative>;

44

52

}

45

53

}}}

54

Just like the constructor closures, they jump to the appropriate branch of the case expression that is evaluating the {{{not}}} function.