Пример #1
0
        public BreakStatement(IStatementBlock sourceBlock)
            : base(sourceBlock)
        {
            IStatementBlockLocalMember local     = null;
            IBreakTargetExitPoint      exitPoint = null;
            IDeclarationTarget         parent    = sourceBlock;

            //Search up for the block that needs the break.
            while (parent != null && local == null)
            {
                if (parent is IBreakTargetStatement)
                {
                    local     = ((IBreakTargetStatement)parent).BreakLocal;
                    exitPoint = ((IBreakTargetStatement)parent).ExitLabel;
                    ((IBreakTargetStatement)parent).UtilizeBreakMeasures = true;
                    break;
                }
                parent = parent.ParentTarget;
            }
            if (local == null && !(sourceBlock.Parent is ISwitchStatementCase))
            {
                throw new InvalidOperationException("Cannot insert a break into a non-terminable block.");
            }
            this.terminalVariable = local;
            this.exitSymbol       = exitPoint;
        }
Пример #2
0
 public EnumeratorStatement(IStatementBlock sourceBlock)
     : base(sourceBlock)
 {
     enumMember                = this.Statements.Locals.AddNew(this.Statements.Locals.GetUnusedName("__enumerator"), typeof(IEnumerator).GetTypeReference());
     enumMember.AutoDeclare    = false;
     currentMember             = this.Statements.Locals.AddNew(this.Statements.Locals.GetUnusedName("__current"), typeof(void).GetTypeReference());
     currentMember.AutoDeclare = true;
     currentMemberInit         = new CastExpression(enumMember.GetReference().GetProperty("Current"), itemType);
     currentMember.InitializationExpression = currentMemberInit;
 }
Пример #3
0
 public ILocalDeclarationStatement DefineLocal(IStatementBlockLocalMember local)
 {
     if (local.ParentTarget == this)
     {
         ILocalDeclarationStatement localDecl = local.GetDeclarationStatement();
         localDecl.ReferencedMember.AutoDeclare = false;
         Add(localDecl);
         return(localDecl);
     }
     throw new InvalidOperationException("Cannot declare a local outside its scope.");
 }
Пример #4
0
 public ILocalDeclarationStatement DefineLocal(IStatementBlockLocalMember local)
 {
     return(this.Statements.DefineLocal(local));
 }