Skip to content

Commit 830189b

Browse files
committed
add a bit more functional implementation of nt._getfullpathname
1 parent 8ca81dd commit 830189b

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/NtModuleBuiltins.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,17 @@
5757
import com.oracle.graal.python.builtins.modules.PosixModuleBuiltins.PathConversionNode;
5858
import com.oracle.graal.python.builtins.modules.PosixModuleBuiltins.PosixPath;
5959
import com.oracle.graal.python.builtins.objects.PNone;
60+
import com.oracle.graal.python.lib.PyOSFSPathNode;
6061
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
62+
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
6163
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryClinicBuiltinNode;
6264
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
65+
import com.oracle.graal.python.nodes.util.CannotCastException;
66+
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
6367
import com.oracle.graal.python.runtime.PosixSupportLibrary;
68+
import com.oracle.graal.python.util.PythonUtils;
6469
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
70+
import com.oracle.truffle.api.dsl.Cached;
6571
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
6672
import com.oracle.truffle.api.dsl.NodeFactory;
6773
import com.oracle.truffle.api.dsl.Specialization;
@@ -88,20 +94,20 @@ public void initialize(Python3Core core) {
8894
}
8995

9096
@Builtin(name = "_getfullpathname", minNumOfPositionalArgs = 1, parameterNames = {"path"})
91-
@ArgumentClinic(name = "path", conversionClass = PathConversionNode.class, args = {"false", "false"})
9297
@GenerateNodeFactory
93-
abstract static class GetfullpathnameNode extends PythonUnaryClinicBuiltinNode {
98+
abstract static class GetfullpathnameNode extends PythonUnaryBuiltinNode {
9499
@Specialization
95100
@TruffleBoundary
96-
Object getfullpathname(PosixPath path,
97-
@CachedLibrary("getPosixSupport()") PosixSupportLibrary posixLib) {
101+
Object getfullpathname(Object path,
102+
@Cached PyOSFSPathNode fsPathNode,
103+
@Cached CastToJavaStringNode castStr) {
98104
// TODO should call win api
99-
return posixLib.getPathAsString(getPosixSupport(), path.value);
100-
}
101-
102-
@Override
103-
protected ArgumentClinicProvider getArgumentClinic() {
104-
return NtModuleBuiltinsClinicProviders.GetfullpathnameNodeClinicProviderGen.INSTANCE;
105+
try {
106+
String fspath = castStr.execute(fsPathNode.execute(null, path));
107+
return PythonUtils.toTruffleStringUncached(getContext().getEnv().getPublicTruffleFile(fspath).getAbsoluteFile().toString());
108+
} catch (CannotCastException e) {
109+
return path;
110+
}
105111
}
106112
}
107113

0 commit comments

Comments
 (0)