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;
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")
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);
}
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,
+ ModuleHeader.process(compilationContext.errorLog, declarations.moduleHeader),
declarations.importsAst,
- javaReferenceValidator,
+ jrvFactory,
declarations.valueDefinitionsAst,
declarations.relationDefinitionsAst);
if(options.computeCoverage)
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");