1
1
/*
2
- * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2
+ * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
3
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
4
*
5
5
* The Universal Permissive License (UPL), Version 1.0
40
40
*/
41
41
package com .oracle .graal .python .builtins .modules ;
42
42
43
+ import com .oracle .graal .python .builtins .objects .exception .OSErrorEnum ;
43
44
import java .util .ArrayList ;
44
45
import java .util .List ;
45
46
46
47
import com .oracle .graal .python .builtins .CoreFunctions ;
47
48
import com .oracle .graal .python .builtins .PythonBuiltins ;
49
+ import com .oracle .graal .python .builtins .objects .dict .PDict ;
48
50
import com .oracle .graal .python .nodes .function .PythonBuiltinBaseNode ;
49
51
import com .oracle .graal .python .runtime .PythonCore ;
50
52
import com .oracle .truffle .api .dsl .NodeFactory ;
@@ -56,145 +58,22 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
56
58
return new ArrayList <>();
57
59
}
58
60
59
- /**
60
- * Generated using the following:
61
- *
62
- * <pre>
63
- * grep -RPo "#define\s+([A-Z]+)\s+(\d+)" /usr/include/asm-generic/errno* | awk '{print "builtinConstants.put(\"" $2 "\", " $3 ");"}'
64
- * </pre>
65
- */
66
61
@ Override
67
62
public void initialize (PythonCore core ) {
68
63
super .initialize (core );
69
- builtinConstants .put ("EPERM" , 1 );
70
- builtinConstants .put ("ENOENT" , 2 );
71
- builtinConstants .put ("ESRCH" , 3 );
72
- builtinConstants .put ("EINTR" , 4 );
73
- builtinConstants .put ("EIO" , 5 );
74
- builtinConstants .put ("ENXIO" , 6 );
75
- builtinConstants .put ("ENOEXEC" , 8 );
76
- builtinConstants .put ("EBADF" , 9 );
77
- builtinConstants .put ("ECHILD" , 10 );
78
- builtinConstants .put ("EAGAIN" , 11 );
79
- builtinConstants .put ("ENOMEM" , 12 );
80
- builtinConstants .put ("EACCES" , 13 );
81
- builtinConstants .put ("EFAULT" , 14 );
82
- builtinConstants .put ("ENOTBLK" , 15 );
83
- builtinConstants .put ("EBUSY" , 16 );
84
- builtinConstants .put ("EEXIST" , 17 );
85
- builtinConstants .put ("EXDEV" , 18 );
86
- builtinConstants .put ("ENODEV" , 19 );
87
- builtinConstants .put ("ENOTDIR" , 20 );
88
- builtinConstants .put ("EISDIR" , 21 );
89
- builtinConstants .put ("EINVAL" , 22 );
90
- builtinConstants .put ("ENFILE" , 23 );
91
- builtinConstants .put ("EMFILE" , 24 );
92
- builtinConstants .put ("ENOTTY" , 25 );
93
- builtinConstants .put ("ETXTBSY" , 26 );
94
- builtinConstants .put ("EFBIG" , 27 );
95
- builtinConstants .put ("ENOSPC" , 28 );
96
- builtinConstants .put ("ESPIPE" , 29 );
97
- builtinConstants .put ("EROFS" , 30 );
98
- builtinConstants .put ("EMLINK" , 31 );
99
- builtinConstants .put ("EPIPE" , 32 );
100
- builtinConstants .put ("EDOM" , 33 );
101
- builtinConstants .put ("ERANGE" , 34 );
102
- builtinConstants .put ("EDEADLK" , 35 );
103
- builtinConstants .put ("ENAMETOOLONG" , 36 );
104
- builtinConstants .put ("ENOLCK" , 37 );
105
- builtinConstants .put ("ENOSYS" , 38 );
106
- builtinConstants .put ("ENOTEMPTY" , 39 );
107
- builtinConstants .put ("ELOOP" , 40 );
108
- builtinConstants .put ("ENOMSG" , 42 );
109
- builtinConstants .put ("EIDRM" , 43 );
110
- builtinConstants .put ("ECHRNG" , 44 );
111
- builtinConstants .put ("ELNRNG" , 48 );
112
- builtinConstants .put ("EUNATCH" , 49 );
113
- builtinConstants .put ("ENOCSI" , 50 );
114
- builtinConstants .put ("EBADE" , 52 );
115
- builtinConstants .put ("EBADR" , 53 );
116
- builtinConstants .put ("EXFULL" , 54 );
117
- builtinConstants .put ("ENOANO" , 55 );
118
- builtinConstants .put ("EBADRQC" , 56 );
119
- builtinConstants .put ("EBADSLT" , 57 );
120
- builtinConstants .put ("EBFONT" , 59 );
121
- builtinConstants .put ("ENOSTR" , 60 );
122
- builtinConstants .put ("ENODATA" , 61 );
123
- builtinConstants .put ("ETIME" , 62 );
124
- builtinConstants .put ("ENOSR" , 63 );
125
- builtinConstants .put ("ENONET" , 64 );
126
- builtinConstants .put ("ENOPKG" , 65 );
127
- builtinConstants .put ("EREMOTE" , 66 );
128
- builtinConstants .put ("ENOLINK" , 67 );
129
- builtinConstants .put ("EADV" , 68 );
130
- builtinConstants .put ("ESRMNT" , 69 );
131
- builtinConstants .put ("ECOMM" , 70 );
132
- builtinConstants .put ("EPROTO" , 71 );
133
- builtinConstants .put ("EMULTIHOP" , 72 );
134
- builtinConstants .put ("EDOTDOT" , 73 );
135
- builtinConstants .put ("EBADMSG" , 74 );
136
- builtinConstants .put ("EOVERFLOW" , 75 );
137
- builtinConstants .put ("ENOTUNIQ" , 76 );
138
- builtinConstants .put ("EBADFD" , 77 );
139
- builtinConstants .put ("EREMCHG" , 78 );
140
- builtinConstants .put ("ELIBACC" , 79 );
141
- builtinConstants .put ("ELIBBAD" , 80 );
142
- builtinConstants .put ("ELIBSCN" , 81 );
143
- builtinConstants .put ("ELIBMAX" , 82 );
144
- builtinConstants .put ("ELIBEXEC" , 83 );
145
- builtinConstants .put ("EILSEQ" , 84 );
146
- builtinConstants .put ("ERESTART" , 85 );
147
- builtinConstants .put ("ESTRPIPE" , 86 );
148
- builtinConstants .put ("EUSERS" , 87 );
149
- builtinConstants .put ("ENOTSOCK" , 88 );
150
- builtinConstants .put ("EDESTADDRREQ" , 89 );
151
- builtinConstants .put ("EMSGSIZE" , 90 );
152
- builtinConstants .put ("EPROTOTYPE" , 91 );
153
- builtinConstants .put ("ENOPROTOOPT" , 92 );
154
- builtinConstants .put ("EPROTONOSUPPORT" , 93 );
155
- builtinConstants .put ("ESOCKTNOSUPPORT" , 94 );
156
- builtinConstants .put ("EOPNOTSUPP" , 95 );
157
- builtinConstants .put ("EPFNOSUPPORT" , 96 );
158
- builtinConstants .put ("EAFNOSUPPORT" , 97 );
159
- builtinConstants .put ("EADDRINUSE" , 98 );
160
- builtinConstants .put ("EADDRNOTAVAIL" , 99 );
161
- builtinConstants .put ("ENETDOWN" , 100 );
162
- builtinConstants .put ("ENETUNREACH" , 101 );
163
- builtinConstants .put ("ENETRESET" , 102 );
164
- builtinConstants .put ("ECONNABORTED" , 103 );
165
- builtinConstants .put ("ECONNRESET" , 104 );
166
- builtinConstants .put ("ENOBUFS" , 105 );
167
- builtinConstants .put ("EISCONN" , 106 );
168
- builtinConstants .put ("ENOTCONN" , 107 );
169
- builtinConstants .put ("ESHUTDOWN" , 108 );
170
- builtinConstants .put ("ETOOMANYREFS" , 109 );
171
- builtinConstants .put ("ETIMEDOUT" , 110 );
172
- builtinConstants .put ("ECONNREFUSED" , 111 );
173
- builtinConstants .put ("EHOSTDOWN" , 112 );
174
- builtinConstants .put ("EHOSTUNREACH" , 113 );
175
- builtinConstants .put ("EALREADY" , 114 );
176
- builtinConstants .put ("EINPROGRESS" , 115 );
177
- builtinConstants .put ("ESTALE" , 116 );
178
- builtinConstants .put ("EUCLEAN" , 117 );
179
- builtinConstants .put ("ENOTNAM" , 118 );
180
- builtinConstants .put ("ENAVAIL" , 119 );
181
- builtinConstants .put ("EISNAM" , 120 );
182
- builtinConstants .put ("EREMOTEIO" , 121 );
183
- builtinConstants .put ("EDQUOT" , 122 );
184
- builtinConstants .put ("ENOMEDIUM" , 123 );
185
- builtinConstants .put ("EMEDIUMTYPE" , 124 );
186
- builtinConstants .put ("ECANCELED" , 125 );
187
- builtinConstants .put ("ENOKEY" , 126 );
188
- builtinConstants .put ("EKEYEXPIRED" , 127 );
189
- builtinConstants .put ("EKEYREVOKED" , 128 );
190
- builtinConstants .put ("EKEYREJECTED" , 129 );
191
- builtinConstants .put ("EOWNERDEAD" , 130 );
192
- builtinConstants .put ("ENOTRECOVERABLE" , 131 );
193
- builtinConstants .put ("ERFKILL" , 132 );
194
- builtinConstants .put ("EHWPOISON" , 133 );
64
+ PDict errorCode = core .factory ().createDict ();
195
65
196
- // added manually
197
- builtinConstants .put ("EAGAIN" , 11 );
198
- builtinConstants .put ("EWOULDBLOCK" , 11 );
66
+ for (OSErrorEnum value : OSErrorEnum .values ()) {
67
+ // if more OSError have the same number -> the last one wins
68
+ addConstant (value .getNumber (), value .name (), errorCode );
69
+ }
70
+
71
+ // publish the dictionary with mapping code -> string name
72
+ builtinConstants .put ("errorcode" , errorCode );
73
+ }
74
+
75
+ private void addConstant (int number , String name , PDict dict ) {
76
+ builtinConstants .put (name , number );
77
+ dict .setItem (number , name );
199
78
}
200
79
}
0 commit comments