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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }