Change universal type variables to existential in requested value types 60/1160/1
authorjsimomaa <jani.simomaa@gmail.com>
Mon, 30 Oct 2017 14:14:49 +0000 (16:14 +0200)
committerjsimomaa <jani.simomaa@gmail.com>
Mon, 30 Oct 2017 14:14:49 +0000 (16:14 +0200)
refs #7575

Change-Id: If6d1ce540b22b0bb34239427fbfe7579fc0413ae

bundles/org.simantics.document.server/src/org/simantics/document/server/request/ServerSCLHandlerValueRequest.java
bundles/org.simantics.document.server/src/org/simantics/document/server/request/ServerSCLValueRequest.java

index 286cae2728c9f12660c71e5fe2dc38b934dd0568..7283cf26b36a5786c1212f6bc7d6405042cae882 100644 (file)
@@ -1,5 +1,6 @@
 package org.simantics.document.server.request;
 
 package org.simantics.document.server.request;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
 import java.util.List;
 import java.util.Map;
 
@@ -27,6 +28,8 @@ import org.simantics.scl.compiler.environment.specification.EnvironmentSpecifica
 import org.simantics.scl.compiler.runtime.RuntimeEnvironment;
 import org.simantics.scl.compiler.top.SCLExpressionCompilationException;
 import org.simantics.scl.compiler.types.TCon;
 import org.simantics.scl.compiler.runtime.RuntimeEnvironment;
 import org.simantics.scl.compiler.top.SCLExpressionCompilationException;
 import org.simantics.scl.compiler.types.TCon;
+import org.simantics.scl.compiler.types.TMetaVar;
+import org.simantics.scl.compiler.types.TVar;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.kinds.Kinds;
@@ -232,7 +235,9 @@ public class ServerSCLHandlerValueRequest extends AbstractExpressionCompilationR
     protected Type getExpectedType(ReadGraph graph, CompilationContext context) throws DatabaseException {
         if(possibleExpectedValueType != null) {
             try {
     protected Type getExpectedType(ReadGraph graph, CompilationContext context) throws DatabaseException {
         if(possibleExpectedValueType != null) {
             try {
-                return Environments.getType(context.runtimeEnvironment.getEnvironment(), possibleExpectedValueType);
+                Type type = Environments.getType(context.runtimeEnvironment.getEnvironment(), possibleExpectedValueType);
+                type = Types.instantiate(Types.forAll(Types.freeVars(type).toArray(new TVar[0]), type), new ArrayList<TMetaVar>());
+                return type;
             } catch (SCLExpressionCompilationException e) {
                 LOGGER.error("Could not get type for " + String.valueOf(possibleExpectedValueType), e);
             }
             } catch (SCLExpressionCompilationException e) {
                 LOGGER.error("Could not get type for " + String.valueOf(possibleExpectedValueType), e);
             }
index 5013f88146bbb232d48d8f27e8883df40fd81421..e6cdf6ff5b43712b098594d172a91b7595de63cb 100644 (file)
@@ -1,5 +1,6 @@
 package org.simantics.document.server.request;
 
 package org.simantics.document.server.request;
 
+import java.util.ArrayList;
 import java.util.Map;
 
 import org.simantics.databoard.Bindings;
 import java.util.Map;
 
 import org.simantics.databoard.Bindings;
@@ -28,6 +29,8 @@ import org.simantics.scl.compiler.environment.Environments;
 import org.simantics.scl.compiler.environment.specification.EnvironmentSpecification;
 import org.simantics.scl.compiler.runtime.RuntimeEnvironment;
 import org.simantics.scl.compiler.top.SCLExpressionCompilationException;
 import org.simantics.scl.compiler.environment.specification.EnvironmentSpecification;
 import org.simantics.scl.compiler.runtime.RuntimeEnvironment;
 import org.simantics.scl.compiler.top.SCLExpressionCompilationException;
+import org.simantics.scl.compiler.types.TMetaVar;
+import org.simantics.scl.compiler.types.TVar;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.kinds.Kinds;
@@ -205,7 +208,9 @@ public class ServerSCLValueRequest extends AbstractExpressionCompilationRequest<
     protected Type getExpectedType(ReadGraph graph, CompilationContext context) throws DatabaseException {
         if(possibleExpectedValueType != null) {
             try {
     protected Type getExpectedType(ReadGraph graph, CompilationContext context) throws DatabaseException {
         if(possibleExpectedValueType != null) {
             try {
-                return Environments.getType(context.runtimeEnvironment.getEnvironment(), possibleExpectedValueType);
+                Type type = Environments.getType(context.runtimeEnvironment.getEnvironment(), possibleExpectedValueType);
+                type = Types.instantiate(Types.forAll(Types.freeVars(type).toArray(new TVar[0]), type), new ArrayList<TMetaVar>());
+                return type;
             } catch (SCLExpressionCompilationException e) {
                 LOGGER.error("Could not get type for " + String.valueOf(possibleExpectedValueType), e);
             }
             } catch (SCLExpressionCompilationException e) {
                 LOGGER.error("Could not get type for " + String.valueOf(possibleExpectedValueType), e);
             }