コード例 #1
0
ファイル: Compiler.cs プロジェクト: timgurke/Scriber
        private static void Execute(CompilerState state, Element element)
        {
            if (BlockElement(element))
            {
                state.Blocks.Push();
            }

            foreach (var inline in element.Children)
            {
                Execute(state, inline);
            }

            var obj = state.Execute(element, state.Blocks.Current.Objects.ToArray());

            if (BlockElement(element))
            {
                state.Blocks.Pop();
            }

            if (obj != null)
            {
                // basically pass the returned object to the previous environment
                var flattened = obj.Flatten();
                if (IsEnvironmentArgument(element))
                {
                    flattened = new Argument[] { new Argument(element, flattened) };
                }
                state.Blocks.Current.Objects.AddRange(flattened);
            }
        }
コード例 #2
0
        private static IEnumerable <DocumentElement> Execute(CompilerState state, SyntaxNode element)
        {
            var obj = state.Execute(element);

            var elements = new List <DocumentElement>();

            if (obj != null)
            {
                var flattened = obj.Flatten();
                return(flattened.Select(e => e.Value).OfType <DocumentElement>());
            }
            else
            {
                return(Array.Empty <DocumentElement>());
            }
        }