private static async Task <BuildData> Compile( BuildContext buildContext, ResourceDatabase resDb, WaxHub waxHub) { CompileRequest cr = new CompileRequest(buildContext, waxHub.SourceRoot); InternalCompilationBundle icb = await Compiler.Compile(cr, waxHub); // TODO: the CBX Bundle should be constructed directly from a Dictionary in this result. Dictionary <string, object> resultRaw = ActualCompilation(icb); List <Error> errors = new List <Error>(); string[] errorsRaw = (string[])resultRaw["errors"]; for (int i = 0; i < errorsRaw.Length; i += 4) { Error err = new Error() { FileName = errorsRaw[i], Line = int.Parse(errorsRaw[i + 1]), Column = int.Parse(errorsRaw[i + 2]), Message = errorsRaw[i + 3], }; errors.Add(err); } if (errors.Count > 0) { return new BuildData() { Errors = errors.ToArray() } } ; BuildData buildData = new BuildData() { UsesU3 = (bool)resultRaw["usesU3"], DependencyTreeJson = resultRaw.ContainsKey("depTree") ? (string)resultRaw["depTree"] : null, CbxBundle = new CbxBundle() { ByteCode = (string)resultRaw["byteCode"], ResourceDB = resDb, }, ProjectID = buildContext.ProjectID, }; return(buildData); }
public static async Task <InternalCompilationBundle> Compile(CompileRequest compileRequest, WaxHub waxHub) { InternalCompilationBundle result; if (waxHub.ErrorsAsExceptions) { result = await CompileImpl(compileRequest, waxHub); } else { try { result = await CompileImpl(compileRequest, waxHub); } catch (MultiParserException multiException) { result = new InternalCompilationBundle() { Errors = multiException.ToCompilerErrors(), }; } catch (ParserException exception) { result = new InternalCompilationBundle() { Errors = new Error[] { exception.ToCompilerError() }, }; } catch (System.InvalidOperationException exception) { result = new InternalCompilationBundle() { Errors = new Error[] { new Error() { Message = exception.Message } }, }; } } return(result); }