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%2Fcompilation%2FSCLCompiler.java;h=cd43b76e15dec63e81b6ca704238ee2f956aec4c;hp=27583ea53b30e25df56ff6e3b73caf7cf1901b65;hb=1ec0193a5a5b8f368b03adb24acd762838ddf8ea;hpb=4bf8562ab7cbb3747f9c5844a07469291d43e905 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 27583ea53..cd43b76e1 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 @@ -7,10 +7,12 @@ 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.JavaReferenceValidator; +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.module.ConcreteModule; import org.simantics.scl.compiler.module.options.ModuleCompilationOptions; import org.simantics.scl.compiler.top.ModuleInitializer; @@ -29,8 +31,11 @@ public class SCLCompiler { private CompilationTimer timer; private ModuleCompilationOptions options; - public SCLCompiler(ModuleCompilationOptions options) { + JavaReferenceValidatorFactory jrvFactory; + + public SCLCompiler(ModuleCompilationOptions options, JavaReferenceValidatorFactory jrvFactory) { this.options = options == null ? ModuleCompilationOptions.STANDARD_OPTIONS : options; + this.jrvFactory = jrvFactory; } @SuppressWarnings("unchecked") @@ -38,6 +43,8 @@ public class SCLCompiler { if(SCLCompilerConfiguration.ENABLE_TIMING) initializeTiming(); try { SCLParserImpl parser = new SCLParserImpl(sourceReader); + parser.setParserOptions(SCLParserOptions.MODULE_DEFAULT); + parser.setCompilationContext(compilationContext); if(!parser.isEmpty()) for(DeclarationAst declaration : (ArrayList)parser.parseModule()) declarations.handle(declaration); @@ -56,21 +63,21 @@ public class SCLCompiler { } private boolean hasErrors() { - return !compilationContext.errorLog.isEmpty(); + return !compilationContext.errorLog.hasNoErrors(); } public void compile( EnvironmentFactory localEnvironmentFactory, - String moduleName, - JavaReferenceValidator javaReferenceValidator) { + String moduleName) { try { if(hasErrors()) return; Elaboration elaboration = new Elaboration(compilationContext, timer, localEnvironmentFactory, moduleName, + compilationContext.header, declarations.importsAst, - javaReferenceValidator, + jrvFactory, declarations.valueDefinitionsAst, declarations.relationDefinitionsAst); if(options.computeCoverage) @@ -80,7 +87,8 @@ public class SCLCompiler { elaboration.addTypesToEnvironment( declarations.dataTypesAst, declarations.typeAliasesAst, - declarations.effectsAst); + declarations.effectsAst, + declarations.rulesetsAst); if(hasErrors()) return; elaboration.processTypeAliases(declarations.typeAliasesAst); if(hasErrors()) return; @@ -94,6 +102,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); @@ -159,8 +169,11 @@ public class SCLCompiler { codeGeneration.externalConstants); module.setClasses(classes); + module.setParentClassLoader(elaboration.javaReferenceValidator.getClassLoader()); module.setModuleInitializer(moduleInitializer); module.setBranchPoints(elaboration.branchPoints); + if(compilationContext.errorLog.hasErrorsOrWarnings()) + module.setWarnings(compilationContext.errorLog.getErrors()); if(SCLCompilerConfiguration.ENABLE_TIMING) { phaseFinished("Code generation");