Changeset 2bfee8e for doc/theses/andrew_beach_MMath/code/fixup-other-f.cfa
- Timestamp:
- Sep 7, 2021, 12:26:06 PM (3 years ago)
- Branches:
- ADT, ast-experimental, enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
- Children:
- 031453c
- Parents:
- 1341ce1 (diff), 812ba3d (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/andrew_beach_MMath/code/fixup-other-f.cfa
r1341ce1 r2bfee8e 2 2 #include <clock.hfa> 3 3 #include <fstream.hfa> 4 #include <stdlib.hfa> // strto4 #include <stdlib.hfa> 5 5 6 unsigned int frames; // use global because of gcc thunk problem 6 // Using a global value to allow hoisting (and avoid thunks). 7 unsigned int frames; 7 8 8 9 void nounwind_fixup(unsigned int dummy, void (*raised_rtn)(int &), void (*not_raised_rtn)(int &)) { 9 10 void not_raised(int & fixup) { 10 fixup = frames + 42; // use local scope => lexical link11 fixup = frames + 42; 11 12 } 12 13 … … 14 15 frames -= 1; 15 16 nounwind_fixup(42, raised_rtn, not_raised); 17 // Always false, but prevents recursion elimination. 18 if (-1 == frames) printf("~"); 16 19 } else { 17 20 int fixup = dummy; … … 31 34 frames = total_frames; 32 35 36 // Closures at the top level are allowed to be true closures. 33 37 void raised(int & fixup) { 34 fixup = total_frames + 42; // use local scope => lexical link38 fixup = total_frames + 42; 35 39 } 36 40 void not_raised(int & fixup) { 37 fixup = total_frames + 42; // use local scope => lexical link41 fixup = total_frames + 42; 38 42 } 39 43
Note: See TracChangeset
for help on using the changeset viewer.