Skip to content

Commit 9059324

Browse files
committed
[GR-47634] Add support for _lru_cache_wrapper for _functools
PullRequest: graalpython/2902
2 parents 3582723 + 6c2cc66 commit 9059324

20 files changed

+1047
-295
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_functions.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
1+
# Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved.
22
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
33
#
44
# The Universal Permissive License (UPL), Version 1.0
@@ -267,3 +267,15 @@ def wrapper_1(func):
267267
@wrapper_2
268268
def test_func():
269269
pass
270+
271+
def test_functools_lru_cache():
272+
import sys
273+
from functools import lru_cache
274+
275+
@lru_cache()
276+
def cached_func():
277+
pass
278+
279+
type_entity = getattr(sys.modules['functools'], '_lru_cache_wrapper')
280+
assert isinstance(cached_func, type_entity), "lru_cache should not be using the python-based version"
281+

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@
7575
import com.oracle.graal.python.builtins.modules.ErrnoModuleBuiltins;
7676
import com.oracle.graal.python.builtins.modules.FaulthandlerModuleBuiltins;
7777
import com.oracle.graal.python.builtins.modules.FcntlModuleBuiltins;
78-
import com.oracle.graal.python.builtins.modules.FunctoolsModuleBuiltins;
7978
import com.oracle.graal.python.builtins.modules.GcModuleBuiltins;
8079
import com.oracle.graal.python.builtins.modules.GraalHPyDebugModuleBuiltins;
8180
import com.oracle.graal.python.builtins.modules.GraalHPyUniversalModuleBuiltins;
@@ -158,6 +157,10 @@
158157
import com.oracle.graal.python.builtins.modules.ctypes.StructUnionTypeBuiltins;
159158
import com.oracle.graal.python.builtins.modules.ctypes.StructureBuiltins;
160159
import com.oracle.graal.python.builtins.modules.ctypes.UnionTypeBuiltins;
160+
import com.oracle.graal.python.builtins.modules.functools.FunctoolsModuleBuiltins;
161+
import com.oracle.graal.python.builtins.modules.functools.KeyWrapperBuiltins;
162+
import com.oracle.graal.python.builtins.modules.functools.LruCacheWrapperBuiltins;
163+
import com.oracle.graal.python.builtins.modules.functools.PartialBuiltins;
161164
import com.oracle.graal.python.builtins.modules.hashlib.Blake2ModuleBuiltins;
162165
import com.oracle.graal.python.builtins.modules.hashlib.Blake2bObjectBuiltins;
163166
import com.oracle.graal.python.builtins.modules.hashlib.Blake2sObjectBuiltins;
@@ -280,7 +283,6 @@
280283
import com.oracle.graal.python.builtins.objects.itertools.TeeBuiltins;
281284
import com.oracle.graal.python.builtins.objects.itertools.TeeDataObjectBuiltins;
282285
import com.oracle.graal.python.builtins.objects.itertools.ZipLongestBuiltins;
283-
import com.oracle.graal.python.builtins.objects.keywrapper.KeyWrapperBuiltins;
284286
import com.oracle.graal.python.builtins.objects.list.ListBuiltins;
285287
import com.oracle.graal.python.builtins.objects.list.PList;
286288
import com.oracle.graal.python.builtins.objects.map.MapBuiltins;
@@ -302,7 +304,6 @@
302304
import com.oracle.graal.python.builtins.objects.namespace.SimpleNamespaceBuiltins;
303305
import com.oracle.graal.python.builtins.objects.object.ObjectBuiltins;
304306
import com.oracle.graal.python.builtins.objects.object.PythonObject;
305-
import com.oracle.graal.python.builtins.objects.partial.PartialBuiltins;
306307
import com.oracle.graal.python.builtins.objects.posix.DirEntryBuiltins;
307308
import com.oracle.graal.python.builtins.objects.posix.ScandirIteratorBuiltins;
308309
import com.oracle.graal.python.builtins.objects.property.PropertyBuiltins;
@@ -455,8 +456,6 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed)
455456
new TypeBuiltins(),
456457
new IntBuiltins(),
457458
new ForeignObjectBuiltins(),
458-
new KeyWrapperBuiltins(),
459-
new PartialBuiltins(),
460459
new ListBuiltins(),
461460
new DictBuiltins(),
462461
new DictReprBuiltin(),
@@ -579,7 +578,13 @@ private static PythonBuiltins[] initializeBuiltins(boolean nativeAccessAllowed)
579578

580579
new StringModuleBuiltins(),
581580
new ItertoolsModuleBuiltins(),
581+
582+
// _functools
583+
new KeyWrapperBuiltins(),
584+
new PartialBuiltins(),
585+
new LruCacheWrapperBuiltins(),
582586
new FunctoolsModuleBuiltins(),
587+
583588
new ErrnoModuleBuiltins(),
584589
new CodecsModuleBuiltins(),
585590
new CodecsTruffleModuleBuiltins(),
@@ -976,6 +981,7 @@ public final void postInitialize() {
976981
if (!PythonOptions.AUTOMATIC_ASYNC_ACTIONS) {
977982
if (getContext().getEnv().isPolyglotBindingsAccessAllowed()) {
978983
getContext().getEnv().exportSymbol("PollPythonAsyncActions", getContext().getEnv().asGuestValue(new Runnable() {
984+
@Override
979985
public void run() {
980986
getContext().pollAsyncActions();
981987
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/PythonBuiltinClassType.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import static com.oracle.graal.python.nodes.BuiltinNames.J_DICT_VALUEITERATOR;
8080
import static com.oracle.graal.python.nodes.BuiltinNames.J_DICT_VALUES;
8181
import static com.oracle.graal.python.nodes.BuiltinNames.J_FOREIGN;
82+
import static com.oracle.graal.python.nodes.BuiltinNames.J_LRU_CACHE_WRAPPER;
8283
import static com.oracle.graal.python.nodes.BuiltinNames.J_MEMBER_DESCRIPTOR;
8384
import static com.oracle.graal.python.nodes.BuiltinNames.J_PARTIAL;
8485
import static com.oracle.graal.python.nodes.BuiltinNames.J_POSIX;
@@ -143,6 +144,8 @@ public enum PythonBuiltinClassType implements TruffleObject {
143144
PSimpleNamespace("SimpleNamespace", null, "types", Flags.PUBLIC_BASE_WDICT),
144145
PKeyWrapper("KeyWrapper", "_functools", "functools", Flags.PUBLIC_DERIVED_WODICT),
145146
PPartial(J_PARTIAL, "_functools", "functools", Flags.PUBLIC_BASE_WDICT),
147+
PLruListElem("_lru_list_elem", null, "functools", Flags.PUBLIC_DERIVED_WODICT),
148+
PLruCacheWrapper(J_LRU_CACHE_WRAPPER, "_functools", "functools", Flags.PUBLIC_BASE_WDICT),
146149
PDefaultDict(J_DEFAULTDICT, "_collections", "collections", Flags.PUBLIC_BASE_WODICT, DEFAULTDICT_M_FLAGS),
147150
PDeque(J_DEQUE, "_collections", Flags.PUBLIC_BASE_WODICT, DEQUE_M_FLAGS),
148151
PTupleGetter(J_TUPLE_GETTER, "_collections", Flags.PUBLIC_BASE_WODICT),

0 commit comments

Comments
 (0)