Skip to content

Commit 274b1ce

Browse files
committed
Clean up
1 parent 6886e4f commit 274b1ce

File tree

9 files changed

+334
-267
lines changed

9 files changed

+334
-267
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/array/PArray.java

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,24 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects.array;
2727

28+
import com.oracle.graal.python.builtins.objects.common.IndexNodes;
2829
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
30+
import com.oracle.graal.python.builtins.objects.ints.PInt;
2931
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
30-
import com.oracle.graal.python.runtime.sequence.PMutableSequence;
32+
import com.oracle.graal.python.nodes.ErrorMessages;
33+
import com.oracle.graal.python.runtime.exception.PException;
34+
import com.oracle.graal.python.runtime.sequence.PSequence;
3135
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
36+
import com.oracle.graal.python.util.OverflowException;
37+
import com.oracle.truffle.api.CompilerDirectives;
3238
import com.oracle.truffle.api.dsl.Cached;
39+
import com.oracle.truffle.api.interop.InvalidArrayIndexException;
3340
import com.oracle.truffle.api.library.ExportLibrary;
3441
import com.oracle.truffle.api.library.ExportMessage;
3542
import com.oracle.truffle.api.object.Shape;
3643

3744
@ExportLibrary(PythonObjectLibrary.class)
38-
public class PArray extends PMutableSequence {
45+
public class PArray extends PSequence {
3946

4047
private SequenceStorage store;
4148

@@ -63,7 +70,7 @@ public int len() {
6370
}
6471

6572
@ExportMessage
66-
boolean isBuffer() {
73+
static boolean isBuffer(@SuppressWarnings("unused") PArray self) {
6774
return true;
6875
}
6976

@@ -81,4 +88,59 @@ int getBufferLength(
8188
// TODO This only works for ByteSequenceStorage since its itemsize is 1.
8289
return lenNode.execute(store);
8390
}
91+
92+
@ExportMessage
93+
public boolean isArrayElementModifiable(long index,
94+
@Cached.Exclusive @Cached SequenceStorageNodes.LenNode lenNode,
95+
@Cached.Exclusive @Cached IndexNodes.NormalizeIndexCustomMessageNode normalize) {
96+
final int len = lenNode.execute(store);
97+
try {
98+
normalize.execute(index, len, ErrorMessages.INDEX_OUT_OF_RANGE);
99+
} catch (PException e) {
100+
return false;
101+
}
102+
return true;
103+
}
104+
105+
@ExportMessage
106+
public boolean isArrayElementInsertable(long index,
107+
@Cached.Exclusive @Cached SequenceStorageNodes.LenNode lenNode) {
108+
final int len = lenNode.execute(store);
109+
return index == len;
110+
}
111+
112+
@ExportMessage
113+
public boolean isArrayElementRemovable(long index,
114+
@Cached.Exclusive @Cached SequenceStorageNodes.LenNode lenNode,
115+
@Cached.Exclusive @Cached IndexNodes.NormalizeIndexCustomMessageNode normalize) {
116+
final int len = lenNode.execute(store);
117+
try {
118+
normalize.execute(index, len, ErrorMessages.INDEX_OUT_OF_RANGE);
119+
} catch (PException e) {
120+
return false;
121+
}
122+
return true;
123+
}
124+
125+
@ExportMessage
126+
public void writeArrayElement(long index, Object value,
127+
@Cached.Exclusive @Cached SequenceStorageNodes.SetItemScalarNode setItem) throws InvalidArrayIndexException {
128+
try {
129+
setItem.execute(store, PInt.intValueExact(index), value);
130+
} catch (OverflowException e) {
131+
CompilerDirectives.transferToInterpreterAndInvalidate();
132+
throw InvalidArrayIndexException.create(index);
133+
}
134+
}
135+
136+
@ExportMessage
137+
public void removeArrayElement(long index,
138+
@Cached.Exclusive @Cached SequenceStorageNodes.DeleteItemNode delItem) throws InvalidArrayIndexException {
139+
try {
140+
delItem.execute(store, PInt.intValueExact(index));
141+
} catch (OverflowException e) {
142+
CompilerDirectives.transferToInterpreterAndInvalidate();
143+
throw InvalidArrayIndexException.create(index);
144+
}
145+
}
84146
}

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

Lines changed: 60 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,38 +27,35 @@
2727

2828
import java.util.Arrays;
2929

30+
import com.oracle.graal.python.builtins.objects.common.IndexNodes;
3031
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
32+
import com.oracle.graal.python.builtins.objects.ints.PInt;
3133
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
32-
import com.oracle.graal.python.runtime.sequence.PMutableSequence;
34+
import com.oracle.graal.python.nodes.ErrorMessages;
35+
import com.oracle.graal.python.runtime.exception.PException;
3336
import com.oracle.graal.python.runtime.sequence.storage.ByteSequenceStorage;
3437
import com.oracle.graal.python.runtime.sequence.storage.NativeSequenceStorage;
3538
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
3639
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage.ListStorageType;
40+
import com.oracle.graal.python.util.OverflowException;
41+
import com.oracle.truffle.api.CompilerDirectives;
3742
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
3843
import com.oracle.truffle.api.dsl.Cached;
44+
import com.oracle.truffle.api.interop.InvalidArrayIndexException;
3945
import com.oracle.truffle.api.library.ExportLibrary;
4046
import com.oracle.truffle.api.library.ExportMessage;
4147
import com.oracle.truffle.api.library.ExportMessage.Ignore;
4248
import com.oracle.truffle.api.object.Shape;
4349

4450
@ExportLibrary(PythonObjectLibrary.class)
45-
public final class PByteArray extends PMutableSequence implements PIBytesLike {
46-
47-
private SequenceStorage store;
51+
public final class PByteArray extends PIBytesLike {
4852

4953
public PByteArray(Object cls, Shape instanceShape, byte[] bytes) {
50-
super(cls, instanceShape);
51-
store = new ByteSequenceStorage(bytes);
54+
super(cls, instanceShape, bytes);
5255
}
5356

5457
public PByteArray(Object cls, Shape instanceShape, SequenceStorage store) {
55-
super(cls, instanceShape);
56-
this.store = store;
57-
}
58-
59-
@Override
60-
public SequenceStorage getSequenceStorage() {
61-
return store;
58+
super(cls, instanceShape, store);
6259
}
6360

6461
@Override
@@ -107,19 +104,62 @@ public final void reverse() {
107104

108105
@ExportMessage
109106
@SuppressWarnings("static-method")
110-
boolean isBuffer() {
107+
static boolean isBuffer(@SuppressWarnings("unused") PByteArray self) {
108+
return true;
109+
}
110+
111+
@ExportMessage
112+
public boolean isArrayElementModifiable(long index,
113+
@Cached.Exclusive @Cached SequenceStorageNodes.LenNode lenNode,
114+
@Cached.Exclusive @Cached IndexNodes.NormalizeIndexCustomMessageNode normalize) {
115+
final int len = lenNode.execute(store);
116+
try {
117+
normalize.execute(index, len, ErrorMessages.INDEX_OUT_OF_RANGE);
118+
} catch (PException e) {
119+
return false;
120+
}
111121
return true;
112122
}
113123

114124
@ExportMessage
115-
int getBufferLength(
116-
@Cached SequenceStorageNodes.LenNode lenNode) {
117-
return lenNode.execute(store);
125+
public boolean isArrayElementInsertable(long index,
126+
@Cached.Exclusive @Cached SequenceStorageNodes.LenNode lenNode) {
127+
final int len = lenNode.execute(store);
128+
return index == len;
118129
}
119130

120131
@ExportMessage
121-
byte[] getBufferBytes(
122-
@Cached SequenceStorageNodes.ToByteArrayNode toByteArrayNode) {
123-
return toByteArrayNode.execute(store);
132+
public boolean isArrayElementRemovable(long index,
133+
@Cached.Exclusive @Cached SequenceStorageNodes.LenNode lenNode,
134+
@Cached.Exclusive @Cached IndexNodes.NormalizeIndexCustomMessageNode normalize) {
135+
final int len = lenNode.execute(store);
136+
try {
137+
normalize.execute(index, len, ErrorMessages.INDEX_OUT_OF_RANGE);
138+
} catch (PException e) {
139+
return false;
140+
}
141+
return true;
142+
}
143+
144+
@ExportMessage
145+
public void writeArrayElement(long index, Object value,
146+
@Cached.Exclusive @Cached SequenceStorageNodes.SetItemScalarNode setItem) throws InvalidArrayIndexException {
147+
try {
148+
setItem.execute(store, PInt.intValueExact(index), value);
149+
} catch (OverflowException e) {
150+
CompilerDirectives.transferToInterpreterAndInvalidate();
151+
throw InvalidArrayIndexException.create(index);
152+
}
153+
}
154+
155+
@ExportMessage
156+
public void removeArrayElement(long index,
157+
@Cached.Exclusive @Cached SequenceStorageNodes.DeleteItemNode delItem) throws InvalidArrayIndexException {
158+
try {
159+
delItem.execute(store, PInt.intValueExact(index));
160+
} catch (OverflowException e) {
161+
CompilerDirectives.transferToInterpreterAndInvalidate();
162+
throw InvalidArrayIndexException.create(index);
163+
}
124164
}
125165
}

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

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,13 @@
2828
import java.io.UnsupportedEncodingException;
2929
import java.util.Arrays;
3030

31+
import com.oracle.graal.python.PythonLanguage;
3132
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
3233
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
3334
import com.oracle.graal.python.builtins.objects.function.PArguments.ThreadState;
3435
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
36+
import com.oracle.graal.python.nodes.ErrorMessages;
3537
import com.oracle.graal.python.nodes.PRaiseNode;
36-
import com.oracle.graal.python.runtime.sequence.PImmutableSequence;
3738
import com.oracle.graal.python.runtime.sequence.PSequence;
3839
import com.oracle.graal.python.runtime.sequence.storage.ByteSequenceStorage;
3940
import com.oracle.graal.python.runtime.sequence.storage.NativeSequenceStorage;
@@ -42,30 +43,20 @@
4243
import com.oracle.truffle.api.CompilerAsserts;
4344
import com.oracle.truffle.api.CompilerDirectives;
4445
import com.oracle.truffle.api.dsl.Cached;
45-
import com.oracle.truffle.api.dsl.Cached.Shared;
4646
import com.oracle.truffle.api.library.ExportLibrary;
4747
import com.oracle.truffle.api.library.ExportMessage;
4848
import com.oracle.truffle.api.library.ExportMessage.Ignore;
4949
import com.oracle.truffle.api.object.Shape;
5050

5151
@ExportLibrary(PythonObjectLibrary.class)
52-
public final class PBytes extends PImmutableSequence implements PIBytesLike {
53-
54-
private SequenceStorage store;
52+
public final class PBytes extends PIBytesLike {
5553

5654
public PBytes(Object cls, Shape instanceShape, byte[] bytes) {
57-
super(cls, instanceShape);
58-
store = new ByteSequenceStorage(bytes);
55+
super(cls, instanceShape, bytes);
5956
}
6057

6158
public PBytes(Object cls, Shape instanceShape, SequenceStorage store) {
62-
super(cls, instanceShape);
63-
setSequenceStorage(store);
64-
}
65-
66-
@Override
67-
public SequenceStorage getSequenceStorage() {
68-
return store;
59+
super(cls, instanceShape, store);
6960
}
7061

7162
@Override
@@ -119,26 +110,14 @@ public final int hashCode() {
119110

120111
@ExportMessage
121112
@SuppressWarnings("static-method")
122-
boolean isBuffer() {
113+
static boolean isBuffer(@SuppressWarnings("unused") PBytes self) {
123114
return true;
124115
}
125116

126-
@ExportMessage
127-
int getBufferLength(
128-
@Cached SequenceStorageNodes.LenNode lenNode) {
129-
return lenNode.execute(store);
130-
}
131-
132-
@ExportMessage
133-
byte[] getBufferBytes(
134-
@Shared("toByteArrayNode") @Cached SequenceStorageNodes.ToByteArrayNode toByteArrayNode) {
135-
return toByteArrayNode.execute(store);
136-
}
137-
138117
@ExportMessage
139118
public String asPathWithState(@SuppressWarnings("unused") ThreadState state,
140119
@Cached PRaiseNode raise,
141-
@Shared("toByteArrayNode") @Cached SequenceStorageNodes.ToByteArrayNode toBytes) {
120+
@Cached SequenceStorageNodes.ToByteArrayNode toBytes) {
142121
return newString(raise, toBytes.execute(getSequenceStorage()));
143122
}
144123

@@ -150,4 +129,29 @@ public static String newString(PRaiseNode raise, byte[] ary) {
150129
throw raise.raise(PythonBuiltinClassType.UnicodeDecodeError, e);
151130
}
152131
}
132+
133+
@SuppressWarnings({"static-method", "unused"})
134+
public static void setItem(int idx, Object value) {
135+
CompilerDirectives.transferToInterpreterAndInvalidate();
136+
PythonLanguage.getCore().raise(PythonBuiltinClassType.PBytes, ErrorMessages.OBJ_DOES_NOT_SUPPORT_ITEM_ASSIGMENT);
137+
}
138+
139+
@ExportMessage
140+
@SuppressWarnings("unused")
141+
public static boolean isArrayElementModifiable(PBytes self, long index) {
142+
return false;
143+
}
144+
145+
@ExportMessage
146+
@SuppressWarnings("unused")
147+
public static boolean isArrayElementInsertable(PBytes self, long index) {
148+
return false;
149+
}
150+
151+
@ExportMessage
152+
@SuppressWarnings("unused")
153+
public static boolean isArrayElementRemovable(PBytes self, long index) {
154+
return false;
155+
}
156+
153157
}

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

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,50 @@
4040
*/
4141
package com.oracle.graal.python.builtins.objects.bytes;
4242

43+
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
44+
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
45+
import com.oracle.graal.python.runtime.sequence.PSequence;
46+
import com.oracle.graal.python.runtime.sequence.storage.ByteSequenceStorage;
4347
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
48+
import com.oracle.truffle.api.dsl.Cached;
49+
import com.oracle.truffle.api.library.ExportLibrary;
50+
import com.oracle.truffle.api.library.ExportMessage;
51+
import com.oracle.truffle.api.object.Shape;
4452

45-
public interface PIBytesLike {
46-
SequenceStorage getSequenceStorage();
53+
@ExportLibrary(PythonObjectLibrary.class)
54+
public abstract class PIBytesLike extends PSequence {
55+
56+
protected SequenceStorage store;
57+
58+
public PIBytesLike(Object cls, Shape instanceShape, byte[] bytes) {
59+
super(cls, instanceShape);
60+
store = new ByteSequenceStorage(bytes);
61+
}
62+
63+
public PIBytesLike(Object cls, Shape instanceShape, SequenceStorage store) {
64+
super(cls, instanceShape);
65+
this.store = store;
66+
}
67+
68+
@Override
69+
public final SequenceStorage getSequenceStorage() {
70+
return store;
71+
}
72+
73+
@ExportMessage
74+
static boolean isBuffer(PIBytesLike self) {
75+
return true;
76+
}
77+
78+
@ExportMessage
79+
int getBufferLength(
80+
@Cached SequenceStorageNodes.LenNode lenNode) {
81+
return lenNode.execute(store);
82+
}
83+
84+
@ExportMessage
85+
byte[] getBufferBytes(
86+
@Cached SequenceStorageNodes.ToByteArrayNode toByteArrayNode) {
87+
return toByteArrayNode.execute(store);
88+
}
4789
}

0 commit comments

Comments
 (0)