40
40
*/
41
41
package com .oracle .graal .python .builtins .objects .cext .hpy ;
42
42
43
- import static com .oracle .graal .python .util .PythonUtils .TS_ENCODING ;
44
- import static com .oracle .graal .python .util .PythonUtils .tsLiteral ;
45
-
46
43
import com .oracle .graal .python .builtins .objects .PNone ;
47
44
import com .oracle .graal .python .builtins .objects .PythonAbstractObject ;
48
45
import com .oracle .graal .python .builtins .objects .cext .common .CArrayWrappers ;
95
92
@ ExportLibrary (InteropLibrary .class )
96
93
@ SuppressWarnings ("static-method" )
97
94
public final class GraalHPyBuffer implements TruffleObject {
98
- private static final TruffleString T_MEMBER_BUF = tsLiteral ( "buf" ) ;
99
- private static final TruffleString T_MEMBER_OBJ = tsLiteral ( "obj" ) ;
100
- private static final TruffleString T_MEMBER_LEN = tsLiteral ( "len" ) ;
101
- private static final TruffleString T_MEMBER_ITEMSIZE = tsLiteral ( "itemsize" ) ;
102
- private static final TruffleString T_MEMBER_READONLY = tsLiteral ( "readonly" ) ;
103
- private static final TruffleString T_MEMBER_NDIM = tsLiteral ( "ndim" ) ;
104
- private static final TruffleString T_MEMBER_FORMAT = tsLiteral ( "format" ) ;
105
- private static final TruffleString T_MEMBER_SHAPE = tsLiteral ( "shape" ) ;
106
- private static final TruffleString T_MEMBER_STRIDES = tsLiteral ( "strides" ) ;
107
- private static final TruffleString T_MEMBER_SUBOFFSETS = tsLiteral ( "suboffsets" ) ;
108
- private static final TruffleString T_MEMBER_INTERNAL = tsLiteral ( "internal" ) ;
109
-
110
- @ CompilationFinal (dimensions = 1 ) private static final TruffleString [] MEMBERS = new TruffleString []{T_MEMBER_BUF , T_MEMBER_OBJ , T_MEMBER_LEN , T_MEMBER_ITEMSIZE , T_MEMBER_READONLY , T_MEMBER_NDIM ,
111
- T_MEMBER_FORMAT , T_MEMBER_SHAPE , T_MEMBER_STRIDES , T_MEMBER_SUBOFFSETS , T_MEMBER_INTERNAL };
95
+ private static final String J_MEMBER_BUF = "buf" ;
96
+ private static final String J_MEMBER_OBJ = "obj" ;
97
+ private static final String J_MEMBER_LEN = "len" ;
98
+ private static final String J_MEMBER_ITEMSIZE = "itemsize" ;
99
+ private static final String J_MEMBER_READONLY = "readonly" ;
100
+ private static final String J_MEMBER_NDIM = "ndim" ;
101
+ private static final String J_MEMBER_FORMAT = "format" ;
102
+ private static final String J_MEMBER_SHAPE = "shape" ;
103
+ private static final String J_MEMBER_STRIDES = "strides" ;
104
+ private static final String J_MEMBER_SUBOFFSETS = "suboffsets" ;
105
+ private static final String J_MEMBER_INTERNAL = "internal" ;
106
+
107
+ @ CompilationFinal (dimensions = 1 ) private static final String [] MEMBERS = new String []{J_MEMBER_BUF , J_MEMBER_OBJ , J_MEMBER_LEN , J_MEMBER_ITEMSIZE , J_MEMBER_READONLY , J_MEMBER_NDIM ,
108
+ J_MEMBER_FORMAT , J_MEMBER_SHAPE , J_MEMBER_STRIDES , J_MEMBER_SUBOFFSETS , J_MEMBER_INTERNAL };
112
109
113
110
private final GraalHPyContext context ;
114
111
private final CExtPyBuffer buffer ;
@@ -127,17 +124,14 @@ boolean hasMembers() {
127
124
128
125
@ ExportMessage
129
126
Object getMembers (@ SuppressWarnings ("unused" ) boolean includeInternal ) {
130
- return new PythonAbstractObject .Keys (new Object []{T_MEMBER_BUF , T_MEMBER_OBJ , T_MEMBER_LEN , T_MEMBER_ITEMSIZE , T_MEMBER_READONLY ,
131
- T_MEMBER_NDIM , T_MEMBER_FORMAT , T_MEMBER_SHAPE , T_MEMBER_STRIDES , T_MEMBER_SUBOFFSETS , T_MEMBER_INTERNAL });
127
+ return new PythonAbstractObject .Keys (new Object []{J_MEMBER_BUF , J_MEMBER_OBJ , J_MEMBER_LEN , J_MEMBER_ITEMSIZE , J_MEMBER_READONLY ,
128
+ J_MEMBER_NDIM , J_MEMBER_FORMAT , J_MEMBER_SHAPE , J_MEMBER_STRIDES , J_MEMBER_SUBOFFSETS , J_MEMBER_INTERNAL });
132
129
}
133
130
134
131
@ ExportMessage
135
- boolean isMemberReadable (String member ,
136
- @ Cached TruffleString .FromJavaStringNode fromJavaStringNode ,
137
- @ Cached TruffleString .EqualNode eqNode ) {
138
- TruffleString tmember = fromJavaStringNode .execute (member , TS_ENCODING );
132
+ boolean isMemberReadable (String key ) {
139
133
for (int i = 0 ; i < MEMBERS .length ; i ++) {
140
- if (eqNode . execute ( MEMBERS [i ], tmember , TS_ENCODING )) {
134
+ if (MEMBERS [i ]. equals ( key )) {
141
135
return true ;
142
136
}
143
137
}
@@ -148,34 +142,32 @@ boolean isMemberReadable(String member,
148
142
static class ReadMember {
149
143
@ Specialization (guards = "receiver.getSupplier() == cachedSupplier" )
150
144
static Object readMember (GraalHPyBuffer receiver , String member ,
151
- @ Cached TruffleString .FromJavaStringNode fromJavaStringNode ,
152
- @ Cached TruffleString .EqualNode eqNode ,
153
145
@ Cached (value = "receiver.getSupplier()" , allowUncached = true ) @ SuppressWarnings ("unused" ) ConversionNodeSupplier cachedSupplier ,
154
146
@ Cached (value = "cachedSupplier.createToNativeNode()" , uncached = "cachedSupplier.getUncachedToNativeNode()" ) CExtToNativeNode toNativeNode ) throws UnknownIdentifierException {
155
- TruffleString tmember = fromJavaStringNode . execute (member , TS_ENCODING );
156
- if ( eqNode . execute ( T_MEMBER_BUF , tmember , TS_ENCODING )) {
157
- return receiver .buffer .getBuf ();
158
- } else if ( eqNode . execute ( T_MEMBER_OBJ , tmember , TS_ENCODING )) {
159
- Object obj = receiver .buffer .getObj ();
160
- return toNativeNode .execute (receiver .context , obj != null ? obj : PNone .NO_VALUE );
161
- } else if ( eqNode . execute ( T_MEMBER_LEN , tmember , TS_ENCODING )) {
162
- return receiver .buffer .getLen ();
163
- } else if ( eqNode . execute ( T_MEMBER_ITEMSIZE , tmember , TS_ENCODING )) {
164
- return receiver .buffer .getItemSize ();
165
- } else if ( eqNode . execute ( T_MEMBER_READONLY , tmember , TS_ENCODING )) {
166
- return PInt .intValue (receiver .buffer .isReadOnly ());
167
- } else if ( eqNode . execute ( T_MEMBER_NDIM , tmember , TS_ENCODING )) {
168
- return receiver .buffer .getDims ();
169
- } else if ( eqNode . execute ( T_MEMBER_FORMAT , tmember , TS_ENCODING )) {
170
- return receiver .buffer .getFormat () != null ? new CStringWrapper (receiver .buffer .getFormat ()) : toNativeNode .execute (receiver .context , PNone .NO_VALUE );
171
- } else if ( eqNode . execute ( T_MEMBER_SHAPE , tmember , TS_ENCODING )) {
172
- return toCArray (receiver .context , toNativeNode , receiver .buffer .getShape ());
173
- } else if ( eqNode . execute ( T_MEMBER_STRIDES , tmember , TS_ENCODING )) {
174
- return toCArray (receiver .context , toNativeNode , receiver .buffer .getStrides ());
175
- } else if ( eqNode . execute ( T_MEMBER_SUBOFFSETS , tmember , TS_ENCODING )) {
176
- return toCArray (receiver .context , toNativeNode , receiver .buffer .getSuboffsets ());
177
- } else if ( eqNode . execute ( T_MEMBER_INTERNAL , tmember , TS_ENCODING )) {
178
- return receiver .buffer .getInternal ();
147
+ switch (member ) {
148
+ case J_MEMBER_BUF :
149
+ return receiver .buffer .getBuf ();
150
+ case J_MEMBER_OBJ :
151
+ Object obj = receiver .buffer .getObj ();
152
+ return toNativeNode .execute (receiver .context , obj != null ? obj : PNone .NO_VALUE );
153
+ case J_MEMBER_LEN :
154
+ return receiver .buffer .getLen ();
155
+ case J_MEMBER_ITEMSIZE :
156
+ return receiver .buffer .getItemSize ();
157
+ case J_MEMBER_READONLY :
158
+ return PInt .intValue (receiver .buffer .isReadOnly ());
159
+ case J_MEMBER_NDIM :
160
+ return receiver .buffer .getDims ();
161
+ case J_MEMBER_FORMAT :
162
+ return receiver .buffer .getFormat () != null ? new CStringWrapper (receiver .buffer .getFormat ()) : toNativeNode .execute (receiver .context , PNone .NO_VALUE );
163
+ case J_MEMBER_SHAPE :
164
+ return toCArray (receiver .context , toNativeNode , receiver .buffer .getShape ());
165
+ case J_MEMBER_STRIDES :
166
+ return toCArray (receiver .context , toNativeNode , receiver .buffer .getStrides ());
167
+ case J_MEMBER_SUBOFFSETS :
168
+ return toCArray (receiver .context , toNativeNode , receiver .buffer .getSuboffsets ());
169
+ case J_MEMBER_INTERNAL :
170
+ return receiver .buffer .getInternal ();
179
171
}
180
172
CompilerDirectives .transferToInterpreterAndInvalidate ();
181
173
throw UnknownIdentifierException .create (member );
0 commit comments