/** * Find a meta-object of a value, if any. The meta-object represents a description of the * object, reveals it's kind and it's features. Some information that a meta-object might * define includes the base object's type, interface, class, methods, attributes, etc. When * no meta-object is known, <code>null</code> is returned. * * @param node a node * @param value a value to find the meta-object of * @return the meta-object, or <code>null</code> * @since 0.22 * @deprecated use * {@link #findMetaObject(com.oracle.truffle.api.nodes.LanguageInfo, java.lang.Object)} * and retrieve {@link LanguageInfo} from * <code>node.getRootNode().getLanguageInfo()</code>. */ @Deprecated public Object findMetaObject(Node node, Object value) { final TruffleLanguage.Env env = getLangEnv(node); return AccessorInstrumentHandler.langAccess().findMetaObject(env, value); }
/** * Find a meta-object of a value, if any. The meta-object represents a description of the * object, reveals it's kind and it's features. Some information that a meta-object might * define includes the base object's type, interface, class, methods, attributes, etc. When * no meta-object is known, <code>null</code> is returned. * * @param node a node * @param value a value to find the meta-object of * @return the meta-object, or <code>null</code> * @since 0.22 * @deprecated use * {@link #findMetaObject(com.oracle.truffle.api.nodes.LanguageInfo, java.lang.Object)} * and retrieve {@link LanguageInfo} from * <code>node.getRootNode().getLanguageInfo()</code>. */ @Deprecated public Object findMetaObject(Node node, Object value) { final TruffleLanguage.Env env = getLangEnv(node); return AccessorInstrumentHandler.langAccess().findMetaObject(env, value); }
if (displayEnv != null) { try { Object metaObject = LANGUAGE.findMetaObject(displayEnv, receiver); if (metaObject != null) { metaObjectToString = truncateString(LANGUAGE.toStringIfVisible(displayEnv, metaObject, false), CHARACTER_LIMIT);
if (displayEnv != null) { try { Object metaObject = LANGUAGE.findMetaObject(displayEnv, receiver); if (metaObject != null) { metaObjectToString = truncateString(LANGUAGE.toStringIfVisible(displayEnv, metaObject, false), CHARACTER_LIMIT);
@Override public Object findMetaObjectForLanguage(Object languageVMObject, Object value) { PolyglotLanguageContext languageContext = ((PolyglotLanguageContext) languageVMObject); Env currentLanguage = languageContext.env; assert currentLanguage != null : "current language is initialized"; Env foundLanguage = null; Env hostLanguage = languageContext.context.getHostContext().env; if (VMAccessor.LANGUAGE.isObjectOfLanguage(hostLanguage, value)) { foundLanguage = hostLanguage; } else if (VMAccessor.LANGUAGE.isObjectOfLanguage(currentLanguage, value)) { foundLanguage = currentLanguage; } else { for (PolyglotLanguageContext searchContext : languageContext.context.contexts) { if (searchContext.isInitialized() && searchContext != languageContext) { Env searchEnv = searchContext.env; if (VMAccessor.LANGUAGE.isObjectOfLanguage(searchEnv, value)) { foundLanguage = searchEnv; break; } } } } if (foundLanguage != null) { return VMAccessor.LANGUAGE.findMetaObject(foundLanguage, value); } else { return null; } }
/** * Uses the provided language to find a meta-object of a value, if any. The meta-object * represents a description of the object, reveals it's kind and it's features. Some * information that a meta-object might define includes the base object's type, interface, * class, methods, attributes, etc. When no meta-object is known, <code>null</code> is * returned. For the best results, use the {@link #findLanguage(java.lang.Object) value's * language}, if any. * * @param language a language * @param value a value to find the meta-object of, must be an interop type (i.e. either * implementing TruffleObject or be a primitive value) * @return the meta-object, or <code>null</code> * @see #findLanguage(java.lang.Object) * @since 0.27 */ public Object findMetaObject(LanguageInfo language, Object value) { AccessorInstrumentHandler.interopAccess().checkInteropType(value); final TruffleLanguage.Env env = AccessorInstrumentHandler.engineAccess().getEnvForInstrument(language); return AccessorInstrumentHandler.langAccess().findMetaObject(env, value); }
/** * Uses the provided language to find a meta-object of a value, if any. The meta-object * represents a description of the object, reveals it's kind and it's features. Some * information that a meta-object might define includes the base object's type, interface, * class, methods, attributes, etc. When no meta-object is known, <code>null</code> is * returned. For the best results, use the {@link #findLanguage(java.lang.Object) value's * language}, if any. * * @param language a language * @param value a value to find the meta-object of, must be an interop type (i.e. either * implementing TruffleObject or be a primitive value) * @return the meta-object, or <code>null</code> * @see #findLanguage(java.lang.Object) * @since 0.27 */ public Object findMetaObject(LanguageInfo language, Object value) { AccessorInstrumentHandler.interopAccess().checkInteropType(value); final TruffleLanguage.Env env = AccessorInstrumentHandler.engineAccess().getEnvForInstrument(language); Object metaObject = AccessorInstrumentHandler.langAccess().findMetaObject(env, value); assert checkNullOrInterop(metaObject); return metaObject; }
private Object findMetaObject(Object target) { if (languageContext == null) { return null; } else if (target instanceof PolyglotLanguageBindings) { return languageContext.language.getName() + " Bindings"; } else if (target instanceof PolyglotBindings) { return "Polyglot Bindings"; } else { final PolyglotLanguage resolvedLanguage = PolyglotImpl.EngineImpl.findObjectLanguage(languageContext.context, languageContext, target); if (resolvedLanguage == null) { return null; } final PolyglotLanguageContext resolvedLanguageContext = languageContext.context.getContext(resolvedLanguage); assert resolvedLanguageContext != null; return LANGUAGE.findMetaObject(resolvedLanguageContext.env, target); } }
@SuppressWarnings("try") @Override protected Object compute() { Object prev = enter(); try { return LANGUAGE.findMetaObject(language.getEnv(true), ConvertedObject.original(value())); } finally { leave(prev); } } };
private Object findMetaObject(Object target) { if (target instanceof PolyglotLanguageBindings) { return languageContext.language.getName() + " Bindings"; } else if (target instanceof PolyglotBindings) { return "Polyglot Bindings"; } else { return LANGUAGE.findMetaObject(languageContext.env, target); } }