internal void EmitStringSwitchJumpTable( KeyValuePair <ConstantValue, object>[] caseLabels, object fallThroughLabel, LocalOrParameter key, LocalDefinition?keyHash, SwitchStringJumpTableEmitter.EmitStringCompareAndBranch emitStringCondBranchDelegate, SwitchStringJumpTableEmitter.GetStringHashCode computeStringHashcodeDelegate) { Debug.Assert(caseLabels.Length > 0); var emitter = new SwitchStringJumpTableEmitter( this, key, caseLabels, fallThroughLabel, keyHash, emitStringCondBranchDelegate, computeStringHashcodeDelegate); emitter.EmitJumpTable(); }
/// <summary> /// Primary method for emitting string switch jump table /// </summary> /// <param name="caseLabels">switch case labels</param> /// <param name="fallThroughLabel">fall through label for the jump table</param> /// <param name="key">Local holding the value to switch on. /// This value has already been loaded onto the execution stack. /// </param> /// <param name="keyHash">Local holding the hash value of the key for emitting /// hash table switch. Hash value has already been computed and loaded into keyHash. /// This parameter is null if emitting non hash table switch. /// </param> /// <param name="emitStringCondBranchDelegate"> /// Delegate to emit string compare call and conditional branch based on the compare result. /// </param> /// <param name="computeStringHashcodeDelegate"> /// Delegate to compute string hash consistent with value of keyHash. /// </param> internal void EmitStringSwitchJumpTable( KeyValuePair<ConstantValue, object>[] caseLabels, object fallThroughLabel, LocalOrParameter key, LocalDefinition keyHash, SwitchStringJumpTableEmitter.EmitStringCompareAndBranch emitStringCondBranchDelegate, SwitchStringJumpTableEmitter.GetStringHashCode computeStringHashcodeDelegate) { Debug.Assert(caseLabels.Length > 0); var emitter = new SwitchStringJumpTableEmitter( this, key, caseLabels, fallThroughLabel, keyHash, emitStringCondBranchDelegate, computeStringHashcodeDelegate); emitter.EmitJumpTable(); }