public override void Visit(ITryBlock block, UsageContext context)
        {
            foreach (var statement in block.Body)
            {
                statement.Accept(this, context);
            }
            foreach (var catchBlock in block.CatchBlocks)
            {
                context.EnterNewScope();

                var id   = catchBlock.Parameter.Name;
                var type = catchBlock.Parameter.ValueType;
                var def  = DefinitionSites.CreateUnknownDefinitionSite();
                context.DefineVariable(id, type, def);

                foreach (var statement in catchBlock.Body)
                {
                    statement.Accept(this, context);
                }

                context.LeaveCurrentScope();
            }
            foreach (var statement in block.Finally)
            {
                statement.Accept(this, context);
            }
        }
        public void Visit(ITryBlock block, SSTPrintingContext c)
        {
            c.Indentation().Keyword("try")
            .StatementBlock(block.Body, this);

            foreach (var catchBlock in block.CatchBlocks)
            {
                c.NewLine().Indentation().Keyword("catch");

                if (catchBlock.Kind != CatchBlockKind.General)
                {
                    c.Space().Text("(")
                    .Type(catchBlock.Parameter.ValueType);

                    if (catchBlock.Kind != CatchBlockKind.Unnamed)
                    {
                        c.Space()
                        .Text(catchBlock.Parameter.Name);
                    }

                    c.Text(")");
                }

                c.StatementBlock(catchBlock.Body, this);
            }

            if (block.Finally.Any())
            {
                c.NewLine().Indentation().Keyword("finally")
                .StatementBlock(block.Finally, this);
            }
        }
示例#3
0
 public virtual void Visit(ITryBlock block, TContext context)
 {
     Visit(block.Body, context);
     foreach (var catchBlock in block.CatchBlocks)
     {
         Visit(catchBlock.Body, context);
     }
     Visit(block.Finally, context);
 }
示例#4
0
 public override IStatement Visit(ITryBlock stmt, int context)
 {
     return(new TryBlock
     {
         Body = Anonymize(stmt.Body),
         CatchBlocks = Anonymize(stmt.CatchBlocks),
         Finally = Anonymize(stmt.Finally)
     });
 }
 public override void Visit(ITryBlock block, RelativeEditLocation loc)
 {
     loc.Size++;
     Visit(block.Body, loc);
     foreach (var catchBlock in block.CatchBlocks)
     {
         Visit(catchBlock.Body, loc);
     }
     Visit(block.Finally, loc);
 }
示例#6
0
        public int Visit(ITryBlock block, int context)
        {
            var size = 1;

            size += Visit(block.Body, 0);
            foreach (var c in block.CatchBlocks)
            {
                size += Visit(c.Body, 0);
            }
            return(size);
        }