예제 #1
0
파일: Extension.cs 프로젝트: mpmedia/Excess
        private static SyntaxNode Compound(RParser.CompoundContext compound, Func<ParserRuleContext, Scope, SyntaxNode> transform, Scope scope)
        {
            //create a new context for the block
            var inner = new Scope(scope);
            inner.InitR();

            var pre = inner.PreStatements();
            var statements = new List<StatementSyntax>();
            var exprlist = compound.exprlist();
            if (exprlist is RParser.ExpressionListContext)
            {
                var list = exprlist as RParser.ExpressionListContext;
                foreach (var expr in list.expr_or_assign())
                {
                    pre.Clear();
                    var statement = transform(expr, inner) as StatementSyntax;
                    Debug.Assert(statement != null);

                    statements.AddRange(pre);
                    statements.Add(statement);
                }
            }

            return CSharp.Block(statements);
        }