@Override public Object asHostObject(Object receiver) { TruffleObject castReceiver = (TruffleObject) receiver; // TODO temporary allow proxies as host objects GR-8034 if (isProxy) { return PolyglotProxy.toProxyHostObject((TruffleObject) receiver); } else if (isJava) { return JavaInterop.asJavaObject(castReceiver); } else { return super.asHostObject(receiver); } }
/** @since 0.16 */ @Test public void testWriteToObjectWithElement() throws Exception { String id = objectWithElement(); if (id == null) { return; } PolyglotEngine.Value apply = findGlobalSymbol(id); TruffleObject truffleObject = (TruffleObject) apply.execute().get(); assertIsObjectOfLanguage(truffleObject); @SuppressWarnings("unchecked") List<Object> object = JavaInterop.asJavaObject(List.class, truffleObject); Assert.assertEquals(42.0, ((Number) object.get(2)).doubleValue(), 0.1); object.set(2, 13.0); Assert.assertEquals(13.0, ((Number) object.get(2)).doubleValue(), 0.1); }
/** @since 0.16 */ @Test public void testReadFromObjectWithElement() throws Exception { String id = objectWithElement(); if (id == null) { return; } PolyglotEngine.Value apply = findGlobalSymbol(id); TruffleObject truffleObject = (TruffleObject) apply.execute().get(); assertIsObjectOfLanguage(truffleObject); List<?> object = JavaInterop.asJavaObject(List.class, truffleObject); Assert.assertEquals(42.0, ((Number) object.get(2)).doubleValue(), 0.1); }
/** @since 0.16 */ @Test public void testGetSize() throws Exception { String id = objectWithElement(); if (id == null) { return; } PolyglotEngine.Value apply = findGlobalSymbol(id); List<?> object = JavaInterop.asJavaObject(List.class, (TruffleObject) apply.execute().get()); Assert.assertEquals(4, object.size()); }
TruffleObject to = (TruffleObject) value; if (JavaInterop.isJavaObject(to)) { Object javaObject = JavaInterop.asJavaObject(to); try { if (javaObject == null) {
@Override protected Object findMetaObject(HostContext context, Object value) { if (value instanceof TruffleObject) { TruffleObject to = (TruffleObject) value; if (JavaInterop.isJavaObject(to)) { Object javaObject = JavaInterop.asJavaObject(to); Class<?> javaType; if (javaObject == null) { javaType = Void.class; } else { javaType = javaObject.getClass(); } return javaClassToGuestObject(javaType); } else if (PolyglotProxy.isProxyGuestObject(to)) { Proxy proxy = PolyglotProxy.toProxyHostObject(to); return javaClassToGuestObject(proxy.getClass()); } else if (VMAccessor.JAVAINTEROP.isJavaFunction(value)) { return "Bound Method"; } else { return "Foreign Object"; } } else { return javaClassToGuestObject(value.getClass()); } }
/** @since 0.16 */ @Test public void testHasSize() throws Exception { String id = objectWithElement(); if (id == null) { return; } PolyglotEngine.Value apply = findGlobalSymbol(id); MessageInterface object = JavaInterop.asJavaObject(MessageInterface.class, (TruffleObject) apply.execute().get()); Assert.assertEquals(true, object.hasSize()); }
/** @since 0.16 */ @Test public void testIsNotNull() throws Exception { String id = objectWithValueProperty(); if (id == null) { return; } PolyglotEngine.Value apply = findGlobalSymbol(id); MessageInterface object = JavaInterop.asJavaObject(MessageInterface.class, (TruffleObject) apply.execute().get()); Assert.assertEquals(false, object.isNull()); }
/** @since 0.16 */ @Test public void testIsExecutable() throws Exception { String id = functionAddNumbers(); if (id == null) { return; } PolyglotEngine.Value apply = findGlobalSymbol(id); TruffleObject truffleObject = (TruffleObject) apply.execute().get(); assertIsObjectOfLanguage(truffleObject); MessageInterface object = JavaInterop.asJavaObject(MessageInterface.class, truffleObject); Assert.assertEquals(true, object.isExecutable()); }
/** @since 0.16 */ @Test public void testReadFromObjectWithValueProperty() throws Exception { String id = objectWithValueProperty(); if (id == null) { return; } PolyglotEngine.Value apply = findGlobalSymbol(id); TruffleObject truffleObject = (TruffleObject) apply.execute().get(); assertIsObjectOfLanguage(truffleObject); ObjectWithValueInterface object = JavaInterop.asJavaObject(ObjectWithValueInterface.class, truffleObject); Assert.assertEquals(42.0, object.value(), 0.1); }
/** @since 0.16 */ @Test public void testObjectWithValueAndAddProperty() throws Exception { String id = objectWithValueAndAddProperty(); if (id == null) { return; } PolyglotEngine.Value apply = findGlobalSymbol(id); TruffleObject truffleObject = (TruffleObject) apply.execute().get(); assertIsObjectOfLanguage(truffleObject); ObjectWithValueInterface object = JavaInterop.asJavaObject(ObjectWithValueInterface.class, truffleObject); object.add(20.0); object.add(22.0); Assert.assertEquals(42.0, object.value(), 0.1); }
/** @since 0.16 */ @Test public void testWriteToObjectWithValueProperty() throws Exception { String id = objectWithValueProperty(); if (id == null) { return; } PolyglotEngine.Value apply = findGlobalSymbol(id); TruffleObject truffleObject = (TruffleObject) apply.execute().get(); assertIsObjectOfLanguage(truffleObject); ObjectWithValueInterface object = JavaInterop.asJavaObject(ObjectWithValueInterface.class, truffleObject); Assert.assertEquals(42.0, object.value(), 0.1); object.value(13.0); Assert.assertEquals(13.0, object.value(), 0.1); }
TruffleObject obj = (TruffleObject) apply.execute().get(); assertIsObjectOfLanguage(obj); KeyInfoInterface object = JavaInterop.asJavaObject(KeyInfoInterface.class, obj); Map map = JavaInterop.asJavaObject(Map.class, obj); assertEquals(map.toString(), numKeys, map.size()); if (KeyInfo.isExisting(ro)) {