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;
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) {
// 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());
}
// Type checking
{
- TypingContext context = new TypingContext(errorLog, environment);
+ TypingContext context = new TypingContext(compilationContext);
context.pushEffectUpperBound(expression.location, expectedEffect);
expression = expression.checkType(context, expectedType);
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 =
expression = context.solveConstraints(environment, expression);
expressionType = expression.getType();
- if(!errorLog.isEmpty())
+ if(!errorLog.hasNoErrors())
throw new SCLExpressionCompilationException(errorLog.getErrors());
if(localEnvironment != null)
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)