本文整理汇总了C#中ArrayBuilder.Push方法的典型用法代码示例。如果您正苦于以下问题:C# ArrayBuilder.Push方法的具体用法?C# ArrayBuilder.Push怎么用?C# ArrayBuilder.Push使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ArrayBuilder
的用法示例。
在下文中一共展示了ArrayBuilder.Push方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: EmitAllElementInitializersRecursive
/// <summary>
/// Emits all initializers that match indices on the stack recursively.
///
/// Example:
/// if array has [0..2, 0..3, 0..2] shape
/// and we have {1, 2} indices on the stack
/// initializers for
/// [1, 2, 0]
/// [1, 2, 1]
/// [1, 2, 2]
///
/// will be emitted and the top index will be pushed off the stack
/// as at that point we would be completely done with emitting initializers
/// corresponding to that index.
/// </summary>
private void EmitAllElementInitializersRecursive(ArrayTypeSymbol arrayType,
ArrayBuilder<IndexDesc> indices,
bool includeConstants)
{
var top = indices.Peek();
var inits = top.Initializers;
if (IsMultidimensionalInitializer(inits))
{
// emit initializers for the less significant indices recursively
for (int i = 0; i < inits.Length; i++)
{
indices.Push(new IndexDesc(i, ((BoundArrayInitialization)inits[i]).Initializers));
EmitAllElementInitializersRecursive(arrayType, indices, includeConstants);
}
}
else
{
// leaf case
for (int i = 0; i < inits.Length; i++)
{
var init = inits[i];
if (ShouldEmitInitExpression(includeConstants, init))
{
// emit array ref
_builder.EmitOpCode(ILOpCode.Dup);
Debug.Assert(indices.Count == arrayType.Rank - 1);
// emit values of all indices that are in progress
foreach (var row in indices)
{
_builder.EmitIntConstant(row.Index);
}
// emit the leaf index
_builder.EmitIntConstant(i);
var initExpr = inits[i];
EmitExpression(initExpr, true);
EmitArrayElementStore(arrayType, init.Syntax);
}
}
}
indices.Pop();
}
示例2: EmitMultidimensionalElementInitializers
private void EmitMultidimensionalElementInitializers(ArrayTypeSymbol arrayType,
ImmutableArray<BoundExpression> inits,
bool includeConstants)
{
// Using a List for the stack instead of the framework Stack because IEnumerable from Stack is top to bottom.
// This algorithm requires the IEnumerable to be from bottom to top. See extensions for List in CollectionExtensions.vb.
var indices = new ArrayBuilder<IndexDesc>();
// emit initializers for all values of the leftmost index.
for (int i = 0; i < inits.Length; i++)
{
indices.Push(new IndexDesc(i, ((BoundArrayInitialization)inits[i]).Initializers));
EmitAllElementInitializersRecursive(arrayType, indices, includeConstants);
}
Debug.Assert(!indices.Any());
}
示例3: TypeEnumerator
public TypeEnumerator(Type type)
{
_first = true;
_stack = ArrayBuilder<Type>.GetInstance();
_stack.Push(type);
}
示例4: PushReachableBlockToProcess
private static void PushReachableBlockToProcess(ArrayBuilder<BasicBlock> reachableBlocks, BasicBlock block)
{
if (block.Reachability == Reachability.NotReachable)
{
reachableBlocks.Push(block);
}
}
示例5: ThreeEnumeratorListStack
public ThreeEnumeratorListStack(SyntaxNode startingNode, Func<SyntaxNode, bool> descendIntoChildren)
{
_nodeStack = new ChildSyntaxListEnumeratorStack(startingNode, descendIntoChildren);
_triviaStack = new TriviaListEnumeratorStack();
if (_nodeStack.IsNotEmpty)
{
_tokenStack = ArrayBuilder<SyntaxNodeOrToken>.GetInstance();
_discriminatorStack = ArrayBuilder<Which>.GetInstance();
_discriminatorStack.Push(Which.Node);
}
else
{
_tokenStack = null;
_discriminatorStack = null;
}
}