示例#1
0
            public override void VisitReturn(BoundReturn node)
            {
                base.VisitReturn(node);

                JoinOnBlock(null, JoinType.Return);
            }
示例#2
0
 public virtual void VisitReturn(BoundReturn node)
 {
     DefaultVisit(node);
 }
示例#3
0
        private void EmitReturn(BoundReturn node)
        {
            var expression = node.Expression ?? new BoundGetVariable(BoundMagicVariable.Undefined);

            EmitBox(EmitExpression(expression));

            if (_scope.InTryCatch)
            {
                var exceptionalReturn = _scope.GetExceptionalReturn();

                IL.Emit(OpCodes.Stloc, exceptionalReturn.Local);
                IL.Emit(OpCodes.Leave, exceptionalReturn.Label);
            }
            else
            {
                IL.Emit(OpCodes.Ret);
            }
        }