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=c1881fbca53acb2ffc20a21a01a4f4291ed77cb4;hp=39f0ac721ee2a2bd32d366a9e17123e6c9ab6e74;hb=7045f0f516c243563976207abcec13a68891ff1d;hpb=c125a1755cc7c4a6241c3c5bf841c3db0ff2d658 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 39f0ac721..c1881fbca 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 @@ -8,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; @@ -178,11 +179,13 @@ 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 && !expressionText.trim().isEmpty()) { + if(expressionText != null) { try { switch(parseMode) { case BLOCK: { @@ -248,10 +251,9 @@ public class ExpressionEvaluator { // Elaboration { - TranslationContext context = new TranslationContext(errorLog, - environment, localEnvironment); + TranslationContext context = new TranslationContext(compilationContext, localEnvironment); expression = expression.resolve(context); - if(!errorLog.isEmpty()) + if(!errorLog.hasNoErrors()) 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); @@ -276,7 +278,7 @@ public class ExpressionEvaluator { expectedType.addPolarity(Polarity.POSITIVE); context.solveSubsumptions(expression.location); - if(!errorLog.isEmpty()) + if(!errorLog.hasNoErrors()) throw new SCLExpressionCompilationException(errorLog.getErrors()); if(decorateExpression && Types.canonical(expectedEffect) != Types.NO_EFFECTS) { ExpressionDecorator decorator = @@ -286,7 +288,7 @@ public class ExpressionEvaluator { expression = context.solveConstraints(environment, expression); expressionType = expression.getType(); - if(!errorLog.isEmpty()) + if(!errorLog.hasNoErrors()) throw new SCLExpressionCompilationException(errorLog.getErrors()); if(localEnvironment != null) @@ -306,17 +308,18 @@ 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()) + if(!errorLog.hasNoErrors()) throw new SCLExpressionCompilationException(errorLog.getErrors()); if(SCLCompilerConfiguration.SHOW_EXPRESSION_BEFORE_EVALUATION)