• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C# SwitchSection类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C#中SwitchSection的典型用法代码示例。如果您正苦于以下问题:C# SwitchSection类的具体用法?C# SwitchSection怎么用?C# SwitchSection使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



SwitchSection类属于命名空间,在下文中一共展示了SwitchSection类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。

示例1: SwitchBlock

 public SwitchBlock(IEmitter emitter, SwitchSection switchSection, string varName, bool isFirst, bool isEnd)
     : base(emitter, switchSection)
 {
     this.Emitter = emitter;
     this.SwitchSection = switchSection;
     varName_ = varName;
     isFirst_ = isFirst;
     isEnd_ = isEnd;
 }
开发者ID:yindongfei,项目名称:bridge.lua,代码行数:9,代码来源:SwitchBlock.cs


示例2: VisitSwitchSection

            public override object VisitSwitchSection(SwitchSection switchSection, object data)
            {
                if(switchSection.CaseLabels.Any(a => a.Expression.IsNull))
                {
                    UnlockWith(switchSection);
                }

                return base.VisitSwitchSection(switchSection, data);
            }
开发者ID:vlad2135,项目名称:strokes,代码行数:9,代码来源:DefaultCaseInSwitchAchievement.cs


示例3: VisitSwitchSection

			public override void VisitSwitchSection (SwitchSection switchSection)
			{
				base.VisitSwitchSection (switchSection);

				if (switchSection.CaseLabels.Count <2)
					return;

				var lastLabel = switchSection.CaseLabels.LastOrNullObject ();
				if (!lastLabel.Expression.IsNull)
					return;
				AddIssue (switchSection.FirstChild.StartLocation, lastLabel.StartLocation,
					ctx.TranslateString ("Remove redundant 'case' label"), scipt => {
						foreach (var label in switchSection.CaseLabels) {
							if (label != lastLabel)
								scipt.Remove (label);
						}
					});
			}
开发者ID:Gobiner,项目名称:ILSpy,代码行数:18,代码来源:RedundantCaseLabelIssue.cs


示例4: SwitchStatement

 public SwitchStatement(
     Exp expTest,
     SwitchSection [] sections
 )
 {
     m_expTest = expTest;
     m_sections = sections;
     
     m_proxy = null;
 }
开发者ID:chenzuo,项目名称:blue,代码行数:10,代码来源:StatementAST.cs


示例5: VisitSwitchSection

		public virtual void VisitSwitchSection (SwitchSection switchSection)
		{
			VisitChildren (switchSection);
		}
开发者ID:modulexcite,项目名称:ICSharpCode.Decompiler-retired,代码行数:4,代码来源:DepthFirstAstVisitor.cs


示例6: Visit

			public override object Visit (Switch switchStatement)
			{
				var result = new SwitchStatement ();
				
				var location = LocationsBag.GetLocations (switchStatement);
				result.AddChild (new CSharpTokenNode (Convert (switchStatement.loc), SwitchStatement.SwitchKeywordRole), SwitchStatement.SwitchKeywordRole);
				if (location != null)
					result.AddChild (new CSharpTokenNode (Convert (location [0]), Roles.LPar), Roles.LPar);
				if (switchStatement.Expr != null)
					result.AddChild ((Expression)switchStatement.Expr.Accept (this), Roles.Expression);
				if (location != null && location.Count > 1)
					result.AddChild (new CSharpTokenNode (Convert (location [1]), Roles.RPar), Roles.RPar);
				if (location != null && location.Count > 2)
					result.AddChild (new CSharpTokenNode (Convert (location [2]), Roles.LBrace), Roles.LBrace);
				if (switchStatement.Sections != null) {
					foreach (var section in switchStatement.Sections) {
						var newSection = new SwitchSection ();
						if (section.Labels != null) {
							foreach (var caseLabel in section.Labels) {
								var newLabel = new CaseLabel ();
								if (caseLabel.Label != null) {
									newLabel.AddChild (new CSharpTokenNode (Convert (caseLabel.Location), CaseLabel.CaseKeywordRole), CaseLabel.CaseKeywordRole);
									if (caseLabel.Label != null)
										newLabel.AddChild ((Expression)caseLabel.Label.Accept (this), Roles.Expression);
									var colonLocation = LocationsBag.GetLocations (caseLabel);
									if (colonLocation != null)
										newLabel.AddChild (new CSharpTokenNode (Convert (colonLocation [0]), Roles.Colon), Roles.Colon);
								} else {
									newLabel.AddChild (new CSharpTokenNode (Convert (caseLabel.Location), CaseLabel.DefaultKeywordRole), CaseLabel.DefaultKeywordRole);
									newLabel.AddChild (new CSharpTokenNode (new TextLocation (caseLabel.Location.Row, caseLabel.Location.Column + "default".Length), Roles.Colon), Roles.Colon);
								}
								newSection.AddChild (newLabel, SwitchSection.CaseLabelRole);
							}
						}
						
						var blockStatement = section.Block;
						var bodyBlock = new BlockStatement ();
						int curLocal = 0;
						AddBlockChildren (bodyBlock, blockStatement, ref curLocal);
						foreach (var statement in bodyBlock.Statements) {
							statement.Remove ();
							newSection.AddChild (statement, Roles.EmbeddedStatement);
							
						}
						result.AddChild (newSection, SwitchStatement.SwitchSectionRole);
					}
				}
				
				if (location != null && location.Count > 3) {
					result.AddChild (new CSharpTokenNode (Convert (location [3]), Roles.RBrace), Roles.RBrace);
				} else {
					// parser error, set end node to max value.
					result.AddChild (new ErrorNode (), Roles.Error);
				}
				
				return result;
			}
开发者ID:RainsSoft,项目名称:playscript-monodevelop,代码行数:57,代码来源:CSharpParser.cs


示例7: VisitSwitchSection

 public virtual void VisitSwitchSection(SwitchSection switchSection)
 {
     if (this.ThrowException)
     {
         throw (Exception)this.CreateException(switchSection);
     }
 }
开发者ID:fabriciomurta,项目名称:BridgeUnified,代码行数:7,代码来源:Visitor.Exception.cs


示例8: VisitSwitchSection

		public override object VisitSwitchSection(SwitchSection switchSection, object data)
		{
			if (language == SupportedLanguage.VBNet) {
				return VisitBlockStatement(switchSection, data);
			} else {
				return base.VisitSwitchSection(switchSection, data);
			}
		}
开发者ID:mgagne-atman,项目名称:Projects,代码行数:8,代码来源:LookupTableVisitor.cs


示例9: TransformNode

		IEnumerable<Statement> TransformNode(ILNode node)
		{
			if (node is ILLabel) {
				yield return new Ast.LabelStatement { Label = ((ILLabel)node).Name }.WithAnnotation(node.ILRanges);
			} else if (node is ILExpression) {
				AstNode codeExpr = TransformExpression((ILExpression)node);
				if (codeExpr != null) {
					if (codeExpr is Ast.Expression) {
						yield return new Ast.ExpressionStatement { Expression = (Ast.Expression)codeExpr };
					} else if (codeExpr is Ast.Statement) {
						yield return (Ast.Statement)codeExpr;
					} else {
						throw new Exception();
					}
				}
			} else if (node is ILWhileLoop) {
				ILWhileLoop ilLoop = (ILWhileLoop)node;
				Expression expr;
				WhileStatement whileStmt = new WhileStatement() {
					Condition = expr = ilLoop.Condition != null ? (Expression)TransformExpression(ilLoop.Condition) : new PrimitiveExpression(true),
					EmbeddedStatement = TransformBlock(ilLoop.BodyBlock)
				};
				expr.AddAnnotation(ilLoop.ILRanges);
				yield return whileStmt;
			} else if (node is ILCondition) {
				ILCondition conditionalNode = (ILCondition)node;
				bool hasFalseBlock = conditionalNode.FalseBlock.EntryGoto != null || conditionalNode.FalseBlock.Body.Count > 0;
				BlockStatement trueStmt;
				var ifElseStmt = new Ast.IfElseStatement {
					Condition = (Expression)TransformExpression(conditionalNode.Condition),
					TrueStatement = trueStmt = TransformBlock(conditionalNode.TrueBlock),
					FalseStatement = hasFalseBlock ? TransformBlock(conditionalNode.FalseBlock) : null
				};
				ifElseStmt.Condition.AddAnnotation(conditionalNode.ILRanges);
				if (ifElseStmt.FalseStatement == null)
					trueStmt.HiddenEnd = NRefactoryExtensions.CreateHidden(conditionalNode.FalseBlock.GetSelfAndChildrenRecursiveILRanges(), trueStmt.HiddenEnd);
				yield return ifElseStmt;
			} else if (node is ILSwitch) {
				ILSwitch ilSwitch = (ILSwitch)node;
				if (ilSwitch.Condition.InferredType.GetElementType() == ElementType.Boolean && (
					from cb in ilSwitch.CaseBlocks
					where cb.Values != null
					from val in cb.Values
					select val
				).Any(val => val != 0 && val != 1))
				{
					// If switch cases contain values other then 0 and 1, force the condition to be non-boolean
					ilSwitch.Condition.ExpectedType = corLib.Int32;
				}
				SwitchStatement switchStmt = new SwitchStatement() { Expression = (Expression)TransformExpression(ilSwitch.Condition) };
				switchStmt.Expression.AddAnnotation(ilSwitch.ILRanges);
				switchStmt.HiddenEnd = NRefactoryExtensions.CreateHidden(ilSwitch.EndILRanges, switchStmt.HiddenEnd);
				foreach (var caseBlock in ilSwitch.CaseBlocks) {
					SwitchSection section = new SwitchSection();
					if (caseBlock.Values != null) {
						section.CaseLabels.AddRange(caseBlock.Values.Select(i => new CaseLabel() { Expression = AstBuilder.MakePrimitive(i, (ilSwitch.Condition.ExpectedType ?? ilSwitch.Condition.InferredType).ToTypeDefOrRef()) }));
					} else {
						section.CaseLabels.Add(new CaseLabel());
					}
					section.Statements.Add(TransformBlock(caseBlock));
					switchStmt.SwitchSections.Add(section);
				}
				yield return switchStmt;
			} else if (node is ILTryCatchBlock) {
				ILTryCatchBlock tryCatchNode = ((ILTryCatchBlock)node);
				var tryCatchStmt = new Ast.TryCatchStatement();
				tryCatchStmt.TryBlock = TransformBlock(tryCatchNode.TryBlock);
				tryCatchStmt.TryBlock.HiddenStart = NRefactoryExtensions.CreateHidden(tryCatchNode.ILRanges, tryCatchStmt.TryBlock.HiddenStart);
				foreach (var catchClause in tryCatchNode.CatchBlocks) {
					if (catchClause.ExceptionVariable == null
					    && (catchClause.ExceptionType == null || catchClause.ExceptionType.GetElementType() == ElementType.Object))
					{
						tryCatchStmt.CatchClauses.Add(new Ast.CatchClause { Body = TransformBlock(catchClause) }.WithAnnotation(catchClause.StlocILRanges));
					} else {
						tryCatchStmt.CatchClauses.Add(
							new Ast.CatchClause {
								Type = AstBuilder.ConvertType(catchClause.ExceptionType),
								VariableNameToken = catchClause.ExceptionVariable == null ? null : Identifier.Create(catchClause.ExceptionVariable.Name).WithAnnotation(catchClause.ExceptionVariable.IsParameter ? TextTokenType.Parameter : TextTokenType.Local),
								Body = TransformBlock(catchClause)
							}.WithAnnotation(catchClause.ExceptionVariable).WithAnnotation(catchClause.StlocILRanges));
					}
				}
				if (tryCatchNode.FinallyBlock != null)
					tryCatchStmt.FinallyBlock = TransformBlock(tryCatchNode.FinallyBlock);
				if (tryCatchNode.FaultBlock != null) {
					CatchClause cc = new CatchClause();
					cc.Body = TransformBlock(tryCatchNode.FaultBlock);
					cc.Body.Add(new ThrowStatement()); // rethrow
					tryCatchStmt.CatchClauses.Add(cc);
				}
				yield return tryCatchStmt;
			} else if (node is ILFixedStatement) {
				ILFixedStatement fixedNode = (ILFixedStatement)node;
				FixedStatement fixedStatement = new FixedStatement();
				for (int i = 0; i < fixedNode.Initializers.Count; i++) {
					var initializer = fixedNode.Initializers[i];
					Debug.Assert(initializer.Code == ILCode.Stloc);
					ILVariable v = (ILVariable)initializer.Operand;
					VariableInitializer vi;
					fixedStatement.Variables.Add(vi =
//.........这里部分代码省略.........
开发者ID:nakijun,项目名称:dnSpy,代码行数:101,代码来源:AstMethodBodyBuilder.cs


示例10: VisitSwitchSection

		public override object VisitSwitchSection(SwitchSection switchSection, object data)
		{
			// Check if a 'break' should be auto inserted.
			if (switchSection.Children.Count == 0 ||
			    !(switchSection.Children[switchSection.Children.Count - 1] is BreakStatement ||
			      switchSection.Children[switchSection.Children.Count - 1] is ContinueStatement ||
			      switchSection.Children[switchSection.Children.Count - 1] is ThrowStatement ||
			      switchSection.Children[switchSection.Children.Count - 1] is ReturnStatement))
			{
				switchSection.Children.Add(new BreakStatement());
			}
			return base.VisitSwitchSection(switchSection, data);
		}
开发者ID:mgagne-atman,项目名称:Projects,代码行数:13,代码来源:ToCSharpConvertVisitor.cs


示例11: EmbeddedStatement


//.........这里部分代码省略.........
				
			} else if (StartOf(39)) {

#line  2966 "VBNET.ATG" 
				IfElseStatement ifStatement = new IfElseStatement(expr);
				ifStatement.StartLocation = ifStartLocation;
				
				SingleLineStatementList(
#line  2969 "VBNET.ATG" 
ifStatement.TrueStatement);
				if (la.kind == 98) {
					lexer.NextToken();
					if (StartOf(39)) {
						SingleLineStatementList(
#line  2972 "VBNET.ATG" 
ifStatement.FalseStatement);
					}
				}

#line  2974 "VBNET.ATG" 
				ifStatement.EndLocation = t.Location; statement = ifStatement; 
			} else SynErr(276);
		} else if (la.kind == 182) {
			lexer.NextToken();
			if (la.kind == 61) {
				lexer.NextToken();
			}
			Expr(
#line  2977 "VBNET.ATG" 
out expr);
			EndOfStmt();

#line  2978 "VBNET.ATG" 
			List<SwitchSection> selectSections = new List<SwitchSection>();
			Statement block = null;
			
			while (la.kind == 61) {

#line  2982 "VBNET.ATG" 
				List<CaseLabel> caseClauses = null; Location caseLocation = la.Location; 
				lexer.NextToken();
				CaseClauses(
#line  2983 "VBNET.ATG" 
out caseClauses);
				if (
#line  2983 "VBNET.ATG" 
IsNotStatementSeparator()) {
					lexer.NextToken();
				}
				EndOfStmt();

#line  2985 "VBNET.ATG" 
				SwitchSection selectSection = new SwitchSection(caseClauses);
				selectSection.StartLocation = caseLocation;
				
				Block(
#line  2988 "VBNET.ATG" 
out block);

#line  2990 "VBNET.ATG" 
				selectSection.Children = block.Children;
				selectSection.EndLocation = t.EndLocation;
				selectSections.Add(selectSection);
				
			}
开发者ID:mgagne-atman,项目名称:Projects,代码行数:66,代码来源:Parser.cs


示例12: ParseSwitchSection

//-----------------------------------------------------------------------------    
// section -> ('case' exp ':')+ statement
//           |'default' ':' statement    
//-----------------------------------------------------------------------------
    protected SwitchSection ParseSwitchSection()
    {
        Token t = m_lexer.PeekNextToken();
        SwitchSection c;
        
        // Handle 'default' label
        if (t.TokenType == Token.Type.cDefault)
        {
            ConsumeNextToken();
            ReadExpectedToken(Token.Type.cColon);
            //Statement s = ParseStatement();
            Statement s = ParseStatementList();
            c = new SwitchSection(s);
        }
        
        else {
            // Handle 'case' label
            ArrayList al = new ArrayList();
            
            while (t.TokenType == Token.Type.cCase)
            {
                ConsumeNextToken();
                Exp e = ParseExp();
                ReadExpectedToken(Token.Type.cColon);
                al.Add(e);
                t = m_lexer.PeekNextToken();
            }
            
            //Statement stmt = ParseStatement();
            Statement s = ParseStatementList();
            
            Exp [] eList = new Exp[al.Count];
            for(int i = 0; i < eList.Length; i++)
                eList[i] = (Exp) al[i];
            
            c = new SwitchSection(eList, s);
        }
        return c;
    }
开发者ID:chenzuo,项目名称:blue,代码行数:43,代码来源:Parser.cs


示例13: ParseSwitchStatement

//-----------------------------------------------------------------------------
// Parse a Switch-case statement
// --> 'switch' '(' exp ')' '{' body '}'
// body -> section +
//-----------------------------------------------------------------------------
    protected Statement ParseSwitchStatement()
    {
        ReadExpectedToken(Token.Type.cSwitch);
        
        ReadExpectedToken(Token.Type.cLParen);
        Exp expTest = ParseExp();
        ReadExpectedToken(Token.Type.cRParen);
        
        ReadExpectedToken(Token.Type.cLCurly);
    
        // Parse sections
        ArrayList al = new ArrayList();
        
        Token t = m_lexer.PeekNextToken();
        while(t.TokenType != Token.Type.cRCurly)
        {
            SwitchSection section = ParseSwitchSection();    
            al.Add(section);        
            t = m_lexer.PeekNextToken();
        }
        ReadExpectedToken(Token.Type.cRCurly);
    
        
        SwitchSection [] sections = new SwitchSection[al.Count];
        for(int i = 0; i < sections.Length; i++)
            sections[i] = (SwitchSection) al[i];
            
        Statement s = new SwitchStatement(expTest, sections);
        
        return s;
    }
开发者ID:chenzuo,项目名称:blue,代码行数:36,代码来源:Parser.cs


示例14: VisitSwitchSection

		public virtual void VisitSwitchSection(SwitchSection switchSection)
		{
			StartNode(switchSection);
			bool first = true;
			int count = 0;
			foreach (var label in switchSection.CaseLabels) {
				if (count-- <= 0) {
					cancellationToken.ThrowIfCancellationRequested();
					count = CANCEL_CHECK_LOOP_COUNT;
				}
				if (!first) {
					NewLine();
				}
				label.AcceptVisitor(this);
				first = false;
			}
			bool isBlock = switchSection.Statements.Count == 1 && switchSection.Statements.Single() is BlockStatement;
			if (policy.IndentCaseBody && !isBlock) {
				writer.Indent();
			}
			
			if (!isBlock)
				NewLine();

			count = 0;
			foreach (var statement in switchSection.Statements) {
				if (count-- <= 0) {
					cancellationToken.ThrowIfCancellationRequested();
					count = CANCEL_CHECK_LOOP_COUNT;
				}
				statement.AcceptVisitor(this);
			}
			
			if (policy.IndentCaseBody && !isBlock) {
				writer.Unindent();
			}
			
			EndNode(switchSection);
		}
开发者ID:0xd4d,项目名称:NRefactory,代码行数:39,代码来源:CSharpOutputVisitor.cs


示例15: SwitchSections

	void SwitchSections(
#line  1665 "cs.ATG" 
List<SwitchSection> switchSections) {

#line  1667 "cs.ATG" 
		SwitchSection switchSection = new SwitchSection();
		CaseLabel label;
		
		SwitchLabel(
#line  1671 "cs.ATG" 
out label);

#line  1671 "cs.ATG" 
		SafeAdd(switchSection, switchSection.SwitchLabels, label); 

#line  1672 "cs.ATG" 
		compilationUnit.BlockStart(switchSection); 
		while (StartOf(32)) {
			if (la.kind == 55 || la.kind == 63) {
				SwitchLabel(
#line  1674 "cs.ATG" 
out label);

#line  1675 "cs.ATG" 
				if (label != null) {
				if (switchSection.Children.Count > 0) {
					// open new section
					compilationUnit.BlockEnd(); switchSections.Add(switchSection);
					switchSection = new SwitchSection();
					compilationUnit.BlockStart(switchSection);
				}
				SafeAdd(switchSection, switchSection.SwitchLabels, label);
				}
				
			} else {
				Statement();
			}
		}

#line  1687 "cs.ATG" 
		compilationUnit.BlockEnd(); switchSections.Add(switchSection); 
	}
开发者ID:mgagne-atman,项目名称:Projects,代码行数:42,代码来源:Parser.cs


示例16: VisitSwitchSection

 public override void VisitSwitchSection(SwitchSection switchSection)
 {
     //new SwitchBlock(this, switchSection).Emit();
     throw new System.NotSupportedException();
 }
开发者ID:yindongfei,项目名称:bridge.lua,代码行数:5,代码来源:Emitter.Visitor.cs


示例17: TransformNode

		IEnumerable<Statement> TransformNode(ILNode node)
		{
			if (node is ILLabel) {
				yield return new LabelStatement { Label = ((ILLabel)node).Name };
			} else if (node is ILExpression) {
				List<ILRange> ilRanges = ILRange.OrderAndJoint(node.GetSelfAndChildrenRecursive<ILExpression>().SelectMany(e => e.ILRanges));
				AstNode codeExpr = TransformExpression((ILExpression)node);
				if (codeExpr != null) {
					codeExpr = codeExpr.WithAnnotation(ilRanges);
					if (codeExpr is Expression) {
						yield return new ExpressionStatement { Expression = (Expression)codeExpr };
					} else if (codeExpr is Statement) {
						yield return (Statement)codeExpr;
					} else {
						throw new Exception();
					}
				}
			} else if (node is ILWhileLoop) {
				ILWhileLoop ilLoop = (ILWhileLoop)node;
				WhileStatement whileStmt = new WhileStatement() {
					Condition = ilLoop.Condition != null ? (Expression)TransformExpression(ilLoop.Condition) : new PrimitiveExpression(true),
					EmbeddedStatement = TransformBlock(ilLoop.BodyBlock)
				};
				yield return whileStmt;
			} else if (node is ILCondition) {
				ILCondition conditionalNode = (ILCondition)node;
				bool hasFalseBlock = conditionalNode.FalseBlock.EntryGoto != null || conditionalNode.FalseBlock.Body.Count > 0;
				yield return new IfElseStatement {
					Condition = (Expression)TransformExpression(conditionalNode.Condition),
					TrueStatement = TransformBlock(conditionalNode.TrueBlock),
					FalseStatement = hasFalseBlock ? TransformBlock(conditionalNode.FalseBlock) : null
				};
			} else if (node is ILSwitch) {
				ILSwitch ilSwitch = (ILSwitch)node;
				if (TypeAnalysis.IsBoolean(ilSwitch.Condition.InferredType) && (
					from cb in ilSwitch.CaseBlocks
					where cb.Values != null
					from val in cb.Values
					select val
				).Any(val => val != 0 && val != 1))
				{
					// If switch cases contain values other then 0 and 1, force the condition to be non-boolean
					ilSwitch.Condition.ExpectedType = typeSystem.Int32;
				}
				SwitchStatement switchStmt = new SwitchStatement() { Expression = (Expression)TransformExpression(ilSwitch.Condition) };
				foreach (var caseBlock in ilSwitch.CaseBlocks) {
					SwitchSection section = new SwitchSection();
					if (caseBlock.Values != null) {
						section.CaseLabels.AddRange(caseBlock.Values.Select(i => new CaseLabel() { Expression = AstBuilder.MakePrimitive(i, ilSwitch.Condition.ExpectedType ?? ilSwitch.Condition.InferredType) }));
					} else {
						section.CaseLabels.Add(new CaseLabel());
					}
					section.Statements.Add(TransformBlock(caseBlock));
					switchStmt.SwitchSections.Add(section);
				}
				yield return switchStmt;
			} else if (node is ILTryCatchBlock) {
				ILTryCatchBlock tryCatchNode = ((ILTryCatchBlock)node);
				var tryCatchStmt = new TryCatchStatement();
				tryCatchStmt.TryBlock = TransformBlock(tryCatchNode.TryBlock);
				foreach (var catchClause in tryCatchNode.CatchBlocks) {
					CatchClause clause = new CatchClause { Body = TransformBlock(catchClause) };
					if (catchClause.ExceptionVariable != null
					    || (catchClause.ExceptionType != null && !catchClause.ExceptionType.IsCorLibType("System", "Object")))
					{
						clause.Type = AstBuilder.ConvertType(catchClause.ExceptionType);
						clause.VariableName = catchClause.ExceptionVariable == null ? null : catchClause.ExceptionVariable.Name;
						clause.AddAnnotation(catchClause.ExceptionVariable);
					}
					if (catchClause.FilterBlock != null) {
						clause.Filter = new FilterClause { 
							Expression = new LambdaExpression { 
								Body = TransformBlock(catchClause.FilterBlock) 
							}.WithAnnotation(new FilterClauseAnnotation())
						};
					}
					tryCatchStmt.CatchClauses.Add(clause);
				}
				if (tryCatchNode.FinallyBlock != null)
					tryCatchStmt.FinallyBlock = TransformBlock(tryCatchNode.FinallyBlock);
				if (tryCatchNode.FaultBlock != null) {
					CatchClause cc = new CatchClause();
					cc.Body = TransformBlock(tryCatchNode.FaultBlock);
					cc.Body.Add(new ThrowStatement()); // rethrow
					tryCatchStmt.CatchClauses.Add(cc);
				}
				yield return tryCatchStmt;
			} else if (node is ILFixedStatement) {
				ILFixedStatement fixedNode = (ILFixedStatement)node;
				FixedStatement fixedStatement = new FixedStatement();
				foreach (ILExpression initializer in fixedNode.Initializers) {
					Debug.Assert(initializer.Code == ILCode.Stloc);
					ILVariable v = (ILVariable)initializer.Operand;
					fixedStatement.Variables.Add(
						new VariableInitializer {
							Name = v.Name,
							Initializer = (Expression)TransformExpression(initializer.Arguments[0])
						}.WithAnnotation(v));
				}
				fixedStatement.Type = AstBuilder.ConvertType(((ILVariable)fixedNode.Initializers[0].Operand).Type);
//.........这里部分代码省略.........
开发者ID:modulexcite,项目名称:ICSharpCode.Decompiler-retired,代码行数:101,代码来源:AstMethodBodyBuilder.cs


示例18: VisitSwitchSection

 public abstract StringBuilder VisitSwitchSection(SwitchSection switchSection, int data);
开发者ID:hach-que,项目名称:SLSharp,代码行数:1,代码来源:VisitorBase.Abstract.cs


示例19: TransformNode

 IEnumerable<Statement> TransformNode(ILNode node)
 {
     if (node is ILLabel) {
         yield return new Ast.LabelStatement { Label = ((ILLabel)node).Name };
     } else if (node is ILExpression) {
         List<ILRange> ilRanges = ((ILExpression)node).GetILRanges();
         AstNode codeExpr = TransformExpression((ILExpression)node);
         if (codeExpr != null) {
             codeExpr = codeExpr.WithAnnotation(ilRanges);
             if (codeExpr is Ast.Expression) {
                 yield return new Ast.ExpressionStatement { Expression = (Ast.Expression)codeExpr };
             } else if (codeExpr is Ast.Statement) {
                 yield return (Ast.Statement)codeExpr;
             } else {
                 throw new Exception();
             }
         }
     } else if (node is ILWhileLoop) {
         ILWhileLoop ilLoop = (ILWhileLoop)node;
         if (ilLoop.PreLoopLabel != null)
             yield return TransformNode(ilLoop.PreLoopLabel).Single();
         WhileStatement whileStmt = new WhileStatement() {
             Condition = ilLoop.Condition != null ? MakeBranchCondition(ilLoop.Condition) : new PrimitiveExpression(true),
             EmbeddedStatement = TransformBlock(ilLoop.BodyBlock)
         };
         yield return whileStmt;
         if (ilLoop.PostLoopGoto != null)
             yield return (Statement)TransformExpression(ilLoop.PostLoopGoto);
     } else if (node is ILCondition) {
         ILCondition conditionalNode = (ILCondition)node;
         yield return new Ast.IfElseStatement {
             Condition = MakeBranchCondition(conditionalNode.Condition),
             TrueStatement = TransformBlock(conditionalNode.TrueBlock),
             FalseStatement = TransformBlock(conditionalNode.FalseBlock)
         };
     } else if (node is ILSwitch) {
         ILSwitch ilSwitch = (ILSwitch)node;
         SwitchStatement switchStmt = new SwitchStatement() { Expression = (Expression)TransformExpression(ilSwitch.Condition.Arguments[0]) };
         for (int i = 0; i < ilSwitch.CaseBlocks.Count; i++) {
             SwitchSection section = new SwitchSection();
             section.CaseLabels.Add(new CaseLabel() { Expression = new PrimitiveExpression(i) });
             section.Statements.Add(TransformBlock(ilSwitch.CaseBlocks[i]));
             switchStmt.SwitchSections.Add(section);
         }
         yield return switchStmt;
         if (ilSwitch.DefaultGoto != null)
             yield return (Statement)TransformExpression(ilSwitch.DefaultGoto);
     } else if (node is ILTryCatchBlock) {
         ILTryCatchBlock tryCatchNode = ((ILTryCatchBlock)node);
         var tryCatchStmt = new Ast.TryCatchStatement();
         tryCatchStmt.TryBlock = TransformBlock(tryCatchNode.TryBlock);
         foreach (var catchClause in tryCatchNode.CatchBlocks) {
             tryCatchStmt.CatchClauses.Add(
                 new Ast.CatchClause {
                     Type = AstBuilder.ConvertType(catchClause.ExceptionType),
                     VariableName = catchClause.ExceptionVariable == null ? null : catchClause.ExceptionVariable.Name,
                     Body = TransformBlock(catchClause)
                 });
         }
         if (tryCatchNode.FinallyBlock != null)
             tryCatchStmt.FinallyBlock = TransformBlock(tryCatchNode.FinallyBlock);
         yield return tryCatchStmt;
     } else if (node is ILBlock) {
         yield return TransformBlock((ILBlock)node);
     } else if (node is ILComment) {
         yield return new CommentStatement(((ILComment)node).Text).WithAnnotation(((ILComment)node).ILRanges);
     } else {
         throw new Exception("Unknown node type");
     }
 }
开发者ID:richardschneider,项目名称:ILSpy,代码行数:70,代码来源:AstMethodBodyBuilder.cs


示例20: Visit

			public override object Visit(Switch switchStatement)
			{
				var result = new SwitchStatement();
				
				var location = LocationsBag.GetLocations(switchStatement);
				result.AddChild(new CSharpTokenNode(Convert(switchStatement.loc), SwitchStatement.SwitchKeywordRole), SwitchStatement.SwitchKeywordRole);
				if (location != null)
					result.AddChild(new CSharpTokenNode(Convert(location [0]), Roles.LPar), Roles.LPar);
				if (switchStatement.Expr != null)
					result.AddChild((Expression)switchStatement.Expr.Accept(this), Roles.Expression);
				if (location != null && location.Count > 1)
					result.AddChild(new CSharpTokenNode(Convert(location [1]), Roles.RPar), Roles.RPar);
				if (location != null && location.Count > 2)
					result.AddChild(new CSharpTokenNode(Convert(location [2]), Roles.LBrace), Roles.LBrace);
				SwitchSection newSection = null;
				bool lastWasCase = false, added = true;
				if (switchStatement.Block != null) {
					foreach (var child in switchStatement.Block.Statements) {
						var statement = child.Accept(this);
						var caseLabel = statement as CaseLabel;
						if (caseLabel != null) {
							if (!lastWasCase) {
								newSection = new SwitchSection();
								added = false;
							}
							newSection.AddChild(caseLabel, SwitchSection.CaseLabelRole);
							lastWasCase = true;
						} else {
							if (lastWasCase) {
								result.AddChild(newSection, SwitchStatement.SwitchSectionRole);
								lastWasCase = false;
								added = true;
							}
							newSection.AddChild((Statement)statement, Roles.EmbeddedStatement);
						}
					}
				}
				if (!added)
					result.AddChild(newSection, SwitchStatement.SwitchSectionRole);

				if (location != null && location.Count > 3) {
					result.AddChild(new CSharpTokenNode(Convert(location [3]), Roles.RBrace), Roles.RBrace);
				} else {
					// parser error, set end node to max value.
					result.AddChild(new ErrorNode(), Roles.Error);
				}
				
				return result;
			}
开发者ID:furesoft,项目名称:NRefactory,代码行数:49,代码来源:CSharpParser.cs



注:本文中的SwitchSection类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# SwitchStatement类代码示例发布时间:2022-05-24
下一篇:
C# Switch类代码示例发布时间:2022-05-24
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap