当前位置: 首页>>代码示例>>C#>>正文


C# BlockStatement.SetContainingBlock方法代码示例

本文整理汇总了C#中BlockStatement.SetContainingBlock方法的典型用法代码示例。如果您正苦于以下问题:C# BlockStatement.SetContainingBlock方法的具体用法?C# BlockStatement.SetContainingBlock怎么用?C# BlockStatement.SetContainingBlock使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在BlockStatement的用法示例。


在下文中一共展示了BlockStatement.SetContainingBlock方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: CheckForErrorsAndReturnTrueIfAnyAreFound

        protected override bool CheckForErrorsAndReturnTrueIfAnyAreFound()
        {
            if (pattern == null)
            return Body.HasErrors;

              var hasError = false;
              var newStmts = new List<Statement>();
              var newBlock = new BlockStatement(newStmts, this.SourceLocation);
              var call = pattern as VccMethodCall;
              if (call == null) {
            this.Helper.ReportError(new VccErrorMessage(pattern.SourceLocation, Error.ExpectedIdentifier));
            return true;
              }

              var args = call.OriginalArguments.ToArray();
              var calledMethod = call.MethodExpression as VccSimpleName;
              if (calledMethod == null) {
            this.Helper.ReportError(new VccErrorMessage(call.MethodExpression.SourceLocation, Error.ExpectedIdentifier));
            return true;
              }

              var methods = call.GetCandidateMethods(true).Where(m => m.ParameterCount == args.Length).ToArray();
              if (methods.Length == 0) {
            if (!call.MethodExpression.HasErrors)
              this.Helper.ReportError(new AstErrorMessage(call, Cci.Ast.Error.BadNumberOfArguments, calledMethod.Name.Value, args.Length.ToString()));
            return true;
              }

              var meth = (MethodDefinition)methods.First();
              var decl = (FunctionDefinition)meth.Declaration;
              var parms = decl.Parameters.ToArray();
              List<Statement> stmts = new List<Statement>();
              for (int i = 0; i < args.Length; ++i) {
            var name = args[i] as VccSimpleName;
            if (name == null) {
              this.Helper.ReportError(new VccErrorMessage(args[i].SourceLocation, Error.ExpectedIdentifier));
              hasError = true;
            } else {
              var local = new VccLocalDeclaration(new NameDeclaration(name.Name, name.SourceLocation), null, new List<Specifier>(), true, name.SourceLocation);
              var tp = (TypeExpression)parms[i].Type;
              //tp = (TypeExpression)tp.MakeCopyFor(newBlock);
              var stmt = new LocalDeclarationsStatement(false, true, false, tp, new LocalDeclaration[] { local }.ToList(), name.SourceLocation);
              newStmts.Add(stmt);
            }
              }

              newStmts.Add(new ExpressionStatement(call));

              if (_body != null)
            newStmts.AddRange(_body.Statements);
              else
            newStmts.AddRange(statements);

              _body = newBlock;
              newBlock.SetContainingBlock(containingMatchStatement.ContainingBlock);
              hasError |= newBlock.HasErrors;

              return hasError;
        }
开发者ID:edgar-pek,项目名称:VCDryad,代码行数:59,代码来源:Statements.cs


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