Mercurial > hg > truffle
changeset 22194:7afb5e5cc3ca
Fix use just one language instance per LanguageCache instead of one per mime-type.
author | Christian Humer <christian.humer@oracle.com> |
---|---|
date | Thu, 24 Sep 2015 14:48:26 +0200 |
parents | dd0b18eb8000 |
children | 09d91119929f |
files | truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java |
diffstat | 1 files changed, 24 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java Thu Sep 24 13:30:29 2015 +0200 +++ b/truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java Thu Sep 24 14:48:26 2015 +0200 @@ -24,20 +24,6 @@ */ package com.oracle.truffle.api.vm; -import com.oracle.truffle.api.CallTarget; -import com.oracle.truffle.api.TruffleLanguage; -import com.oracle.truffle.api.TruffleLanguage.Env; -import com.oracle.truffle.api.TruffleLanguage.Registration; -import com.oracle.truffle.api.debug.DebugSupportProvider; -import com.oracle.truffle.api.debug.Debugger; -import com.oracle.truffle.api.debug.ExecutionEvent; -import com.oracle.truffle.api.debug.SuspendedEvent; -import com.oracle.truffle.api.impl.Accessor; -import com.oracle.truffle.api.instrument.Probe; -import com.oracle.truffle.api.instrument.ToolSupportProvider; -import com.oracle.truffle.api.interop.TruffleObject; -import com.oracle.truffle.api.interop.java.JavaInterop; -import com.oracle.truffle.api.source.Source; import java.io.Closeable; import java.io.File; import java.io.IOException; @@ -56,6 +42,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -65,6 +52,21 @@ import java.util.logging.Level; import java.util.logging.Logger; +import com.oracle.truffle.api.CallTarget; +import com.oracle.truffle.api.TruffleLanguage; +import com.oracle.truffle.api.TruffleLanguage.Env; +import com.oracle.truffle.api.TruffleLanguage.Registration; +import com.oracle.truffle.api.debug.DebugSupportProvider; +import com.oracle.truffle.api.debug.Debugger; +import com.oracle.truffle.api.debug.ExecutionEvent; +import com.oracle.truffle.api.debug.SuspendedEvent; +import com.oracle.truffle.api.impl.Accessor; +import com.oracle.truffle.api.instrument.Probe; +import com.oracle.truffle.api.instrument.ToolSupportProvider; +import com.oracle.truffle.api.interop.TruffleObject; +import com.oracle.truffle.api.interop.java.JavaInterop; +import com.oracle.truffle.api.source.Source; + /** * Gate way into the world of {@link TruffleLanguage Truffle languages}. {@link #buildNew() * Instantiate} your own portal into the isolated, multi language system with all the registered @@ -140,8 +142,13 @@ this.initThread = Thread.currentThread(); this.globals = new HashMap<>(globals); Map<String, Language> map = new HashMap<>(); - for (Map.Entry<String, LanguageCache> en : LanguageCache.languages().entrySet()) { - map.put(en.getKey(), createLanguage(en)); + /* We want to create a language instance but per LanguageCache and not per mime type. */ + Set<LanguageCache> uniqueCaches = new HashSet<>(LanguageCache.languages().values()); + for (LanguageCache languageCache : uniqueCaches) { + Language newLanguage = new Language(languageCache); + for (String mimeType : newLanguage.getMimeTypes()) { + map.put(mimeType, newLanguage); + } } this.langs = map; } @@ -677,7 +684,7 @@ * delegates to * {@link JavaInterop#asJavaObject(java.lang.Class, com.oracle.truffle.api.interop.TruffleObject)} * just handles primitive types as well. - * + * * @param <T> the type of the view one wants to obtain * @param representation the class of the view interface (it has to be an interface) * @return instance of the view wrapping the object of this symbol