|
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