@Override public Env createEnv(Object vmObject, TruffleLanguage<?> language, OutputStream stdOut, OutputStream stdErr, InputStream stdIn, Map<String, Object> config, OptionValues options, String[] applicationArguments, FileSystem fileSystem) { Env env = new Env(vmObject, language, stdOut, stdErr, stdIn, config, options, applicationArguments, fileSystem); LinkedHashSet<Object> collectedServices = new LinkedHashSet<>(); LanguageInfo info = language.languageInfo; AccessAPI.instrumentAccess().collectEnvServices(collectedServices, API.nodes().getEngineObject(info), language); env.services = new ArrayList<>(collectedServices); return env; }
private void insertWrapper(Node instrumentableNode, SourceSection sourceSection) { Lock lock = AccessorInstrumentHandler.nodesAccess().getLock(instrumentableNode); try { lock.lock(); insertWrapperImpl(instrumentableNode, sourceSection); } finally { lock.unlock(); } }
protected <T> T getOrCreateRuntimeData(RootNode rootNode, Supplier<T> constructor) { Objects.requireNonNull(constructor); final Accessor.Nodes nodesAccess = Accessor.nodesAccess(); final EngineSupport engineAccess = Accessor.engineAccess(); if (rootNode != null && nodesAccess != null && engineAccess != null) { final Object sourceVM = nodesAccess.getSourceVM(rootNode); if (sourceVM != null) { final T runtimeData = engineAccess.getOrCreateRuntimeData(sourceVM, constructor); if (runtimeData != null) { return runtimeData; } } } return getOrCreateFallbackEngineData(constructor); }
void onFirstExecution(RootNode root) { if (!AccessorInstrumentHandler.nodesAccess().isInstrumentable(root)) { return;
void onFirstExecution(RootNode root) { if (!AccessorInstrumentHandler.nodesAccess().isInstrumentable(root)) { return;
void onLoad(RootNode root) { if (!AccessorInstrumentHandler.nodesAccess().isInstrumentable(root)) { return;
void onLoad(RootNode root) { if (!AccessorInstrumentHandler.nodesAccess().isInstrumentable(root)) { return;
/** * Returns <code>true</code> if the underlying instrumented AST is tagged with a particular tag. * The return value of {@link #hasTag(Class)} always returns the same value for a particular tag * and {@link EventContext}. The method may be used on compiled code paths. * * @param tag the tag to check to check, must not be <code>null</code>. * @since 0.33 */ public boolean hasTag(Class<? extends Tag> tag) { if (tag == null) { CompilerDirectives.transferToInterpreter(); throw new NullPointerException(); } Node node = getInstrumentedNode(); if (node instanceof InstrumentableNode) { return ((InstrumentableNode) node).hasTag(tag); } else { // legacy support return AccessorInstrumentHandler.nodesAccess().isTaggedWith(node, tag); } }
/** * Returns <code>true</code> if the underlying instrumented AST is tagged with a particular tag. * The return value of {@link #hasTag(Class)} always returns the same value for a particular tag * and {@link EventContext}. The method may be used on compiled code paths. * * @param tag the tag to check to check, must not be <code>null</code>. * @since 0.33 */ public boolean hasTag(Class<? extends Tag> tag) { if (tag == null) { CompilerDirectives.transferToInterpreter(); throw new NullPointerException(); } Node node = getInstrumentedNode(); if (node instanceof InstrumentableNode) { return ((InstrumentableNode) node).hasTag(tag); } else { // legacy support return AccessorInstrumentHandler.nodesAccess().isTaggedWith(node, tag); } }
protected <T> T getOrCreateRuntimeData(RootNode rootNode, Supplier<T> constructor) { Objects.requireNonNull(constructor); final Accessor.Nodes nodesAccess = Accessor.nodesAccess(); final EngineSupport engineAccess = Accessor.engineAccess(); if (rootNode != null && nodesAccess != null && engineAccess != null) { final Object sourceVM = nodesAccess.getSourceVM(rootNode); if (sourceVM != null) { final T runtimeData = engineAccess.getOrCreateRuntimeData(sourceVM, constructor); if (runtimeData != null) { return runtimeData; } } } return getOrCreateFallbackEngineData(constructor); }
static int get(RootNode root) { return AccessorInstrumentHandler.nodesAccess().getRootNodeBits(root); }
protected int adoptChildrenAndCount(RootNode root) { return Accessor.nodesAccess().adoptChildrenAndCount(root); }
static int get(RootNode root) { return AccessorInstrumentHandler.nodesAccess().getRootNodeBits(root); }
protected int adoptChildrenAndCount(RootNode root) { return Accessor.nodesAccess().adoptChildrenAndCount(root); }
@Override public Class<? extends TruffleLanguage<?>> getLanguageClass(LanguageInfo language) { return ((PolyglotLanguage) NODES.getEngineObject(language)).cache.getLanguageClass(); }
@Override public Env getExistingEnvForInstrument(LanguageInfo language) { return ((LanguageShared) NODES.getEngineObject(language)).currentLanguage().getEnv(false); }
FindContextNodeImpl(Env env) { this.env = env; this.languageShared = (LanguageShared) NODES.getEngineObject(LANGUAGE.getLanguageInfo(env)); }
@Override public Class<? extends TruffleLanguage<?>> getLanguageClass(LanguageInfo language) { return ((LanguageShared) NODES.getEngineObject(language)).cache.getLanguageClass(); }
@Override public Env getEnvForInstrument(LanguageInfo language) { return ((LanguageShared) NODES.getEngineObject(language)).currentLanguage().getEnv(true); }
@Override public Class<? extends TruffleLanguage<?>> getLanguageClass(LanguageInfo language) { return ((PolyglotLanguage) NODES.getEngineObject(language)).cache.getLanguageClass(); }