public void Output(string directoryName, string fileNameWithoutExtension, CompileStatus status) { StringBuilder output = new StringBuilder(); InitializeOutput(output); foreach(var nativeCodeSnippet in GlobalNativeCodeSnippets) { output.AppendLine(nativeCodeSnippet); } foreach (var clepsClass in ClassesLoaded) { GenerateClass(output, clepsClass.Value); } output.AppendLine(GlobalInitializer.GetMethodBodyWithoutDeclaration()); FunctionClepsType voidFuncType = new FunctionClepsType(new List<ClepsType>(), VoidClepsType.GetVoidType()); foreach (var clepsType in CompilerConstants.SystemSupportedTypes) { output.AppendFormat("{0}.{1}.{2}();\n", JavaScriptCodeParameters.TOPLEVELNAMESPACE, clepsType.GetClepsTypeString(), JavaScriptCodeParameters.GetMangledFunctionName("classStaticInitializer", voidFuncType)); } if (!String.IsNullOrWhiteSpace(EntryPointClass) && !String.IsNullOrWhiteSpace(EntryPointFunctionName)) { output.AppendFormat("{0}.{1}.{2}();\n", JavaScriptCodeParameters.TOPLEVELNAMESPACE, EntryPointClass, JavaScriptCodeParameters.GetMangledFunctionName("classStaticInitializer", voidFuncType)); output.AppendFormat("{0}.{1}.{2}();\n", JavaScriptCodeParameters.TOPLEVELNAMESPACE, EntryPointClass, JavaScriptCodeParameters.GetMangledFunctionName(EntryPointFunctionName, voidFuncType)); } var outputFileName = Path.Combine(directoryName, fileNameWithoutExtension + ".js"); File.WriteAllText(outputFileName, output.ToString()); }
public void Output(string directoryName, string fileNameWithoutExtension, CompileStatus status) { var outputFileName = Path.Combine(directoryName, fileNameWithoutExtension + ".js"); IntPtr llvmErrorMessagePtr; LLVMBool llvmFailure = LLVM.PrintModuleToFile(Module, outputFileName, out llvmErrorMessagePtr); string errorMessage = Marshal.PtrToStringAnsi(llvmErrorMessagePtr); LLVM.DisposeMessage(llvmErrorMessagePtr); if (llvmFailure) { status.AddError(new CompilerError(outputFileName, 0, 0, "Module Output failed : " + errorMessage)); } }
public CompileStatus CompileFiles() { ClassManager classManager = new ClassManager(); CompileStatus status = new CompileStatus(Args.ExitOnFirstError); ICodeGenerator codeGenerator = new JavaScriptCodeGenerator(); TypeManager typeManager = new TypeManager(); EntryPointManager entryPointManager = new EntryPointManager(status, Args.EntryPointClass); try { codeGenerator.Initiate(); { ClepsClassNamesCollectorVisitor classSkeletonGenerator = new ClepsClassNamesCollectorVisitor(status, classManager, codeGenerator); ParseFilesWithGenerator(classSkeletonGenerator, status); } { ClepsMemberGeneratorVisitor memberGenerator = new ClepsMemberGeneratorVisitor(status, classManager, codeGenerator, entryPointManager); ParseFilesWithGenerator(memberGenerator, status); } { ClepsFunctionBodyGeneratorVisitor functionBodyGenerator = new ClepsFunctionBodyGeneratorVisitor(status, classManager, codeGenerator, typeManager); ParseFilesWithGenerator(functionBodyGenerator, status); } string entryClassName = entryPointManager.GetChosenEntryPointOrNull(); if (!String.IsNullOrWhiteSpace(entryClassName)) { codeGenerator.AddEntryPoint(entryClassName, EntryPointManager.EntryPointName); } codeGenerator.Output(Args.OutputDirectory, Args.OutputFileName, status); } catch (CompilerLogException) { //Supress compiler errors } finally { codeGenerator.Close(); } return status; }
private void ParseFilesWithGenerator(ClepsAbstractVisitor generator, CompileStatus status) { foreach (string fileName in Args.Files) { LexerParserErrorHandler lexerParserErrorHandler = new LexerParserErrorHandler(fileName, status); var data = File.ReadAllText(fileName); AntlrInputStream s = new AntlrInputStream(data); ClepsLexer lexer = new ClepsLexer(s); CommonTokenStream tokens = new CommonTokenStream(lexer); ClepsParser parser = new ClepsParser(tokens); parser.RemoveErrorListeners(); parser.AddErrorListener(lexerParserErrorHandler); var parsedFile = parser.compilationUnit(); generator.ParseFile(fileName, parsedFile); } }
public CompileStatus CompileFiles() { ClassManager classManager = new ClassManager(); CompileStatus status = new CompileStatus(Args.ExitOnFirstError); ICodeGenerator codeGenerator = new JavaScriptCodeGenerator(); TypeManager typeManager = new TypeManager(); FunctionOverloadManager functionOverloadManager = new FunctionOverloadManager(); try { codeGenerator.Initiate(); { ClepsClassNamesCollectorVisitor classSkeletonGenerator = new ClepsClassNamesCollectorVisitor(status, classManager, codeGenerator); ParseFilesWithGenerator(classSkeletonGenerator, status); } { ClepsMemberGeneratorVisitor memberGenerator = new ClepsMemberGeneratorVisitor(status, classManager, codeGenerator); ParseFilesWithGenerator(memberGenerator, status); } //{ // ClepsCodeAnalysisGeneratorParser codeAnalysisGenerator = new ClepsCodeAnalysisGeneratorParser(status, classManager, codeGenerator); // ParseFilesWithGenerator(codeAnalysisGenerator, status); //} { ClepsFunctionBodyGeneratorVisitor functionBodyGenerator = new ClepsFunctionBodyGeneratorVisitor(status, classManager, codeGenerator, typeManager, functionOverloadManager); ParseFilesWithGenerator(functionBodyGenerator, status); } codeGenerator.Output(Args.OutputDirectory, Args.OutputFileName, status); } catch (CompilerErrorException) { //Supress compiler errors } finally { codeGenerator.Close(); } return status; }
public ClepsMemberGeneratorVisitor(CompileStatus status, ClassManager classManager, ICodeGenerator codeGenerator, EntryPointManager entryPointManager) : base(status, classManager, codeGenerator) { EntryPointManager = entryPointManager; }
public ClepsMemberGeneratorVisitor(CompileStatus status, ClassManager classManager, ICodeGenerator codeGenerator) : base(status, classManager, codeGenerator){ }
public void Output(string directoryName, string fileNameWithoutExtension, CompileStatus status) { //the static initializer function has an if statement created so that the initializer runs once. Closing this if block ClassStaticInitializers.Values.ToList().ForEach(m => m.CloseBlock()); var outputter = new JavaScriptCodeOutputter(ClassesLoaded, ClassInitializers, ClassStaticInitializers, GlobalInitializer, EntryPointClass, EntryPointFunctionName, GlobalNativeCodeSnippets); outputter.Output(directoryName, fileNameWithoutExtension, status); }
public EntryPointManager(CompileStatus status, string specifiedEntryPointClass = null) { Status = status; SpecifiedEntryPointClass = specifiedEntryPointClass; }
public LexerParserErrorHandler(string fileName, CompileStatus compileStatus) { FileName = fileName; CompileStatus = compileStatus; }
public ClepsClassNamesCollectorVisitor(CompileStatus status, ClassManager classManager, ICodeGenerator codeGenerator) : base(status, classManager, codeGenerator){}
public ClepsFunctionBodyGeneratorVisitor(CompileStatus status, ClassManager classManager, ICodeGenerator codeGenerator, TypeManager typeManager, FunctionOverloadManager functionOverloadManager) : base(status, classManager, codeGenerator) { TypeManager = typeManager; FunctionOverloadManager = functionOverloadManager; }
public ClepsFunctionBodyAnalysisVisitor_Partial(CompileStatus status, ClassManager classManager, ICodeGenerator codeGenerator) : base(status, classManager, codeGenerator){ }
public void Output(string directoryName, string fileNameWithoutExtension, CompileStatus status) { StringBuilder output = new StringBuilder(); InitializeOutput(output); foreach(var clepsClass in classesLoaded) { GenerateClass(output, clepsClass.Value); } var outputFileName = Path.Combine(directoryName, fileNameWithoutExtension + ".js"); File.WriteAllText(outputFileName, output.ToString()); }