예제 #1
0
        internal EHClausesArray(EHDecoder ehDecoder, int[] offsetsMap)
        {
            clauses = new EHClause [ehDecoder.GetCount()];

            for (int i = 0; i < ehDecoder.GetCount(); i++)
            {
                clauses[i] = new EHClause(ehDecoder, i, offsetsMap);
            }
        }
예제 #2
0
파일: Methods.cs 프로젝트: DragonXYZ/cilpe
        internal EHClausesArray(EHDecoder ehDecoder, int[] offsetsMap)
        {
            clauses = new EHClause [ehDecoder.GetCount()];

            for (int i = 0; i < ehDecoder.GetCount(); i++)
                clauses[i] = new EHClause(ehDecoder,i,offsetsMap);
        }
예제 #3
0
파일: Verifier.cs 프로젝트: DragonXYZ/cilpe
			public EHClausesArrayWithOneClauseRemoved(IEnumerable clauses, EHClause removed)
			{
				this.clauses = clauses; this.removed = removed;
			}
예제 #4
0
파일: Verifier.cs 프로젝트: DragonXYZ/cilpe
				public Enumerator(IEnumerable clauses, EHClause removed)
				{
					this.clauses = clauses; this.removed = removed;
					enumerator = clauses.GetEnumerator();
				}
예제 #5
0
파일: Verifier.cs 프로젝트: DragonXYZ/cilpe
		private static BlockStruct GetNearestBlock(IEnumerable clauses, int iNum, out EHClause clause)
		{
			int start = -1;
			int end = 1<<30;
			BlockType type = BlockType.Global;

			clause = null;
			foreach(EHClause c in clauses)
			{
				if(DecreaseBlock(ref start,ref end,iNum,c.TryStart,c.TryLength))
				{
					clause = c;
					type = BlockType.Try;
				}
				if(DecreaseBlock(ref start,ref end,iNum,c.HandlerStart,c.HandlerLength))
				{
					clause = c;
					if(c.Kind == EHClauseKind.FinallyHandler)
						type = BlockType.Finally;
					else
						type = BlockType.Catch;
				}
				if(c.Kind == EHClauseKind.UserFilteredHandler)
					if(DecreaseBlock(ref start,ref end,iNum,c.FilterStart,c.HandlerStart - c.FilterStart))
					{
						clause = c;
						type = BlockType.Filter;
					}
			}
			return(new BlockStruct(type,start,end));
		}