private Object convertToObject(TruffleObject truffleObject, Object languageContext) {
Object primitiveValue = primitive.unbox(truffleObject);
if (primitiveValue != null) {
return primitiveValue;
} else if (languageContext == null) {
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);
}
}