annotate fact-a.c @ 29:a94136a6edb2 default tip

fix for LLVM12
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 17 Jul 2021 14:38:29 +0900
parents 586096c45873
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #define __environment _CbC_environment
29
a94136a6edb2 fix for LLVM12
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
2 #define __return _CbC_return
0
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include "stdio.h"
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
29
a94136a6edb2 fix for LLVM12
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
6 /*
a94136a6edb2 fix for LLVM12
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
7 * This is a first example of CbC, but it is not work on LLVM now
a94136a6edb2 fix for LLVM12
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
8 * because of a variadic function
a94136a6edb2 fix for LLVM12
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
9 */
a94136a6edb2 fix for LLVM12
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
10
27
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
11 __code factorial(int n,int result,int orig,__code(*print)(),__code(*exit1)(), void *exit1env)
0
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 {
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 if (n<0) {
27
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
14 printf("#0008:err %d!\n",n);
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
15 goto (*exit1)(0,exit1env);
0
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 }
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 if (n==0)
27
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
18 goto (*print)(n,result,orig,print,exit1,exit1env);
0
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 else {
27
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
20 result *= n;
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
21 n--;
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
22 goto factorial(n,result,orig,print,exit1,exit1env);
0
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 }
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 }
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25
27
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
26 __code print(int n,int result,int orig,__code(*print)(),__code (*exit1)(),void*exit1env);
0
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 int main( int ac, char *av[])
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 {
27
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
30 int n;
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
31 // n = atoi(av[1]);
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
32 n = 10;
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
33 goto factorial(n,1,n,print,__return,__environment);
0
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 }
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
27
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
36 __code print(int n,int result,int orig,__code(*print)(),__code (*exit1)(),void*exit1env)
0
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 {
27
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
38 printf("#0032:%d! = %d\n",orig, result);
586096c45873 clean up
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 12
diff changeset
39 goto (*exit1)(0,exit1env);
0
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 }
bacef8675607 init repository
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41