public void compileSourceCode(string sourceCode) { if (sourceCode.valid().isFalse()) { "in CSharp_FastCompiler,compileSourceCode, provided sourceCode code was empty".error(); this.raise_OnCompileFail(); } else { if (getCachedAssemblyForCode_and_RaiseEvents(sourceCode)) { return; } // we need to do make sure we include any extra references included in the code var astCSharp = new Ast_CSharp(sourceCode); astCSharp.mapCodeO2References(CompilerOptions); compileSourceCode(sourceCode, false); } }
/// /// <summary> /// Returns a compilable C# file from and Snippet /// /// Dev Note:this code needs to be refactored (since it is too big and complex) /// </summary> /// <param name="code"></param> /// <returns></returns> public string tryToCreateCSharpCodeWith_Class_Method_WithMethodText(string code) { if (code.empty()) { return(null); } code = code.line(); // make sure there is an empty line at the end try { //handle special incudes in source code var lines = code.fix_CRLF().lines(); foreach (var originalLine in lines) { var line = originalLine; if (originalLine.starts("//O2Include:")) { var includeText = line.subString_After("//O2Include:"); var file = includeText; var baseFile = CompilerOptions.SourceCodeFile ?? PublicDI.CurrentScript; var parentFolder = baseFile.parentFolder(); if (parentFolder.notValid()) { "[CSharpFastCompiled] in O2Include mapping, could not get parent folder of current script".error(); } var resolvedFile = CompileEngine.findFileOnLocalScriptFolder(file, parentFolder); if (resolvedFile.fileExists()) { var fileContents = resolvedFile.contents(); code = code.Replace(line, line.line().add(fileContents).line()); } else { "[CSharpFastCompiled] in O2Include mapping, could not a mapping for: {0}".error(includeText); } } ; } var snippetParser = new SnippetParser(SupportedLanguage.CSharp); var parsedCode = snippetParser.Parse(code); this.astErrors(snippetParser.errors()); this.compilationUnit(new CompilationUnit()); if (parsedCode is BlockStatement || parsedCode is CompilationUnit) { Ast_CSharp astCSharp; if (parsedCode is BlockStatement) { // map parsedCode into a new type and method var blockStatement = (BlockStatement)parsedCode; var csharpCode = blockStatement.ast_CSharp_CreateCompilableClass(snippetParser, code, CompilerOptions, CompilerArtifacts, ExecutionOptions); this.astDetails(new Ast_CSharp(csharpCode).AstDetails); this.createdFromSnippet(true); DebugMode.ifDebug("Ast parsing was OK"); this.sourceCode(csharpCode); this.raise_OnAstOK(); return(csharpCode); } this.compilationUnit((CompilationUnit)parsedCode); if (this.compilationUnit().Children.Count == 0) { return(null); } astCSharp = new Ast_CSharp(this.compilationUnit(), snippetParser.Specials); // add the comments from the original code astCSharp.mapCodeO2References(CompilerOptions); this.createdFromSnippet(false); // create sourceCode using Ast_CSharp & AstDetails if (this.compilationUnit().Children.Count > 0) { // reset the astCSharp.AstDetails object astCSharp.mapAstDetails(); // add the comments from the original code astCSharp.ExtraSpecials.AddRange(snippetParser.Specials); this.sourceCode(astCSharp.AstDetails.CSharpCode); //once we have the created SourceCode we need to create a new AST with it var tempAstDetails = new Ast_CSharp(this.sourceCode()).AstDetails; //note we should try to add back the specials here (so that comments make it to the generated code this.astDetails(tempAstDetails); DebugMode.ifDebug("Ast parsing was OK"); this.raise_OnAstOK(); return(this.sourceCode()); } } } catch (Exception ex) { DebugMode.ifError("in createCSharpCodeWith_Class_Method_WithMethodText:{0}", ex.Message); } return(null); }