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