Skip to content

Commit e0db1b4

Browse files
committed
[GR-50366][GR-49943] Fixes for redis and tomlkit
PullRequest: graalpython/3076
2 parents 96d20d0 + 7cd0155 commit e0db1b4

File tree

16 files changed

+167
-88
lines changed

16 files changed

+167
-88
lines changed

graalpython/com.oracle.graal.python.pegparser.test/src/com/oracle/graal/python/pegparser/test/AwaitAndAsyncTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,6 @@ public void asyncFor02() throws Exception {
9797

9898
@Test
9999
public void asyncComprehension() throws Exception {
100-
checkScopeAndTree("[i async for i in foo()]");
100+
checkScopeAndTree("async def f():\n [i async for i in foo()]");
101101
}
102102
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
ScopeEnvironment
22
Scope null Module
33
Symbols:
4-
foo: [Use, GlobalImplicit]
5-
Scope listcomp Function
6-
Flags: [IsCoroutine, IsComprehension]
7-
Varnames: .0
4+
f: [DefLocal, Local]
5+
Scope f Function
6+
Flags: [IsCoroutine]
87
Symbols:
9-
.0: [DefParam, Local]
10-
i: [DefLocal, Use, DefCompIter, Local]
8+
foo: [Use, GlobalImplicit]
9+
Scope listcomp Function
10+
Flags: [IsNested, IsCoroutine, IsComprehension]
11+
Varnames: .0
12+
Symbols:
13+
.0: [DefParam, Local]
14+
i: [DefLocal, Use, DefCompIter, Local]
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
Input:
22
------
3-
[i async for i in foo()]
3+
async def f():
4+
[i async for i in foo()]
45

56
Output:
67
-------
7-
Module[1:0-1:24]
8-
ListComp[1:0-1:24]
9-
Element: Name[1:1-1:2] Value: "i"
10-
ComprehensionTy[1:3-1:23]
11-
Target: Name[1:13-1:14] Value: "i" Store
12-
Iterator:
13-
Call[1:18-1:23]
14-
Target: Name[1:18-1:21] Value: "foo"
8+
Module[1:0-2:25]
9+
AsyncFunctionDef[1:0-2:25]
10+
Name:f
11+
ArgumentsTy[1:0-1:0]
12+
---- Function body of f ----
13+
ListComp[2:1-2:25]
14+
Element: Name[2:2-2:3] Value: "i"
15+
ComprehensionTy[2:4-2:24]
16+
Target: Name[2:14-2:15] Value: "i" Store
17+
Iterator:
18+
Call[2:19-2:24]
19+
Target: Name[2:19-2:22] Value: "foo"
20+
---- End of f function ----

graalpython/com.oracle.graal.python.pegparser/src/com/oracle/graal/python/pegparser/scope/ScopeEnvironment.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -393,6 +393,7 @@ private void handleComprehension(ExprTy e, String scopeName, ComprehensionTy[] g
393393
outermost.iter.accept(this);
394394
currentScope.comprehensionIterExpression--;
395395
enterBlock(scopeName, Scope.ScopeType.Function, e);
396+
boolean isAsync;
396397
try {
397398
currentScope.comprehensionType = comprehensionType;
398399
if (outermost.isAsync) {
@@ -414,9 +415,13 @@ private void handleComprehension(ExprTy e, String scopeName, ComprehensionTy[] g
414415
if (isGenerator) {
415416
currentScope.flags.add(ScopeFlags.IsGenerator);
416417
}
418+
isAsync = currentScope.isCoroutine() && !isGenerator;
417419
} finally {
418420
exitBlock();
419421
}
422+
if (isAsync) {
423+
currentScope.flags.add(ScopeFlags.IsCoroutine);
424+
}
420425
}
421426

422427
private void raiseIfComprehensionBlock(ExprTy node) {
@@ -545,6 +550,7 @@ public Void visit(ExprTy.Attribute node) {
545550
public Void visit(ExprTy.Await node) {
546551
raiseIfAnnotationBlock("await expression", node);
547552
node.value.accept(this);
553+
currentScope.flags.add(ScopeFlags.IsCoroutine);
548554
return null;
549555
}
550556

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
11
*graalpython.lib-python.3.test.test_binascii.ArrayBinASCIITest.test_b2a_base64_newline
22
*graalpython.lib-python.3.test.test_binascii.ArrayBinASCIITest.test_base64valid
33
*graalpython.lib-python.3.test.test_binascii.ArrayBinASCIITest.test_crc32
4+
*graalpython.lib-python.3.test.test_binascii.ArrayBinASCIITest.test_crc_hqx
45
*graalpython.lib-python.3.test.test_binascii.ArrayBinASCIITest.test_exceptions
56
*graalpython.lib-python.3.test.test_binascii.ArrayBinASCIITest.test_hex
67
*graalpython.lib-python.3.test.test_binascii.BinASCIITest.test_b2a_base64_newline
78
*graalpython.lib-python.3.test.test_binascii.BinASCIITest.test_base64valid
89
*graalpython.lib-python.3.test.test_binascii.BinASCIITest.test_crc32
10+
*graalpython.lib-python.3.test.test_binascii.BinASCIITest.test_crc_hqx
911
*graalpython.lib-python.3.test.test_binascii.BinASCIITest.test_exceptions
1012
*graalpython.lib-python.3.test.test_binascii.BinASCIITest.test_hex
1113
*graalpython.lib-python.3.test.test_binascii.BytearrayBinASCIITest.test_b2a_base64_newline
1214
*graalpython.lib-python.3.test.test_binascii.BytearrayBinASCIITest.test_base64valid
1315
*graalpython.lib-python.3.test.test_binascii.BytearrayBinASCIITest.test_crc32
16+
*graalpython.lib-python.3.test.test_binascii.BytearrayBinASCIITest.test_crc_hqx
1417
*graalpython.lib-python.3.test.test_binascii.BytearrayBinASCIITest.test_exceptions
1518
*graalpython.lib-python.3.test.test_binascii.BytearrayBinASCIITest.test_hex
1619
*graalpython.lib-python.3.test.test_binascii.ChecksumBigBufferTestCase.test_big_buffer
1720
*graalpython.lib-python.3.test.test_binascii.MemoryviewBinASCIITest.test_b2a_base64_newline
1821
*graalpython.lib-python.3.test.test_binascii.MemoryviewBinASCIITest.test_base64valid
1922
*graalpython.lib-python.3.test.test_binascii.MemoryviewBinASCIITest.test_crc32
23+
*graalpython.lib-python.3.test.test_binascii.MemoryviewBinASCIITest.test_crc_hqx
2024
*graalpython.lib-python.3.test.test_binascii.MemoryviewBinASCIITest.test_exceptions
2125
*graalpython.lib-python.3.test.test_binascii.MemoryviewBinASCIITest.test_hex

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import static com.oracle.graal.python.nodes.PGuards.isAscii;
4848
import static com.oracle.graal.python.util.PythonUtils.TS_ENCODING;
4949
import static com.oracle.graal.python.util.PythonUtils.crc32;
50+
import static com.oracle.graal.python.util.PythonUtils.crcHqx;
5051

5152
import java.nio.ByteBuffer;
5253
import java.util.Arrays;
@@ -408,6 +409,29 @@ protected ArgumentClinicProvider getArgumentClinic() {
408409
}
409410
}
410411

412+
@Builtin(name = "crc_hqx", minNumOfPositionalArgs = 2, parameterNames = {"data", "crc"})
413+
@ArgumentClinic(name = "data", conversion = ArgumentClinic.ClinicConversion.ReadableBuffer)
414+
@ArgumentClinic(name = "crc", conversion = ArgumentClinic.ClinicConversion.Long)
415+
@GenerateNodeFactory
416+
abstract static class CrcHqxNode extends PythonBinaryClinicBuiltinNode {
417+
418+
@Specialization(limit = "3")
419+
static long b2a(VirtualFrame frame, Object buffer, long crc,
420+
@Cached("createFor(this)") IndirectCallData indirectCallData,
421+
@CachedLibrary("buffer") PythonBufferAccessLibrary bufferLib) {
422+
try {
423+
return crcHqx((int) crc, bufferLib.getInternalOrCopiedByteArray(buffer), 0, bufferLib.getBufferLength(buffer));
424+
} finally {
425+
bufferLib.release(buffer, frame, indirectCallData);
426+
}
427+
}
428+
429+
@Override
430+
protected ArgumentClinicProvider getArgumentClinic() {
431+
return BinasciiModuleBuiltinsClinicProviders.CrcHqxNodeClinicProviderGen.INSTANCE;
432+
}
433+
}
434+
411435
@Builtin(name = "hexlify", minNumOfPositionalArgs = 1, parameterNames = {"data", "sep", "bytes_per_sep"})
412436
@ArgumentClinic(name = "data", conversion = ArgumentClinic.ClinicConversion.ReadableBuffer)
413437
@ArgumentClinic(name = "bytes_per_sep", conversion = ArgumentClinic.ClinicConversion.Int, defaultValue = "1")

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bool/BoolBuiltins.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2022, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2023, Oracle and/or its affiliates.
33
* Copyright (c) 2014, Regents of the University of California
44
*
55
* All rights reserved.
@@ -27,7 +27,10 @@
2727

2828
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___AND__;
2929
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___OR__;
30+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RAND__;
3031
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___REPR__;
32+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ROR__;
33+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RXOR__;
3134
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___STR__;
3235
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___XOR__;
3336
import static com.oracle.graal.python.nodes.StringLiterals.T_FALSE;
@@ -89,6 +92,7 @@ static boolean atLeastOneIsNotBoolean(Object self, Object other) {
8992
}
9093

9194
@Builtin(name = J___AND__, minNumOfPositionalArgs = 2)
95+
@Builtin(name = J___RAND__, minNumOfPositionalArgs = 2)
9296
@TypeSystemReference(PythonArithmeticTypes.class)
9397
@GenerateNodeFactory
9498
abstract static class AndNode extends BaseBoolBinaryNode {
@@ -105,6 +109,7 @@ static Object doOther(VirtualFrame frame, Object self, Object other,
105109
}
106110

107111
@Builtin(name = J___OR__, minNumOfPositionalArgs = 2)
112+
@Builtin(name = J___ROR__, minNumOfPositionalArgs = 2)
108113
@TypeSystemReference(PythonArithmeticTypes.class)
109114
@GenerateNodeFactory
110115
abstract static class OrNode extends BaseBoolBinaryNode {
@@ -121,6 +126,7 @@ static Object doOther(VirtualFrame frame, Object self, Object other,
121126
}
122127

123128
@Builtin(name = J___XOR__, minNumOfPositionalArgs = 2)
129+
@Builtin(name = J___RXOR__, minNumOfPositionalArgs = 2)
124130
@TypeSystemReference(PythonArithmeticTypes.class)
125131
@GenerateNodeFactory
126132
abstract static class XorNode extends BaseBoolBinaryNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/ints/IntBuiltins.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___REPR__;
7575
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RFLOORDIV__;
7676
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RLSHIFT__;
77+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RMOD__;
7778
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RMUL__;
7879
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ROR__;
7980
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ROUND__;
@@ -862,6 +863,7 @@ protected static boolean accepts(Object obj) {
862863
}
863864

864865
@Builtin(name = J___MOD__, minNumOfPositionalArgs = 2)
866+
@Builtin(name = J___RMOD__, minNumOfPositionalArgs = 2, reverseOperation = true)
865867
@TypeSystemReference(PythonArithmeticTypes.class)
866868
@GenerateNodeFactory
867869
public abstract static class ModNode extends IntBinaryBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/set/BaseSetBuiltins.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___LT__;
5353
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___REDUCE__;
5454
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___REPR__;
55+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RSUB__;
56+
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___SUB__;
5557
import static com.oracle.graal.python.nodes.StringLiterals.T_COMMA_SPACE;
5658
import static com.oracle.graal.python.nodes.StringLiterals.T_ELLIPSIS_IN_PARENS;
5759
import static com.oracle.graal.python.nodes.StringLiterals.T_EMPTY_PARENS;
@@ -71,6 +73,7 @@
7173
import com.oracle.graal.python.builtins.objects.PNotImplemented;
7274
import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes;
7375
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
76+
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
7477
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes.HashingStorageAreDisjoint;
7578
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes.HashingStorageCompareKeys;
7679
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes.HashingStorageCopy;
@@ -271,6 +274,32 @@ static boolean contains(VirtualFrame frame, PBaseSet self, Object key,
271274
}
272275
}
273276

277+
@Builtin(name = J___SUB__, minNumOfPositionalArgs = 2)
278+
@Builtin(name = J___RSUB__, minNumOfPositionalArgs = 2, reverseOperation = true)
279+
@GenerateNodeFactory
280+
abstract static class SubNode extends PythonBinaryBuiltinNode {
281+
@Specialization
282+
static PBaseSet doPBaseSet(@SuppressWarnings("unused") VirtualFrame frame, PBaseSet left, PBaseSet right,
283+
@Bind("this") Node inliningTarget,
284+
@Cached InlinedConditionProfile leftProfile,
285+
@Cached HashingCollectionNodes.GetHashingStorageNode getHashingStorageNode,
286+
@Cached HashingStorageNodes.HashingStorageDiff diffNode,
287+
@Cached PythonObjectFactory factory) {
288+
HashingStorage storage = diffNode.execute(frame, inliningTarget, left.getDictStorage(), getHashingStorageNode.execute(frame, inliningTarget, right));
289+
if (leftProfile.profile(inliningTarget, left instanceof PFrozenSet)) {
290+
return factory.createFrozenSet(storage);
291+
} else {
292+
return factory.createSet(storage);
293+
}
294+
}
295+
296+
@Fallback
297+
@SuppressWarnings("unused")
298+
static Object doOther(Object self, Object other) {
299+
return PNotImplemented.NOT_IMPLEMENTED;
300+
}
301+
}
302+
274303
@Builtin(name = "issubset", minNumOfPositionalArgs = 2)
275304
@GenerateNodeFactory
276305
protected abstract static class BaseIsSubsetNode extends PythonBinaryBuiltinNode {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/set/FrozenSetBuiltins.java

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@
3030
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___OR__;
3131
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RAND__;
3232
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___ROR__;
33-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RSUB__;
3433
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___RXOR__;
35-
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___SUB__;
3634
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___XOR__;
3735

3836
import java.util.List;
@@ -260,35 +258,6 @@ static PFrozenSet doSet(@SuppressWarnings("unused") VirtualFrame frame, PFrozenS
260258
}
261259
}
262260

263-
@Builtin(name = J___SUB__, minNumOfPositionalArgs = 2)
264-
@Builtin(name = J___RSUB__, minNumOfPositionalArgs = 2, reverseOperation = true)
265-
@GenerateNodeFactory
266-
@ImportStatic(PGuards.class)
267-
abstract static class SubNode extends PythonBinaryBuiltinNode {
268-
269-
@Specialization(guards = "canDoSetBinOp(right)")
270-
static PBaseSet doPBaseSet(@SuppressWarnings("unused") VirtualFrame frame, PFrozenSet left, Object right,
271-
@Bind("this") Node inliningTarget,
272-
@Cached InlinedConditionProfile rightIsSetProfile,
273-
@Cached GetHashingStorageNode getHashingStorageNode,
274-
@Cached HashingStorageDiff diffNode,
275-
@Cached PythonObjectFactory factory) {
276-
HashingStorage rightStorage = getHashingStorageNode.execute(frame, inliningTarget, right);
277-
HashingStorage storage = diffNode.execute(frame, inliningTarget, left.getDictStorage(), rightStorage);
278-
if (rightIsSetProfile.profile(inliningTarget, right instanceof PBaseSet)) {
279-
return factory.createFrozenSet(storage);
280-
} else {
281-
return factory.createSet(storage);
282-
}
283-
}
284-
285-
@Fallback
286-
static Object doSub(Object self, Object other,
287-
@Cached PRaiseNode raiseNode) {
288-
throw raiseNode.raise(PythonErrorType.TypeError, ErrorMessages.UNSUPPORTED_OPERAND_TYPES_FOR_S_P_AND_P, "-", self, other);
289-
}
290-
}
291-
292261
@Builtin(name = "difference", minNumOfPositionalArgs = 1, takesVarArgs = true)
293262
@GenerateNodeFactory
294263
public abstract static class DifferenceNode extends PythonBuiltinNode {

0 commit comments

Comments
 (0)