Exemplo n.º 1
0
        public bool Render()
        {
            if (rendered)
            {
                return(result.Succeeded);
            }

            rendered = true;
            var        configStack = new Stack <Configuration>();
            AST <Node> simplNode;

            if (!Compiler.TryGetReducedForm(sourceModule, out simplNode))
            {
                simplNode = sourceModule;
            }

            var resNode = simplNode.Compute <Node>(
                (node) =>
            {
                return(RenderUnfold(node, configStack));
            },
                (node, folds) =>
            {
                return(RenderFold(node, folds, configStack));
            },
                cancel);

            if (cancel.IsCancellationRequested)
            {
                var flag = new Flag(
                    SeverityKind.Error,
                    sourceModule.Node,
                    Constants.QuotationError.ToString("Cancelled rendering"),
                    Constants.QuotationError.Code);
                result.AddFlag(flag);
            }

            if (result.Succeeded)
            {
                result.Module = Factory.Instance.ToAST(resNode);
            }

            return(result.Succeeded);
        }