package org.simantics.scl.compiler.compilation;
-import java.io.IOException;
-import java.io.Reader;
+import java.io.StringReader;
import java.util.ArrayList;
import java.util.Map;
import org.simantics.scl.compiler.environment.EnvironmentFactory;
import org.simantics.scl.compiler.errors.ErrorLog;
import org.simantics.scl.compiler.internal.codegen.types.JavaReferenceValidatorFactory;
-import org.simantics.scl.compiler.internal.header.ModuleHeader;
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.parser.SCLParserOptions;
+import org.simantics.scl.compiler.internal.parsing.utils.LineLocators;
import org.simantics.scl.compiler.module.ConcreteModule;
import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
import org.simantics.scl.compiler.top.ModuleInitializer;
}
@SuppressWarnings("unchecked")
- public void addSource(Reader sourceReader) {
+ public void addSource(String source) {
if(SCLCompilerConfiguration.ENABLE_TIMING) initializeTiming();
try {
- SCLParserImpl parser = new SCLParserImpl(sourceReader);
+ compilationContext.lineLocator = LineLocators.createLineLocator(source);
+ SCLParserImpl parser = new SCLParserImpl(new StringReader(source));
parser.setParserOptions(SCLParserOptions.MODULE_DEFAULT);
+ parser.setCompilationContext(compilationContext);
if(!parser.isEmpty())
for(DeclarationAst declaration : (ArrayList<DeclarationAst>)parser.parseModule())
declarations.handle(declaration);
compilationContext.errorLog.log(e.location, e.getMessage());
} catch(Exception e) {
compilationContext.errorLog.log(e);
- } finally {
- try {
- sourceReader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
}
if(SCLCompilerConfiguration.ENABLE_TIMING) phaseFinished("Parsing");
}
String moduleName) {
try {
if(hasErrors()) return;
- compilationContext.header = ModuleHeader.process(compilationContext.errorLog, declarations.moduleHeader);
Elaboration elaboration = new Elaboration(compilationContext,
timer,
localEnvironmentFactory,
declarations.relationDefinitionsAst);
if(options.computeCoverage)
elaboration.addCoverageBranchPoints();
+ if(options.collectDebugInfo)
+ elaboration.collectDebugInfo();
// Elaboration
if(hasErrors()) return;
+ elaboration.prepareExports();
+ if(hasErrors()) return;
elaboration.addTypesToEnvironment(
declarations.dataTypesAst,
declarations.typeAliasesAst,
- declarations.effectsAst);
+ declarations.effectsAst,
+ declarations.rulesetsAst);
if(hasErrors()) return;
elaboration.processTypeAliases(declarations.typeAliasesAst);
if(hasErrors()) return;
if(hasErrors()) return;
elaboration.processJavaMethods(declarations.javaMethodDeclarations);
if(hasErrors()) return;
+ elaboration.processRulesets(declarations.rulesetsAst);
+ if(hasErrors()) return;
elaboration.addDataTypesToEnvironment();
elaboration.addTypeClassesToEnvironment();
elaboration.preprocessValueDefinitions(declarations.typeAnnotationsAst);
elaboration.addValueDefinitionsToEnvironment(declarations.typeAnnotationsAst);
elaboration.processRules(declarations.rulesAst);
elaboration.addSupplementedTypeAnnotationsToEnvironment();
+ elaboration.checkExports();
if(SCLCompilerConfiguration.ENABLE_TIMING) phaseFinished("Elaboration");
// Type checking