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=27583ea53b30e25df56ff6e3b73caf7cf1901b65;hp=b5bd4ef312c997038e5856164d2ef34dfbe69cb7;hb=a8758de5bc19e5adb3f618d3038743a164f09912;hpb=12d9af17384d960b75d58c3935d2b7b46d93e87b 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 b5bd4ef31..27583ea53 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 @@ -18,8 +18,8 @@ import org.simantics.scl.compiler.top.SCLCompilerConfiguration; import org.simantics.scl.compiler.top.StandardModuleInitializer; public class SCLCompiler { - ErrorLog errorLog = new ErrorLog(); - DeclarationClassification declarations = new DeclarationClassification(errorLog); + CompilationContext compilationContext = new CompilationContext(); + DeclarationClassification declarations = new DeclarationClassification(compilationContext); // publishable results Map classes; @@ -42,9 +42,9 @@ public class SCLCompiler { for(DeclarationAst declaration : (ArrayList)parser.parseModule()) declarations.handle(declaration); } catch(SCLSyntaxErrorException e) { - errorLog.log(e.location, e.getMessage()); + compilationContext.errorLog.log(e.location, e.getMessage()); } catch(Exception e) { - errorLog.log(e); + compilationContext.errorLog.log(e); } finally { try { sourceReader.close(); @@ -55,13 +55,17 @@ public class SCLCompiler { if(SCLCompilerConfiguration.ENABLE_TIMING) phaseFinished("Parsing"); } + private boolean hasErrors() { + return !compilationContext.errorLog.isEmpty(); + } + public void compile( EnvironmentFactory localEnvironmentFactory, String moduleName, JavaReferenceValidator javaReferenceValidator) { try { - if(!errorLog.isEmpty()) return; - Elaboration elaboration = new Elaboration(errorLog, + if(hasErrors()) return; + Elaboration elaboration = new Elaboration(compilationContext, timer, localEnvironmentFactory, moduleName, @@ -72,24 +76,24 @@ public class SCLCompiler { if(options.computeCoverage) elaboration.addCoverageBranchPoints(); // Elaboration - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; elaboration.addTypesToEnvironment( declarations.dataTypesAst, declarations.typeAliasesAst, declarations.effectsAst); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; elaboration.processTypeAliases(declarations.typeAliasesAst); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; elaboration.processDataTypes(declarations.dataTypesAst); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; elaboration.processTypeClasses(declarations.typeClassesAst); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; elaboration.processDerivingInstances(declarations.derivingInstancesAst, declarations.instancesAst); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; elaboration.processInstances(declarations.instancesAst); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; elaboration.processJavaMethods(declarations.javaMethodDeclarations); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; elaboration.addDataTypesToEnvironment(); elaboration.addTypeClassesToEnvironment(); elaboration.preprocessValueDefinitions(declarations.typeAnnotationsAst); @@ -101,9 +105,9 @@ public class SCLCompiler { if(SCLCompilerConfiguration.ENABLE_TIMING) phaseFinished("Elaboration"); // Type checking - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; //new TypeChecking(errorLog, elaboration.environment, elaboration.module).typeCheck(); - new TypeChecking(errorLog, elaboration.environment, elaboration.module).typeCheck(); + new TypeChecking(compilationContext, elaboration.module).typeCheck(); if(SCLCompilerConfiguration.ENABLE_TIMING) phaseFinished("Type checking"); @@ -125,36 +129,33 @@ public class SCLCompiler { this.declarations = null; // Code generation - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; CodeGeneration codeGeneration = new CodeGeneration( - errorLog, - elaboration.environment, - elaboration.namingPolicy, - elaboration.javaTypeTranslator, + compilationContext, elaboration.javaReferenceValidator, elaboration.module); codeGeneration.simplifyValues(); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; codeGeneration.convertToSSA(); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; codeGeneration.optimizeSSA(); if(SCLCompilerConfiguration.ENABLE_TIMING) phaseFinished("SSA conversion and optimization"); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; codeGeneration.generateCode(); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; codeGeneration.generateDataTypes(elaboration.dataTypes); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; codeGeneration.generateTypeClasses(); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; codeGeneration.generateTypeClassInstances(); - if(!errorLog.isEmpty()) return; + if(hasErrors()) return; classes = codeGeneration.classes; module = codeGeneration.module; moduleInitializer = StandardModuleInitializer.create( - codeGeneration.namingPolicy.getModuleClassName(), + compilationContext.namingPolicy.getModuleClassName(), codeGeneration.externalConstants); module.setClasses(classes); @@ -166,12 +167,12 @@ public class SCLCompiler { reportTiming(moduleName); } } catch(Exception e) { - errorLog.log(e); + compilationContext.errorLog.log(e); } } public ErrorLog getErrorLog() { - return errorLog; + return compilationContext.errorLog; } public Map getClasses() {