3131import com .oracle .truffle .api .dsl .Specialization ;
3232import com .oracle .truffle .api .dsl .TypeSystemReference ;
3333import com .oracle .truffle .api .frame .VirtualFrame ;
34- import com .oracle .truffle .api .interop .ArityException ;
3534import com .oracle .truffle .api .interop .ForeignAccess ;
3635import com .oracle .truffle .api .interop .Message ;
3736import com .oracle .truffle .api .interop .TruffleObject ;
3837import com .oracle .truffle .api .interop .UnknownIdentifierException ;
3938import com .oracle .truffle .api .interop .UnsupportedMessageException ;
40- import com .oracle .truffle .api .interop .UnsupportedTypeException ;
4139import com .oracle .truffle .api .nodes .Node ;
4240import com .oracle .truffle .r .nodes .attributes .SpecialAttributesFunctions .GetNamesAttributeNode ;
4341import com .oracle .truffle .r .nodes .builtin .RBuiltinNode ;
@@ -216,31 +214,7 @@ protected int getForeignArrayLength(TruffleObject obj,
216214 return totalSize ;
217215 }
218216
219- @ Specialization (guards = {"isJavaIterable(obj)" , "!isForeignArray(obj, hasSize)" })
220- protected int getJavaIterableLength (TruffleObject obj ,
221- @ Cached ("READ.createNode()" ) Node read ,
222- @ Cached ("EXECUTE.createNode()" ) Node execute ,
223- @ SuppressWarnings ("unused" ) @ Cached ("HAS_SIZE.createNode()" ) Node hasSize ,
224- @ Cached ("create()" ) Foreign2R foreign2R ) {
225- int totalSize = 0 ;
226- try {
227- TruffleObject itFunction = (TruffleObject ) ForeignAccess .sendRead (read , obj , "iterator" );
228- TruffleObject it = (TruffleObject ) ForeignAccess .sendExecute (execute , itFunction );
229- TruffleObject hasNextFunction = (TruffleObject ) ForeignAccess .sendRead (read , it , "hasNext" );
230-
231- while ((boolean ) ForeignAccess .sendExecute (execute , hasNextFunction )) {
232- TruffleObject nextFunction = (TruffleObject ) ForeignAccess .sendRead (read , it , "next" );
233- Object element = ForeignAccess .sendExecute (execute , nextFunction );
234- element = foreign2R .execute (element );
235- totalSize += getRecursiveLength (element );
236- }
237- } catch (ArityException | UnsupportedTypeException | UnsupportedMessageException | UnknownIdentifierException ex ) {
238- throw RError .interopError (RError .findParentRBase (this ), ex , obj );
239- }
240- return totalSize ;
241- }
242-
243- @ Specialization (guards = {"isForeignObject(obj)" , "!isForeignArray(obj, hasSize)" , "!isJavaIterable(obj)" })
217+ @ Specialization (guards = {"isForeignObject(obj)" , "!isForeignArray(obj, hasSize)" })
244218 protected int getForeignObject (@ SuppressWarnings ("unused" ) TruffleObject obj ,
245219 @ SuppressWarnings ("unused" ) @ Cached ("HAS_SIZE.createNode()" ) Node hasSize ) {
246220 return 1 ;
@@ -322,12 +296,6 @@ protected Object unlistForeignArray(VirtualFrame frame, TruffleObject obj, boole
322296 return unlistForeign (frame , obj , recursive , useNames , foreignArray2R );
323297 }
324298
325- @ Specialization (guards = {"isJavaIterable(obj)" })
326- protected Object unlistJavaIterable (VirtualFrame frame , TruffleObject obj , boolean recursive , boolean useNames ,
327- @ Cached ("create()" ) ForeignArray2R foreignArray2R ) {
328- return unlistForeign (frame , obj , recursive , useNames , foreignArray2R );
329- }
330-
331299 private Object unlistForeign (VirtualFrame frame , TruffleObject obj , boolean recursive , boolean useNames , ForeignArray2R foreignArray2R ) {
332300 Object result = foreignArray2R .convert (obj , recursive );
333301 if (result instanceof RAbstractListVector ) {
@@ -336,7 +304,7 @@ private Object unlistForeign(VirtualFrame frame, TruffleObject obj, boolean recu
336304 return result ;
337305 }
338306
339- @ Specialization (guards = {"isForeignObject(obj)" , "!isForeignVector (obj)" })
307+ @ Specialization (guards = {"isForeignObject(obj)" , "!isForeignArray (obj)" })
340308 protected Object unlistForeign (TruffleObject obj , @ SuppressWarnings ("unused" ) boolean recursive , @ SuppressWarnings ("unused" ) boolean useNames ) {
341309 return obj ;
342310 }
@@ -347,14 +315,6 @@ protected Object unlist(Object o, Object recursive, Object useNames) {
347315 return o ;
348316 }
349317
350- protected boolean isForeignVector (Object obj ) {
351- return ForeignArray2R .isForeignVector (obj , getHasSizeNode ());
352- }
353-
354- protected boolean isJavaIterable (Object obj ) {
355- return ForeignArray2R .isJavaIterable (obj );
356- }
357-
358318 protected boolean isForeignArray (Object obj ) {
359319 return ForeignArray2R .isForeignArray (obj , getHasSizeNode ());
360320 }
@@ -365,7 +325,7 @@ protected boolean isForeignArray(Object obj) {
365325 * @param obj the foreign object. Has to be ensured it is a foreign array or java iterable.
366326 */
367327 private RAbstractVector foreignToVector (TruffleObject obj , boolean recursive ) {
368- assert isForeignVector (obj );
328+ assert isForeignArray (obj );
369329 return (RAbstractVector ) getForeignArray2RNode ().convert (obj , recursive );
370330 }
371331
@@ -740,7 +700,7 @@ private int unlistHelperComplex(double[] result, String[] namesData, int pos, Na
740700 @ TruffleBoundary
741701 private int unlistHelperList (Object [] result , String [] namesData , int pos , NamesInfo namesInfo , Object obj , String outerBase , String tag , boolean recursive , boolean useNames ) {
742702 Object o ;
743- if (isForeignVector (obj )) {
703+ if (isForeignArray (obj )) {
744704 o = foreignToVector ((TruffleObject ) obj , recursive );
745705 } else {
746706 o = handlePairList (obj );
@@ -765,7 +725,7 @@ private int unlistHelperList(Object[] result, String[] namesData, int pos, Names
765725 for (int i = 0 ; i < v .getLength (); i ++) {
766726 String name = itemName (listNames , i );
767727 Object cur = v .getDataAtAsObject (i );
768- if (recursive && isForeignVector (obj )) {
728+ if (recursive && isForeignArray (obj )) {
769729 position = unlistHelperForeign (result , position , (TruffleObject ) cur , recursive );
770730 } else if (v instanceof RList && recursive ) {
771731 position = unlistHelperList (result , namesData , position , namesInfo , cur , base , name , recursive , useNames );
@@ -785,11 +745,11 @@ private int unlistHelperList(Object[] result, String[] namesData, int pos, Names
785745 @ TruffleBoundary
786746 private int unlistHelperForeign (Object [] result , int pos , TruffleObject obj , boolean recursive ) {
787747 int position = pos ;
788- if (recursive && isForeignVector (obj )) {
748+ if (recursive && isForeignArray (obj )) {
789749 RAbstractVector v = foreignToVector (obj , recursive );
790750 for (int i = 0 ; i < v .getLength (); i ++) {
791751 Object cur = v .getDataAtAsObject (i );
792- if (isForeignVector (cur )) {
752+ if (isForeignArray (cur )) {
793753 position = unlistHelperForeign (result , position , (TruffleObject ) cur , recursive );
794754 } else {
795755 result [position ++] = cur ;
@@ -807,10 +767,10 @@ private int unlistHelperForeignLogical(byte[] result, int pos, TruffleObject obj
807767 Object cur = v .getDataAtAsObject (i );
808768 if (!RRuntime .isForeignObject (cur )) {
809769 result [position ++] = unlistValueLogical (cur );
810- } else if (recursive && isForeignVector (cur )) {
770+ } else if (recursive && isForeignArray (cur )) {
811771 position = unlistHelperForeignLogical (result , position , (TruffleObject ) cur , recursive );
812772 } else {
813- assert false : "recursive=" + recursive + ", isIterable=" + ForeignArray2R . isJavaIterable ( cur ) + ", isArray=" + isForeignArray (cur );
773+ assert false : "recursive=" + recursive + ", isArray=" + isForeignArray (cur );
814774 }
815775 }
816776 return position ;
@@ -824,10 +784,10 @@ private int unlistHelperForeignInt(int[] result, int pos, TruffleObject obj, boo
824784 Object cur = v .getDataAtAsObject (i );
825785 if (!RRuntime .isForeignObject (cur )) {
826786 result [position ++] = unlistValueInt (cur );
827- } else if (recursive && isForeignVector (cur )) {
787+ } else if (recursive && isForeignArray (cur )) {
828788 position = unlistHelperForeignInt (result , position , (TruffleObject ) cur , recursive );
829789 } else {
830- assert false : "recursive=" + recursive + ", isIterable=" + ForeignArray2R . isJavaIterable ( cur ) + ", isArray=" + isForeignArray (cur );
790+ assert false : "recursive=" + recursive + ", isArray=" + isForeignArray (cur );
831791 }
832792 }
833793 return position ;
@@ -841,10 +801,10 @@ private int unlistHelperForeignDouble(double[] result, int pos, TruffleObject ob
841801 Object cur = v .getDataAtAsObject (i );
842802 if (!RRuntime .isForeignObject (cur )) {
843803 result [position ++] = unlistValueDouble (cur );
844- } else if (recursive && isForeignVector (cur )) {
804+ } else if (recursive && isForeignArray (cur )) {
845805 position = unlistHelperForeignDouble (result , position , (TruffleObject ) cur , recursive );
846806 } else {
847- assert false : "recursive=" + recursive + ", isIterable=" + ForeignArray2R . isJavaIterable ( cur ) + ", isArray=" + isForeignArray (cur );
807+ assert false : "recursive=" + recursive + ", isArray=" + isForeignArray (cur );
848808 }
849809 }
850810 return position ;
@@ -858,10 +818,10 @@ private int unlistHelperForeignString(String[] result, int pos, TruffleObject ob
858818 Object cur = v .getDataAtAsObject (i );
859819 if (!RRuntime .isForeignObject (cur )) {
860820 result [position ++] = unlistValueString (cur );
861- } else if (recursive && isForeignVector (cur )) {
821+ } else if (recursive && isForeignArray (cur )) {
862822 position = unlistHelperForeignString (result , position , (TruffleObject ) cur , recursive );
863823 } else {
864- assert false : "recursive=" + recursive + ", isIterable=" + ForeignArray2R . isJavaIterable ( cur ) + ", isArray=" + isForeignArray (cur );
824+ assert false : "recursive=" + recursive + ", isArray=" + isForeignArray (cur );
865825 }
866826 }
867827 return position ;
0 commit comments