|
54 | 54 | import com.oracle.graal.python.builtins.objects.dict.PDict;
|
55 | 55 | import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
|
56 | 56 | import com.oracle.graal.python.runtime.exception.PythonErrorType;
|
| 57 | +import com.oracle.truffle.api.TruffleOptions; |
57 | 58 | import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
|
58 | 59 | import com.oracle.truffle.api.dsl.Fallback;
|
59 | 60 | import com.oracle.truffle.api.dsl.GenerateNodeFactory;
|
@@ -212,62 +213,76 @@ public abstract static class SetLocaleNode extends PythonBuiltinNode {
|
212 | 213 | @Specialization(guards = {"category >= 0", "category <= 6"})
|
213 | 214 | @TruffleBoundary
|
214 | 215 | public Object setLocale(int category, @SuppressWarnings("unused") PNone posixLocaleID) {
|
215 |
| - Locale.Category displayCategory = Locale.Category.DISPLAY; |
216 |
| - Locale.Category formatCategory = Locale.Category.FORMAT; |
217 |
| - |
218 |
| - switch (category) { |
219 |
| - case LC_COLLATE: |
220 |
| - case LC_CTYPE: |
221 |
| - case LC_MESSAGES: |
222 |
| - formatCategory = null; |
223 |
| - break; |
224 |
| - case LC_MONETARY: |
225 |
| - case LC_NUMERIC: |
226 |
| - case LC_TIME: |
227 |
| - displayCategory = null; |
228 |
| - break; |
229 |
| - case LC_ALL: |
230 |
| - default: |
231 |
| - } |
232 |
| - |
233 | 216 | Locale defaultLocale;
|
234 |
| - if (displayCategory != null) { |
235 |
| - defaultLocale = Locale.getDefault(displayCategory); |
| 217 | + Locale.Category displayCategory = null; |
| 218 | + Locale.Category formatCategory = null; |
| 219 | + if (!TruffleOptions.AOT) { |
| 220 | + displayCategory = Locale.Category.DISPLAY; |
| 221 | + formatCategory = Locale.Category.FORMAT; |
| 222 | + |
| 223 | + switch (category) { |
| 224 | + case LC_COLLATE: |
| 225 | + case LC_CTYPE: |
| 226 | + case LC_MESSAGES: |
| 227 | + formatCategory = null; |
| 228 | + break; |
| 229 | + case LC_MONETARY: |
| 230 | + case LC_NUMERIC: |
| 231 | + case LC_TIME: |
| 232 | + displayCategory = null; |
| 233 | + break; |
| 234 | + case LC_ALL: |
| 235 | + default: |
| 236 | + } |
| 237 | + if (displayCategory != null) { |
| 238 | + defaultLocale = Locale.getDefault(displayCategory); |
| 239 | + } else { |
| 240 | + defaultLocale = Locale.getDefault(formatCategory); |
| 241 | + } |
236 | 242 | } else {
|
237 |
| - defaultLocale = Locale.getDefault(formatCategory); |
| 243 | + defaultLocale = Locale.getDefault(); |
238 | 244 | }
|
| 245 | + |
239 | 246 | return toPosix(defaultLocale);
|
240 | 247 | }
|
241 | 248 |
|
242 | 249 | @SuppressWarnings("fallthrough")
|
243 | 250 | @Specialization(guards = {"category >= 0", "category <= 6"})
|
244 | 251 | @TruffleBoundary
|
245 | 252 | public Object setLocale(int category, String posixLocaleID) {
|
246 |
| - Locale.Category displayCategory = Locale.Category.DISPLAY; |
247 |
| - Locale.Category formatCategory = Locale.Category.FORMAT; |
248 |
| - |
249 |
| - switch (category) { |
250 |
| - case LC_COLLATE: |
251 |
| - case LC_CTYPE: |
252 |
| - case LC_MESSAGES: |
253 |
| - formatCategory = null; |
254 |
| - break; |
255 |
| - case LC_MONETARY: |
256 |
| - case LC_NUMERIC: |
257 |
| - case LC_TIME: |
258 |
| - displayCategory = null; |
259 |
| - break; |
260 |
| - case LC_ALL: |
261 |
| - default: |
| 253 | + Locale.Category displayCategory = null; |
| 254 | + Locale.Category formatCategory = null; |
| 255 | + if (!TruffleOptions.AOT) { |
| 256 | + displayCategory = Locale.Category.DISPLAY; |
| 257 | + formatCategory = Locale.Category.FORMAT; |
| 258 | + |
| 259 | + switch (category) { |
| 260 | + case LC_COLLATE: |
| 261 | + case LC_CTYPE: |
| 262 | + case LC_MESSAGES: |
| 263 | + formatCategory = null; |
| 264 | + break; |
| 265 | + case LC_MONETARY: |
| 266 | + case LC_NUMERIC: |
| 267 | + case LC_TIME: |
| 268 | + displayCategory = null; |
| 269 | + break; |
| 270 | + case LC_ALL: |
| 271 | + default: |
| 272 | + } |
262 | 273 | }
|
263 | 274 |
|
264 | 275 | Locale newLocale = fromPosix(posixLocaleID);
|
265 | 276 | if (newLocale != null) {
|
266 |
| - if (displayCategory != null) { |
267 |
| - Locale.setDefault(displayCategory, newLocale); |
268 |
| - } |
269 |
| - if (formatCategory != null) { |
270 |
| - Locale.setDefault(formatCategory, newLocale); |
| 277 | + if (!TruffleOptions.AOT) { |
| 278 | + if (displayCategory != null) { |
| 279 | + Locale.setDefault(displayCategory, newLocale); |
| 280 | + } |
| 281 | + if (formatCategory != null) { |
| 282 | + Locale.setDefault(formatCategory, newLocale); |
| 283 | + } |
| 284 | + } else { |
| 285 | + Locale.setDefault(newLocale); |
271 | 286 | }
|
272 | 287 | } else {
|
273 | 288 | throw raise(PythonErrorType.ValueError, "unsupported locale setting");
|
|
0 commit comments