X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Fcompilation%2FSCLCompiler.java;h=5e713f1f483c0150083ee4a19cdf7970d1f0828e;hb=refs%2Fchanges%2F34%2F1534%2F3;hp=643513d67720537450e8c98fbd411bdd781b000e;hpb=f5b8a3d0b68ab33a78235c5dfa84fc1d45f6271e;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/SCLCompiler.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/SCLCompiler.java index 643513d67..5e713f1f4 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/SCLCompiler.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/SCLCompiler.java @@ -1,18 +1,17 @@ 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; @@ -39,11 +38,13 @@ public class SCLCompiler { } @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)parser.parseModule()) declarations.handle(declaration); @@ -51,12 +52,6 @@ public class SCLCompiler { 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"); } @@ -70,7 +65,6 @@ public class SCLCompiler { String moduleName) { try { if(hasErrors()) return; - compilationContext.header = ModuleHeader.process(compilationContext.errorLog, declarations.moduleHeader); Elaboration elaboration = new Elaboration(compilationContext, timer, localEnvironmentFactory, @@ -82,12 +76,17 @@ public class SCLCompiler { 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; @@ -101,6 +100,8 @@ public class SCLCompiler { 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); @@ -109,6 +110,7 @@ public class SCLCompiler { elaboration.addValueDefinitionsToEnvironment(declarations.typeAnnotationsAst); elaboration.processRules(declarations.rulesAst); elaboration.addSupplementedTypeAnnotationsToEnvironment(); + elaboration.checkExports(); if(SCLCompilerConfiguration.ENABLE_TIMING) phaseFinished("Elaboration"); // Type checking