]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/SCLCompiler.java
Added module header feature to SCL language.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / compilation / SCLCompiler.java
index 29136b60935662d0e57bf91534959dfa4b9e7bf7..65e89edf1bc7c26fb4e8c1563083647b6d1cf231 100644 (file)
@@ -8,9 +8,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 +32,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 +44,7 @@ public class SCLCompiler {
         if(SCLCompilerConfiguration.ENABLE_TIMING) initializeTiming();
         try {
             SCLParserImpl parser = new SCLParserImpl(sourceReader);
+            parser.setParserOptions(SCLParserOptions.MODULE_DEFAULT);
             if(!parser.isEmpty())
             for(DeclarationAst declaration : (ArrayList<DeclarationAst>)parser.parseModule())
                 declarations.handle(declaration);
@@ -61,16 +68,16 @@ public class SCLCompiler {
     
     public void compile(
             EnvironmentFactory localEnvironmentFactory,
-            String moduleName,
-            JavaReferenceValidator<?, ?, ?, ?> javaReferenceValidator) {
+            String moduleName) {
         try {
             if(hasErrors()) return;
             Elaboration elaboration = new Elaboration(compilationContext,
                     timer,
                     localEnvironmentFactory,
                     moduleName,
+                    ModuleHeader.process(compilationContext.errorLog, declarations.moduleHeader),
                     declarations.importsAst,
-                    javaReferenceValidator,
+                    jrvFactory,
                     declarations.valueDefinitionsAst,
                     declarations.relationDefinitionsAst);
             if(options.computeCoverage)
@@ -159,6 +166,7 @@ public class SCLCompiler {
                     codeGeneration.externalConstants);
             
             module.setClasses(classes);
+            module.setParentClassLoader(elaboration.javaReferenceValidator.getClassLoader());
             module.setModuleInitializer(moduleInitializer);
             module.setBranchPoints(elaboration.branchPoints);
             if(compilationContext.errorLog.hasErrorsOrWarnings())