import org.simantics.scl.compiler.environment.EnvironmentFactory;
import org.simantics.scl.compiler.errors.ErrorLog;
import org.simantics.scl.compiler.environment.EnvironmentFactory;
import org.simantics.scl.compiler.errors.ErrorLog;
import org.simantics.scl.compiler.internal.parsing.declarations.DeclarationAst;
import org.simantics.scl.compiler.internal.parsing.exceptions.SCLSyntaxErrorException;
import org.simantics.scl.compiler.internal.parsing.parser.SCLParserImpl;
import org.simantics.scl.compiler.internal.parsing.declarations.DeclarationAst;
import org.simantics.scl.compiler.internal.parsing.exceptions.SCLSyntaxErrorException;
import org.simantics.scl.compiler.internal.parsing.parser.SCLParserImpl;
import org.simantics.scl.compiler.module.ConcreteModule;
import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
import org.simantics.scl.compiler.top.ModuleInitializer;
import org.simantics.scl.compiler.module.ConcreteModule;
import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
import org.simantics.scl.compiler.top.ModuleInitializer;
- ErrorLog errorLog = new ErrorLog();
- DeclarationClassification declarations = new DeclarationClassification(errorLog);
+ CompilationContext compilationContext = new CompilationContext();
+ DeclarationClassification declarations = new DeclarationClassification(compilationContext);
if(SCLCompilerConfiguration.ENABLE_TIMING) initializeTiming();
try {
SCLParserImpl parser = new SCLParserImpl(sourceReader);
if(SCLCompilerConfiguration.ENABLE_TIMING) initializeTiming();
try {
SCLParserImpl parser = new SCLParserImpl(sourceReader);
if(!parser.isEmpty())
for(DeclarationAst declaration : (ArrayList<DeclarationAst>)parser.parseModule())
declarations.handle(declaration);
} catch(SCLSyntaxErrorException e) {
if(!parser.isEmpty())
for(DeclarationAst declaration : (ArrayList<DeclarationAst>)parser.parseModule())
declarations.handle(declaration);
} catch(SCLSyntaxErrorException e) {
- if(!errorLog.isEmpty()) return;
- Elaboration elaboration = new Elaboration(errorLog,
+ if(hasErrors()) return;
+ Elaboration elaboration = new Elaboration(compilationContext,
declarations.valueDefinitionsAst,
declarations.relationDefinitionsAst);
if(options.computeCoverage)
elaboration.addCoverageBranchPoints();
// Elaboration
declarations.valueDefinitionsAst,
declarations.relationDefinitionsAst);
if(options.computeCoverage)
elaboration.addCoverageBranchPoints();
// Elaboration
elaboration.addTypesToEnvironment(
declarations.dataTypesAst,
declarations.typeAliasesAst,
elaboration.addTypesToEnvironment(
declarations.dataTypesAst,
declarations.typeAliasesAst,
- declarations.effectsAst);
- if(!errorLog.isEmpty()) return;
+ declarations.effectsAst,
+ declarations.rulesetsAst);
+ if(hasErrors()) return;
elaboration.addDataTypesToEnvironment();
elaboration.addTypeClassesToEnvironment();
elaboration.preprocessValueDefinitions(declarations.typeAnnotationsAst);
elaboration.addDataTypesToEnvironment();
elaboration.addTypeClassesToEnvironment();
elaboration.preprocessValueDefinitions(declarations.typeAnnotationsAst);
elaboration.javaReferenceValidator,
elaboration.module);
codeGeneration.simplifyValues();
elaboration.javaReferenceValidator,
elaboration.module);
codeGeneration.simplifyValues();
codeGeneration.optimizeSSA();
if(SCLCompilerConfiguration.ENABLE_TIMING) phaseFinished("SSA conversion and optimization");
codeGeneration.optimizeSSA();
if(SCLCompilerConfiguration.ENABLE_TIMING) phaseFinished("SSA conversion and optimization");
classes = codeGeneration.classes;
module = codeGeneration.module;
moduleInitializer = StandardModuleInitializer.create(
classes = codeGeneration.classes;
module = codeGeneration.module;
moduleInitializer = StandardModuleInitializer.create(
if(SCLCompilerConfiguration.ENABLE_TIMING) {
phaseFinished("Code generation");
reportTiming(moduleName);
}
} catch(Exception e) {
if(SCLCompilerConfiguration.ENABLE_TIMING) {
phaseFinished("Code generation");
reportTiming(moduleName);
}
} catch(Exception e) {