Skip to content

Commit fdae77d

Browse files
committed
TupleGetter: split single specialization into multiple specializations
- minor fixes
1 parent df5d7d7 commit fdae77d

File tree

5 files changed

+19
-17
lines changed

5 files changed

+19
-17
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3023,7 +3023,7 @@ Object methodGeneric(@SuppressWarnings("unused") Object cls, Object func, Object
30233023
if (callableCheck.execute(func)) {
30243024
return factory().createMethod(self, func);
30253025
} else {
3026-
throw raise(TypeError, ErrorMessages.FIRST_ARG_MUST_BE_CALLABLE, "");
3026+
throw raise(TypeError, ErrorMessages.FIRST_ARG_MUST_BE_CALLABLE_S, "");
30273027
}
30283028
}
30293029
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/dict/DefaultDictBuiltins.java

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

43-
import static com.oracle.graal.python.nodes.ErrorMessages.FIRST_ARG_MUST_BE_CALLABLE;
43+
import static com.oracle.graal.python.nodes.ErrorMessages.FIRST_ARG_MUST_BE_CALLABLE_S;
4444
import static com.oracle.graal.python.nodes.SpecialMethodNames.__INIT__;
4545
import static com.oracle.graal.python.nodes.SpecialMethodNames.__MISSING__;
4646
import static com.oracle.graal.python.nodes.SpecialMethodNames.__REDUCE__;
@@ -163,7 +163,7 @@ Object doInit(VirtualFrame frame, PDefaultDict self, Object[] args, PKeyword[] k
163163
if (newArgs.length > 0) {
164164
newDefault = newArgs[0];
165165
if (newDefault != PNone.NONE && !callableCheckNode.execute(newDefault)) {
166-
throw raise(PythonBuiltinClassType.TypeError, FIRST_ARG_MUST_BE_CALLABLE, " or None");
166+
throw raise(PythonBuiltinClassType.TypeError, FIRST_ARG_MUST_BE_CALLABLE_S, " or None");
167167
}
168168
newArgs = PythonUtils.arrayCopyOfRange(args, 1, args.length);
169169
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/tuple/PTupleGetter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
import com.oracle.graal.python.builtins.objects.object.PythonBuiltinObject;
4444
import com.oracle.truffle.api.object.Shape;
4545

46-
public class PTupleGetter extends PythonBuiltinObject {
46+
public final class PTupleGetter extends PythonBuiltinObject {
4747
private final int index;
4848
private Object doc;
4949

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/tuple/TupleGetterBuiltins.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
import com.oracle.graal.python.builtins.PythonBuiltins;
5959
import com.oracle.graal.python.builtins.objects.PNone;
6060
import com.oracle.graal.python.lib.PyObjectSizeNode;
61-
import com.oracle.graal.python.nodes.PGuards;
6261
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
6362
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
6463
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
@@ -91,24 +90,29 @@ Object reduce(PTupleGetter self,
9190
@Builtin(name = __GET__, minNumOfPositionalArgs = 2, maxNumOfPositionalArgs = 3)
9291
@GenerateNodeFactory
9392
abstract static class TupleGetterGetNode extends PythonTernaryBuiltinNode {
94-
@Specialization
95-
Object get(VirtualFrame frame, PTupleGetter self, Object instance, @SuppressWarnings("unused") Object owner,
93+
@Specialization()
94+
Object getTuple(VirtualFrame frame, PTupleGetter self, PTuple instance, @SuppressWarnings("unused") Object owner,
9695
@Cached PyObjectSizeNode sizeNode,
9796
@Cached TupleBuiltins.GetItemNode getItemNode) {
9897
final int index = self.getIndex();
99-
if (!PGuards.isPTuple(instance)) {
100-
if (instance == PNone.NONE) {
101-
return self;
102-
}
103-
throw raise(PythonBuiltinClassType.TypeError, DESC_FOR_INDEX_S_FOR_S_DOESNT_APPLY_TO_P,
104-
index, "tuple subclasses", instance);
105-
}
10698
if (index >= sizeNode.execute(frame, instance)) {
10799
throw raise(PythonBuiltinClassType.IndexError, TUPLE_OUT_OF_BOUNDS);
108100
}
109101

110102
return getItemNode.execute(frame, instance, index);
111103
}
104+
105+
@Specialization
106+
Object getNone(@SuppressWarnings("unused") VirtualFrame frame, PTupleGetter self, @SuppressWarnings("unused") PNone instance, @SuppressWarnings("unused") Object owner) {
107+
return self;
108+
}
109+
110+
@Specialization(guards = {"!isPTuple(instance)", "!isNone(instance)"})
111+
Object getOthers(@SuppressWarnings("unused") VirtualFrame frame, PTupleGetter self, Object instance, @SuppressWarnings("unused") Object owner) {
112+
final int index = self.getIndex();
113+
throw raise(PythonBuiltinClassType.TypeError, DESC_FOR_INDEX_S_FOR_S_DOESNT_APPLY_TO_P,
114+
index, "tuple subclasses", instance);
115+
}
112116
}
113117

114118
@Builtin(name = __SET__, minNumOfPositionalArgs = 3)
@@ -135,14 +139,12 @@ Object delete(PTupleGetter self, Object instance) {
135139
@GenerateNodeFactory
136140
abstract static class TupleGetterDocNode extends PythonBinaryBuiltinNode {
137141
@Specialization(guards = "!isNoValue(value)")
138-
@SuppressWarnings("unused")
139142
Object set(PTupleGetter self, Object value) {
140143
self.setDoc(value);
141144
return PNone.NONE;
142145
}
143146

144147
@Specialization(guards = "isNoValue(value)")
145-
@SuppressWarnings("unused")
146148
Object get(PTupleGetter self, @SuppressWarnings("unused") PNone value) {
147149
return self.getDoc();
148150
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/ErrorMessages.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ public abstract class ErrorMessages {
260260
public static final String FILL_CHAR_MUST_BE_LENGTH_1 = "The fill character must be exactly one character long";
261261
public static final String FILTER_SPEC_MUST_BE_DICT = "Filter specifier must be a dict or dict-like object";
262262
public static final String FILTER_SPECIFIER_MUST_HAVE = "Filter specifier must have an \"id\" entry";
263-
public static final String FIRST_ARG_MUST_BE_CALLABLE = "first argument must be callable%s";
263+
public static final String FIRST_ARG_MUST_BE_CALLABLE_S = "first argument must be callable%s";
264264
public static final String FIRST_ARG_MUST_BE_S_OR_TUPLE_NOT_P = "%s first arg must be %s or a tuple of str, not %p";
265265
public static final String FIRST_TWO_MAKETRANS_ARGS_MUST_HAVE_EQ_LENGTH = "the first two maketrans arguments must have equal length";
266266
public static final String FLOAT_ARG_REQUIRED = "float argument required, not %p";

0 commit comments

Comments
 (0)