|
1 | 1 | /* |
2 | | - * Copyright (c) 2022, 2025, Oracle and/or its affiliates. All rights reserved. |
| 2 | + * Copyright (c) 2022, 2026, 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 |
|
42 | 42 |
|
43 | 43 | import java.util.List; |
44 | 44 |
|
| 45 | +import com.oracle.graal.python.annotations.Builtin; |
| 46 | +import com.oracle.graal.python.annotations.PythonOS; |
45 | 47 | import com.oracle.graal.python.builtins.CoreFunctions; |
| 48 | +import com.oracle.graal.python.builtins.Python3Core; |
46 | 49 | import com.oracle.graal.python.builtins.PythonBuiltins; |
47 | | -import com.oracle.graal.python.annotations.PythonOS; |
| 50 | +import com.oracle.graal.python.builtins.objects.PNone; |
| 51 | +import com.oracle.graal.python.builtins.objects.str.StringUtils; |
48 | 52 | import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode; |
| 53 | +import com.oracle.graal.python.nodes.function.PythonBuiltinNode; |
| 54 | +import com.oracle.graal.python.runtime.PythonContext; |
| 55 | +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; |
| 56 | +import com.oracle.truffle.api.dsl.Bind; |
| 57 | +import com.oracle.truffle.api.dsl.GenerateNodeFactory; |
49 | 58 | import com.oracle.truffle.api.dsl.NodeFactory; |
| 59 | +import com.oracle.truffle.api.dsl.Specialization; |
50 | 60 |
|
51 | 61 | @CoreFunctions(defineModule = "_winapi", os = PythonOS.PLATFORM_WIN32) |
52 | 62 | public final class WinapiModuleBuiltins extends PythonBuiltins { |
| 63 | + @Override |
| 64 | + public void initialize(Python3Core core) { |
| 65 | + super.initialize(core); |
| 66 | + addBuiltinConstant("NULL", 0); |
| 67 | + addBuiltinConstant("INFINITE", 0xFFFFFFFFL); |
| 68 | + } |
| 69 | + |
53 | 70 | @Override |
54 | 71 | protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() { |
55 | | - return List.of(); |
| 72 | + return WinapiModuleBuiltinsFactory.getFactories(); |
| 73 | + } |
| 74 | + |
| 75 | + // Managed fallback for native kernel32.GetACP call so encodings work sandboxed |
| 76 | + @Builtin(name = "GetACP", minNumOfPositionalArgs = 0) |
| 77 | + @GenerateNodeFactory |
| 78 | + abstract static class GetfullpathnameNode extends PythonBuiltinNode { |
| 79 | + @TruffleBoundary |
| 80 | + @Specialization |
| 81 | + int getacp(@Bind PythonContext context) { |
| 82 | + var ts = SysModuleBuiltins.GetFileSystemEncodingNode.getFileSystemEncoding(); |
| 83 | + var cp = StringUtils.toLowerCase(ts.toJavaStringUncached()); |
| 84 | + if (cp.startsWith("cp")) { |
| 85 | + try { |
| 86 | + return Integer.valueOf(cp.substring(2)); |
| 87 | + } catch (Exception e) { |
| 88 | + // pass |
| 89 | + } |
| 90 | + } |
| 91 | + return 0; |
| 92 | + } |
| 93 | + } |
| 94 | + |
| 95 | + @Builtin(name = "CloseHandle", minNumOfPositionalArgs = 1) |
| 96 | + @GenerateNodeFactory |
| 97 | + abstract static class CloseHandleNode extends PythonBuiltinNode { |
| 98 | + @Specialization |
| 99 | + static Object closeHandle(@SuppressWarnings("unused") Object handle) { |
| 100 | + return PNone.NONE; |
| 101 | + } |
56 | 102 | } |
57 | 103 | } |
0 commit comments