11/*
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.
33 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44 *
55 * The Universal Permissive License (UPL), Version 1.0
4040 */
4141package com .oracle .graal .python .builtins .modules ;
4242
43+ import com .oracle .graal .python .builtins .objects .exception .OSErrorEnum ;
4344import java .util .ArrayList ;
4445import java .util .List ;
4546
4647import com .oracle .graal .python .builtins .CoreFunctions ;
4748import com .oracle .graal .python .builtins .PythonBuiltins ;
49+ import com .oracle .graal .python .builtins .objects .dict .PDict ;
4850import com .oracle .graal .python .nodes .function .PythonBuiltinBaseNode ;
4951import com .oracle .graal .python .runtime .PythonCore ;
5052import com .oracle .truffle .api .dsl .NodeFactory ;
@@ -56,145 +58,22 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
5658 return new ArrayList <>();
5759 }
5860
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- */
6661 @ Override
6762 public void initialize (PythonCore core ) {
6863 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 ();
19565
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 );
19978 }
20079}
0 commit comments