Mercurial > cpython-lru_cache-weakref
annotate Modules/fpetestmodule.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | cab14be0ada1 |
| children |
| rev | line source |
|---|---|
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 /* |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
2 --------------------------------------------------------------------- |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
3 / Copyright (c) 1996. \ |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 | The Regents of the University of California. | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 | All rights reserved. | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 | | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 | Permission to use, copy, modify, and distribute this software for | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 | any purpose without fee is hereby granted, provided that this en- | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 | tire notice is included in all copies of any software which is or | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 | includes a copy or modification of this software and in all | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 | copies of the supporting documentation for such software. | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 | | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 | This work was produced at the University of California, Lawrence | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 | Livermore National Laboratory under contract no. W-7405-ENG-48 | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 | between the U.S. Department of Energy and The Regents of the | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 | University of California for the operation of UC LLNL. | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 | | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 | DISCLAIMER | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 | | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 | This software was prepared as an account of work sponsored by an | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 | agency of the United States Government. Neither the United States | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 | Government nor the University of California nor any of their em- | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 | ployees, makes any warranty, express or implied, or assumes any | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 | liability or responsibility for the accuracy, completeness, or | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 | usefulness of any information, apparatus, product, or process | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 | disclosed, or represents that its use would not infringe | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 | privately-owned rights. Reference herein to any specific commer- | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 | cial products, process, or service by trade name, trademark, | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 | manufacturer, or otherwise, does not necessarily constitute or | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 | imply its endorsement, recommendation, or favoring by the United | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 | States Government or the University of California. The views and | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 | opinions of authors expressed herein do not necessarily state or | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 | reflect those of the United States Government or the University | |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 | of California, and shall not be used for advertising or product | |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
35 \ endorsement purposes. / |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
36 --------------------------------------------------------------------- |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 */ |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 /* |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
40 Floating point exception test module. |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 */ |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 #include "Python.h" |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 static PyObject *fpe_error; |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
47 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
48 PyMODINIT_FUNC PyInit_fpetest(void); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 static PyObject *test(PyObject *self,PyObject *args); |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
50 static double db0(double); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
51 static double overflow(double); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
52 static double nest1(int, double); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
53 static double nest2(int, double); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 static double nest3(double); |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
55 static void printerr(double); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 static PyMethodDef fpetest_methods[] = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
58 {"test", (PyCFunction) test, METH_VARARGS}, |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 {0,0} |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 }; |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 static PyObject *test(PyObject *self,PyObject *args) |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 { |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
64 double r; |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
66 fprintf(stderr,"overflow"); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
67 r = overflow(1.e160); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
68 printerr(r); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
70 fprintf(stderr,"\ndiv by 0"); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
71 r = db0(0.0); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
72 printerr(r); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
74 fprintf(stderr,"\nnested outer"); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
75 r = nest1(0, 0.0); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
76 printerr(r); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
78 fprintf(stderr,"\nnested inner"); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
79 r = nest1(1, 1.0); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
80 printerr(r); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
82 fprintf(stderr,"\ntrailing outer"); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
83 r = nest1(2, 2.0); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
84 printerr(r); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
86 fprintf(stderr,"\nnested prior"); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
87 r = nest2(0, 0.0); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
88 printerr(r); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
90 fprintf(stderr,"\nnested interior"); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
91 r = nest2(1, 1.0); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
92 printerr(r); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
94 fprintf(stderr,"\nnested trailing"); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
95 r = nest2(2, 2.0); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
96 printerr(r); |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 Py_INCREF (Py_None); |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 return Py_None; |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 } |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
101 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
102 static void printerr(double r) |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
103 { |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
104 if(r == 3.1416){ |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
105 fprintf(stderr,"\tPASS\n"); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
106 PyErr_Print(); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
107 }else{ |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
108 fprintf(stderr,"\tFAIL\n"); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
109 } |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
110 PyErr_Clear(); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
111 } |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
112 |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
113 static double nest1(int i, double x) |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
114 { |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 double a = 1.0; |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
116 |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
117 PyFPE_START_PROTECT("Division by zero, outer zone", return 3.1416) |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
118 if(i == 0){ |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
119 a = 1./x; |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
120 }else if(i == 1){ |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
121 /* This (following) message is never seen. */ |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
122 PyFPE_START_PROTECT("Division by zero, inner zone", return 3.1416) |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 a = 1./(1. - x); |
|
5197
74c12704a0bd
New form of PyFPE_END_PROTECT macro.
Guido van Rossum <guido@python.org>
parents:
5147
diff
changeset
|
124 PyFPE_END_PROTECT(a) |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
125 }else if(i == 2){ |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
126 a = 1./(2. - x); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
127 } |
|
5197
74c12704a0bd
New form of PyFPE_END_PROTECT macro.
Guido van Rossum <guido@python.org>
parents:
5147
diff
changeset
|
128 PyFPE_END_PROTECT(a) |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
129 |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
130 return a; |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
131 } |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
132 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
133 static double nest2(int i, double x) |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
134 { |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
135 double a = 1.0; |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
136 PyFPE_START_PROTECT("Division by zero, prior error", return 3.1416) |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
137 if(i == 0){ |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
138 a = 1./x; |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
139 }else if(i == 1){ |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
140 a = nest3(x); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
141 }else if(i == 2){ |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
142 a = 1./(2. - x); |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
143 } |
|
5197
74c12704a0bd
New form of PyFPE_END_PROTECT macro.
Guido van Rossum <guido@python.org>
parents:
5147
diff
changeset
|
144 PyFPE_END_PROTECT(a) |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
145 return a; |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
146 } |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
147 |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 static double nest3(double x) |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
149 { |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 double result; |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
151 /* This (following) message is never seen. */ |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
152 PyFPE_START_PROTECT("Division by zero, nest3 error", return 3.1416) |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
153 result = 1./(1. - x); |
|
5197
74c12704a0bd
New form of PyFPE_END_PROTECT macro.
Guido van Rossum <guido@python.org>
parents:
5147
diff
changeset
|
154 PyFPE_END_PROTECT(result) |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
155 return result; |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
156 } |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
157 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
158 static double db0(double x) |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
159 { |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
160 double a; |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
161 PyFPE_START_PROTECT("Division by zero", return 3.1416) |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
162 a = 1./x; |
|
5197
74c12704a0bd
New form of PyFPE_END_PROTECT macro.
Guido van Rossum <guido@python.org>
parents:
5147
diff
changeset
|
163 PyFPE_END_PROTECT(a) |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
164 return a; |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
165 } |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
166 |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
167 static double overflow(double b) |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
168 { |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
169 double a; |
|
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
170 PyFPE_START_PROTECT("Overflow", return 3.1416) |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
171 a = b*b; |
|
5197
74c12704a0bd
New form of PyFPE_END_PROTECT macro.
Guido van Rossum <guido@python.org>
parents:
5147
diff
changeset
|
172 PyFPE_END_PROTECT(a) |
|
5147
b227b9af5f53
Lee's next version. Careful: this now dumps core for me on SGI IRIX 5.3.
Guido van Rossum <guido@python.org>
parents:
5120
diff
changeset
|
173 return a; |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
174 } |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
175 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
176 static struct PyModuleDef fpetestmodule = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
177 PyModuleDef_HEAD_INIT, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
178 "fpetest", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
179 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
180 -1, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
181 fpetest_methods, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
182 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
183 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
184 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
185 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
186 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
187 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
188 PyMODINIT_FUNC PyInit_fpetest(void) |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
189 { |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
190 PyObject *m, *d; |
|
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
191 |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
192 m = PyModule_Create(&fpetestmodule); |
|
36324
1af7f719ed28
Check return result from Py_InitModule*(). This API can fail.
Neal Norwitz <nnorwitz@gmail.com>
parents:
24471
diff
changeset
|
193 if (m == NULL) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
194 return NULL; |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
195 d = PyModule_GetDict(m); |
|
6367
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
5197
diff
changeset
|
196 fpe_error = PyErr_NewException("fpetest.error", NULL, NULL); |
|
2c29b8982643
Apply two changes, systematically:
Guido van Rossum <guido@python.org>
parents:
5197
diff
changeset
|
197 if (fpe_error != NULL) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
198 PyDict_SetItemString(d, "error", fpe_error); |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
36324
diff
changeset
|
199 return m; |
|
5120
a48f3678f9e1
Changes for Lee Busby's SIGFPE patch set.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
200 } |
