Skip to content

Commit 873be12

Browse files
committed
[GR-23334] make test_strftime pass
PullRequest: graalpython/1399
2 parents d6db3ad + 4863dc5 commit 873be12

File tree

7 files changed

+389
-214
lines changed

7 files changed

+389
-214
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
*graalpython.lib-python.3.test.test_strftime.StrftimeTest.test_strftime
12
*graalpython.lib-python.3.test.test_strftime.Y1900Tests.test_y_1900
23
*graalpython.lib-python.3.test.test_strftime.Y1900Tests.test_y_after_1900
34
*graalpython.lib-python.3.test.test_strftime.Y1900Tests.test_y_before_1900

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_time.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,20 @@
1717
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_clock_monotonic
1818
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_clock_realtime
1919
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_clock_settime
20+
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_conversions
21+
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_ctime
22+
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_ctime_without_arg
2023
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_default_values_for_zero
2124
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_gmtime_without_arg
25+
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_insane_timestamps
26+
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_localtime_failure
2227
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_localtime_without_arg
2328
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_mktime
2429
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_mktime_error
2530
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_monotonic_settime
2631
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_perf_counter
2732
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_pthread_getcpuclockid
33+
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_sleep
2834
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_strftime_bounding_check
2935
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_strftime_format_check
3036
*graalpython.lib-python.3.test.test_time.TimeTestCase.test_strptime_bytes

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

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
package com.oracle.graal.python.builtins.modules;
4242

4343
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ValueError;
44+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTR__;
4445
import static com.oracle.graal.python.runtime.exception.PythonErrorType.TypeError;
4546

4647
import java.util.List;
@@ -50,6 +51,7 @@
5051
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
5152
import com.oracle.graal.python.builtins.PythonBuiltins;
5253
import com.oracle.graal.python.builtins.objects.PNone;
54+
import com.oracle.graal.python.builtins.objects.module.PythonModule;
5355
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
5456
import com.oracle.graal.python.builtins.objects.str.PString;
5557
import com.oracle.graal.python.nodes.ErrorMessages;
@@ -61,17 +63,22 @@
6163
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
6264
import com.oracle.graal.python.runtime.PythonCore;
6365
import com.oracle.graal.python.runtime.exception.PythonErrorType;
66+
import com.oracle.truffle.api.CompilerDirectives;
67+
import com.oracle.truffle.api.CompilerDirectives.CompilationFinal;
6468
import com.oracle.truffle.api.TruffleLanguage.Env;
6569
import com.oracle.truffle.api.dsl.Cached;
6670
import com.oracle.truffle.api.dsl.Fallback;
6771
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
6872
import com.oracle.truffle.api.dsl.NodeFactory;
6973
import com.oracle.truffle.api.dsl.Specialization;
74+
import com.oracle.truffle.api.frame.VirtualFrame;
7075
import com.oracle.truffle.api.interop.TruffleObject;
7176
import com.oracle.truffle.api.library.CachedLibrary;
7277

73-
@CoreFunctions(defineModule = "java")
78+
@CoreFunctions(defineModule = JavaModuleBuiltins.JAVA)
7479
public class JavaModuleBuiltins extends PythonBuiltins {
80+
protected static final String JAVA = "java";
81+
7582
@Override
7683
protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFactories() {
7784
return JavaModuleBuiltinsFactory.getFactories();
@@ -83,6 +90,13 @@ public void initialize(PythonCore core) {
8390
builtinConstants.put("__path__", "java!");
8491
}
8592

93+
@Override
94+
public void postInitialize(PythonCore core) {
95+
super.postInitialize(core);
96+
PythonModule javaModule = core.lookupBuiltinModule(JAVA);
97+
javaModule.setAttribute(__GETATTR__, javaModule.getAttribute(GetAttrNode.JAVA_GETATTR));
98+
}
99+
86100
@Builtin(name = "type", minNumOfPositionalArgs = 1)
87101
@GenerateNodeFactory
88102
abstract static class TypeNode extends PythonUnaryBuiltinNode {
@@ -219,4 +233,30 @@ boolean fallback(Object object, Object klass) {
219233
throw raise(TypeError, ErrorMessages.UNSUPPORTED_INSTANCEOF, object, klass);
220234
}
221235
}
236+
237+
@Builtin(name = GetAttrNode.JAVA_GETATTR, minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 2, declaresExplicitSelf = true)
238+
@GenerateNodeFactory
239+
abstract static class GetAttrNode extends PythonBuiltinNode {
240+
241+
protected static final String JAVA_GETATTR = "java_getattr";
242+
private static final String JAVA_PKG_LOADER = "JavaPackageLoader";
243+
private static final String MAKE_GETATTR = "_make_getattr";
244+
245+
@CompilationFinal protected Object getAttr;
246+
247+
private Object getAttr(VirtualFrame frame, PythonModule mod, PythonObjectLibrary lib) {
248+
if (getAttr == null) {
249+
CompilerDirectives.transferToInterpreterAndInvalidate();
250+
Object javaLoader = lib.lookupAttributeStrict(mod, frame, JAVA_PKG_LOADER);
251+
getAttr = lib.lookupAndCallRegularMethod(javaLoader, frame, MAKE_GETATTR, JAVA);
252+
}
253+
return getAttr;
254+
}
255+
256+
@Specialization
257+
Object none(VirtualFrame frame, PythonModule mod, Object name,
258+
@CachedLibrary(limit = "3") PythonObjectLibrary lib) {
259+
return lib.callObject(getAttr(frame, mod, lib), frame, name);
260+
}
261+
}
222262
}

0 commit comments

Comments
 (0)