Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }