4040 */
4141package com .oracle .graal .python .builtins .objects .cext .hpy ;
4242
43- import static com .oracle .graal .python .util .PythonUtils .TS_ENCODING ;
44- import static com .oracle .graal .python .util .PythonUtils .tsLiteral ;
45-
4643import com .oracle .graal .python .builtins .objects .PNone ;
4744import com .oracle .graal .python .builtins .objects .PythonAbstractObject ;
4845import com .oracle .graal .python .builtins .objects .cext .common .CArrayWrappers ;
9592@ ExportLibrary (InteropLibrary .class )
9693@ SuppressWarnings ("static-method" )
9794public 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 };
112109
113110 private final GraalHPyContext context ;
114111 private final CExtPyBuffer buffer ;
@@ -127,17 +124,14 @@ boolean hasMembers() {
127124
128125 @ ExportMessage
129126 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 });
132129 }
133130
134131 @ 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 ) {
139133 for (int i = 0 ; i < MEMBERS .length ; i ++) {
140- if (eqNode . execute ( MEMBERS [i ], tmember , TS_ENCODING )) {
134+ if (MEMBERS [i ]. equals ( key )) {
141135 return true ;
142136 }
143137 }
@@ -148,34 +142,32 @@ boolean isMemberReadable(String member,
148142 static class ReadMember {
149143 @ Specialization (guards = "receiver.getSupplier() == cachedSupplier" )
150144 static Object readMember (GraalHPyBuffer receiver , String member ,
151- @ Cached TruffleString .FromJavaStringNode fromJavaStringNode ,
152- @ Cached TruffleString .EqualNode eqNode ,
153145 @ Cached (value = "receiver.getSupplier()" , allowUncached = true ) @ SuppressWarnings ("unused" ) ConversionNodeSupplier cachedSupplier ,
154146 @ 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 ();
179171 }
180172 CompilerDirectives .transferToInterpreterAndInvalidate ();
181173 throw UnknownIdentifierException .create (member );
0 commit comments