Skip to content

Commit 60ab4a7

Browse files
committed
[GR-35304] Fix: bytes.__init__ did not accept keywords.
PullRequest: graalpython/2046
2 parents 89d17b3 + bd6fe9f commit 60ab4a7

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

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

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -693,35 +693,38 @@ def test_add_mv_to_bytearray():
693693
mv = memoryview(b'world')
694694
ba += mv
695695
assert ba == b'hello world'
696-
696+
697697
def test_bytearray_init():
698698
ba = bytearray(b'abc')
699699
assert_raises(TypeError, bytearray.__init__, ba, encoding='latin1')
700700
assert_raises(TypeError, bytearray.__init__, ba, errors='replace', encoding='latin1')
701701
assert_raises(TypeError, bytearray.__init__, ba, errors='replace')
702-
702+
703703
bytearray.__init__(ba, b'xxx')
704704
assert ba == bytearray(b'xxx')
705705
bytearray.__init__(ba, 'zzz', encoding='latin1')
706706
assert ba == bytearray(b'zzz')
707707
bytearray.__init__(ba, 1)
708708
assert ba == bytearray(b'\x00')
709-
709+
710710
def test_bytes_init():
711711
ba = bytes(b'abc')
712-
712+
713713
bytes.__init__(ba, b'zzz')
714714
assert ba == bytes(b'abc')
715-
715+
716+
ba = bytes('abc', encoding='utf-8')
717+
assert ba == b'abc'
718+
716719
def test_bytes_mod():
717720
assert b'%s' % (b'a') == b'a'
718721
raised = False
719722
try:
720-
b'%s' % (b'a', b'b')
723+
b'%s' % (b'a', b'b')
721724
except TypeError:
722725
raised = True
723726
assert raised
724-
727+
725728
def test__bytes__():
726729
class C: pass
727730
setattr(C, "__bytes__", bytes)
@@ -731,14 +734,14 @@ class C(int): pass
731734
setattr(C, "__bytes__", bytes)
732735
assert bytes(C()) == b''
733736
assert bytes(C(1)) == b''
734-
737+
735738
setattr(C, "__bytes__", complex)
736739
raised = False
737740
try:
738741
bytes(C(1))
739742
except(TypeError):
740743
raised = True
741-
assert raised
744+
assert raised
742745

743746
def b(o):
744747
return b'abc'
@@ -749,7 +752,7 @@ class BA(bytearray): pass
749752

750753
class BAA(BA): pass
751754
assert bytes(BAA(b'cde')) == b'abc'
752-
755+
753756
class BaseLikeBytes:
754757

755758
def test_maketrans(self):
@@ -792,7 +795,7 @@ def test_translate(self):
792795
self.assertEqual(c, b'hee')
793796
c = b.translate(None, delete=b'e')
794797
self.assertEqual(c, b'hllo')
795-
798+
796799
t = bytearray(range(256))
797800
self.assertEqual(b'\xff'.translate(t), b'\xff')
798801
self.assertEqual(b'\xff'.translate(t, t), b'')

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/BytesBuiltins.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@
118118
import com.oracle.graal.python.nodes.function.builtins.PythonQuaternaryClinicBuiltinNode;
119119
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryClinicBuiltinNode;
120120
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
121+
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
121122
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentCastNode;
122123
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentCastNode.ArgumentCastNodeWithRaiseAndIndirectCall;
123124
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
@@ -217,13 +218,19 @@ public static byte[] doEncode(Charset charset, String string, CodingErrorAction
217218
return barr;
218219
}
219220

220-
@Builtin(name = __INIT__, minNumOfPositionalArgs = 1, takesVarArgs = true)
221+
@Builtin(name = __INIT__, minNumOfPositionalArgs = 1, takesVarArgs = true, takesVarKeywordArgs = true)
221222
@GenerateNodeFactory
222-
public abstract static class InitNode extends PythonBuiltinNode {
223+
public abstract static class InitNode extends PythonVarargsBuiltinNode {
224+
225+
@SuppressWarnings("unused")
226+
@Override
227+
public Object varArgExecute(VirtualFrame frame, Object self, Object[] arguments, PKeyword[] keywords) throws VarargsBuiltinDirectInvocationNotSupported {
228+
return PNone.NONE;
229+
}
223230

224231
@SuppressWarnings("unused")
225232
@Specialization
226-
public Object byteDone(VirtualFrame frame, PBytes self, Object args) {
233+
static Object byteDone(VirtualFrame frame, Object self, Object[] arguments, PKeyword[] keywords) {
227234
return PNone.NONE;
228235
}
229236
}

0 commit comments

Comments
 (0)