# HG changeset patch # User Christian Humer # Date 1443098906 -7200 # Node ID 7afb5e5cc3ca0b924884478e3907c80f15e3f63e # Parent dd0b18eb8000a0605bc1aeb3fa5457b77263125b Fix use just one language instance per LanguageCache instead of one per mime-type. diff -r dd0b18eb8000 -r 7afb5e5cc3ca truffle/com.oracle.truffle.api.vm/src/com/oracle/truffle/api/vm/PolyglotEngine.java --- 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 map = new HashMap<>(); - for (Map.Entry 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 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 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