tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

source.cpp (1369B)


      1 #define ANNOTATE(property) __attribute__((annotate(property)))
      2 
      3 extern void GC() ANNOTATE("GC Call");
      4 
      5 void GC() {
      6  // If the implementation is too trivial, the function body won't be emitted at
      7  // all.
      8  asm("");
      9 }
     10 
     11 extern void g(int x);
     12 extern void h(int x);
     13 
     14 void f(int x) {
     15  if (x % 3) {
     16    GC();
     17    g(x);
     18  }
     19  h(x);
     20 }
     21 
     22 void g(int x) {
     23  if (x % 2) f(x);
     24  h(x);
     25 }
     26 
     27 void h(int x) {
     28  if (x) {
     29    f(x - 1);
     30    g(x - 1);
     31  }
     32 }
     33 
     34 void leaf() { asm(""); }
     35 
     36 void nonrecursive_root() {
     37  leaf();
     38  leaf();
     39  GC();
     40 }
     41 
     42 void self_recursive(int x) {
     43  if (x) self_recursive(x - 1);
     44 }
     45 
     46 // Set up the graph
     47 //
     48 //   n1 <--> n2          n4 <--> n5
     49 //           \                  /
     50 //            --> n3 <---------
     51 //                 \
     52 //                  ---> n6 --> n7 <---> n8 --> n9
     53 //
     54 // So recursive roots are one of (n1, n2) plus one of (n4, n5).
     55 extern void n1(int x);
     56 extern void n2(int x);
     57 extern void n3(int x);
     58 extern void n4(int x);
     59 extern void n5(int x);
     60 extern void n6(int x);
     61 extern void n7(int x);
     62 extern void n8(int x);
     63 extern void n9(int x);
     64 
     65 void n1(int x) { n2(x); }
     66 
     67 void n2(int x) {
     68  if (x) n1(x - 1);
     69  n3(x);
     70 }
     71 
     72 void n4(int x) { n5(x); }
     73 
     74 void n5(int x) {
     75  if (x) n4(x - 1);
     76  n3(x);
     77 }
     78 
     79 void n3(int x) { n6(x); }
     80 
     81 void n6(int x) { n7(x); }
     82 
     83 void n7(int x) { n8(x); }
     84 
     85 void n8(int x) {
     86  if (x) n7(x - 1);
     87  n9(x);
     88 }
     89 
     90 void n9(int x) { asm(""); }