X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Ftop%2FExpressionEvaluator.java;h=d87beec65a7380361a2c45961fa41c2c886b8c18;hp=6cb68b67364046470a52ebcc7b3c6486bfaf9480;hb=a8758de5bc19e5adb3f618d3038743a164f09912;hpb=969bd23cab98a79ca9101af33334000879fb60c5 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/top/ExpressionEvaluator.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/top/ExpressionEvaluator.java index 6cb68b673..d87beec65 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/top/ExpressionEvaluator.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/top/ExpressionEvaluator.java @@ -1,7 +1,5 @@ package org.simantics.scl.compiler.top; -import gnu.trove.set.hash.THashSet; - import java.io.StringReader; import java.lang.reflect.Method; import java.util.ArrayList; @@ -10,6 +8,7 @@ import java.util.Map; import org.simantics.scl.compiler.common.names.Name; import org.simantics.scl.compiler.compilation.CodeGeneration; +import org.simantics.scl.compiler.compilation.CompilationContext; import org.simantics.scl.compiler.constants.JavaStaticMethod; import org.simantics.scl.compiler.constants.SCLConstant; import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext; @@ -59,6 +58,8 @@ import org.simantics.scl.compiler.types.util.ProcedureType; import org.simantics.scl.runtime.function.FunctionImpl1; import org.simantics.scl.runtime.tuple.Tuple0; +import gnu.trove.set.hash.THashSet; + public class ExpressionEvaluator { public static final boolean TRACE_INTERPRETATION_VS_COMPILATION = false; @@ -178,8 +179,10 @@ public class ExpressionEvaluator { public Object eval() throws SCLExpressionCompilationException { fillDefaults(); - final ErrorLog errorLog = new ErrorLog(); + final CompilationContext compilationContext = new CompilationContext(); + final ErrorLog errorLog = compilationContext.errorLog; final Environment environment = runtimeEnvironment.getEnvironment(); + compilationContext.environment = environment; // Parse expression if(expressionText != null) { @@ -248,8 +251,7 @@ public class ExpressionEvaluator { // Elaboration { - TranslationContext context = new TranslationContext(errorLog, - environment, localEnvironment); + TranslationContext context = new TranslationContext(compilationContext, localEnvironment); expression = expression.resolve(context); if(!errorLog.isEmpty()) throw new SCLExpressionCompilationException(errorLog.getErrors()); @@ -265,7 +267,7 @@ public class ExpressionEvaluator { // Type checking { - TypingContext context = new TypingContext(errorLog, environment); + TypingContext context = new TypingContext(compilationContext); context.pushEffectUpperBound(expression.location, expectedEffect); expression = expression.checkType(context, expectedType); @@ -306,14 +308,15 @@ public class ExpressionEvaluator { MutableClassLoader classLoader = runtimeEnvironment.getMutableClassLoader(); String moduleName = classLoader.getFreshPackageName(); JavaTypeTranslator javaTypeTranslator = new JavaTypeTranslator(environment); + compilationContext.javaTypeTranslator = javaTypeTranslator; JavaNamingPolicy namingPolicy = new JavaNamingPolicy(moduleName); + compilationContext.namingPolicy = namingPolicy; ModuleBuilder moduleBuilder = new ModuleBuilder(namingPolicy, javaTypeTranslator); // Simplify SimplificationContext context = - new SimplificationContext(environment, errorLog, - javaTypeTranslator, DummyJavaReferenceValidator.INSTANCE); + new SimplificationContext(compilationContext, DummyJavaReferenceValidator.INSTANCE); expression = expression.simplify(context); if(!errorLog.isEmpty())