private Object convertToObject(TruffleObject truffleObject, Object languageContext) { Object primitiveValue = primitive.unbox(truffleObject); if (primitiveValue != null) { return primitiveValue; } else if (languageContext == null) { // for legacy support return truffleObject; } else if (primitive.hasKeys(truffleObject)) { return asJavaObject(truffleObject, Map.class, null, languageContext); } else if (primitive.hasSize(truffleObject)) { return asJavaObject(truffleObject, List.class, null, languageContext); } else if (isExecutable(truffleObject) || isInstantiable(truffleObject)) { return asJavaObject(truffleObject, Function.class, null, languageContext); } else { return JavaInterop.toHostValue(truffleObject, languageContext); } }
return true; } else if (targetType == List.class) { return primitive.hasSize(tValue); } else if (targetType == Map.class) { return primitive.hasKeys(tValue);
if (primitive.hasSize(truffleObject)) { boolean implementsFunction = shouldImplementFunction(truffleObject); TypeAndClass<?> elementType = getGenericParameterType(genericType, 0); throw newInvalidKeyTypeException(keyClazz); boolean hasSize = (Number.class.isAssignableFrom(keyClazz)) && primitive.hasSize(truffleObject); boolean hasKeys = (keyClazz == Object.class || keyClazz == String.class) && primitive.hasKeys(truffleObject); if (hasKeys || hasSize) { if (primitive.hasSize(truffleObject)) { obj = truffleObjectToArray(truffleObject, targetType, genericType, languageContext); } else {