C# Класс System.Xml.Xsl.IlGen.GenerateHelper

Contains helper methods used during the code generation phase.
Показать файл Открыть проект Примеры использования класса

Открытые методы

Метод Описание
AddSortKey ( XmlQueryType keyType ) : void
BranchAndMark ( Label lblBranch, Label lblMark ) : void

Branch to lblBranch and anchor lblMark. If lblBranch = lblMark, then no need to generate a "br" to the next instruction.

Call ( MethodInfo meth ) : void
CallArithmeticOp ( QilNodeType opType, XmlTypeCode code ) : void
CallCacheCount ( Type itemStorageType ) : void
CallCacheItem ( Type itemStorageType ) : void
CallCompare ( XmlTypeCode code ) : void
CallCompareEquals ( XmlTypeCode code ) : void
CallConcatStrings ( int cStrings ) : void
CallEndRtfConstruction ( ) : void
CallEndSequenceConstruction ( ) : void
CallEndTree ( ) : void
CallGetAtomizedName ( int idxName ) : void
CallGetCollation ( int idxName ) : void
CallGetEarlyBoundObject ( int idxObj, Type clrType ) : void
CallGetGlobalValue ( int idxValue, Type clrType ) : void
CallGetNameFilter ( int idxFilter ) : void
CallGetParameter ( string localName, string namespaceUri ) : void
CallGetTypeFilter ( XPathNodeType nodeType ) : void
CallParseTagName ( GenerateNameType nameType ) : void
CallSetGlobalValue ( Type clrType ) : void
CallStartElementContent ( ) : void
CallStartRtfConstruction ( string baseUri ) : void
CallStartSequenceConstruction ( ) : void
CallStartTree ( XPathNodeType rootType ) : void
CallSyncToNavigator ( ) : void

Call a static method which attempts to reuse a navigator.

CallToken ( MethodInfo meth ) : void
CallValueAs ( Type clrType ) : void
CallWriteEndAttribute ( bool callChk ) : void
CallWriteEndComment ( ) : void
CallWriteEndElement ( GenerateNameType nameType, bool callChk ) : void
CallWriteEndPI ( ) : void
CallWriteEndRoot ( ) : void
CallWriteNamespaceDecl ( bool callChk ) : void
CallWriteStartAttribute ( GenerateNameType nameType, bool callChk ) : void
CallWriteStartComment ( ) : void
CallWriteStartElement ( GenerateNameType nameType, bool callChk ) : void
CallWriteStartPI ( ) : void
CallWriteStartRoot ( ) : void
CallWriteString ( bool disableOutputEscaping, bool callChk ) : void
Construct ( ConstructorInfo constr ) : void
ConstructLiteralDecimal ( decimal dec ) : void
ConstructLiteralQName ( string localName, string namespaceName ) : void
ConvBranchToBool ( Label lblBranch, bool isTrueBranch ) : void

Assume a branch instruction has already been issued. If isTrueBranch is true, then the true path is linked to lblBranch. Otherwise, the false path is linked to lblBranch. Convert this "branching" boolean logic into an explicit push of 1 or 0 onto the stack.

DebugEndScope ( ) : void

End a new debugging scope.

DebugSequencePoint ( ISourceLineInfo sourceInfo ) : void

Correlate the current IL generation position with the current source position.

DebugStartScope ( ) : void

Begin a new variable debugging scope.

DeclareLocal ( string name, Type type ) : LocalBuilder

Generate a new local variable. Add a numeric suffix to name that ensures that all local variable names will be unique (for readability).

DefineLabel ( ) : Label
Emit ( OpCode opcode ) : void
Emit ( OpCode opcode, ConstructorInfo constrInfo ) : void
Emit ( OpCode opcode, FieldInfo fldInfo ) : void
Emit ( OpCode opcode, Label lblVal ) : void
Emit ( OpCode opcode, LocalBuilder locBldr ) : void
Emit ( OpCode opcode, MethodInfo methInfo ) : void
Emit ( OpCode opcode, Type typVal ) : void
Emit ( OpCode opcode, byte byteVal ) : void
Emit ( OpCode opcode, double dblVal ) : void
Emit ( OpCode opcode, float fltVal ) : void
Emit ( OpCode opcode, int intVal ) : void
Emit ( OpCode opcode, long longVal ) : void
Emit ( OpCode opcode, sbyte sbyteVal ) : void
Emit ( OpCode opcode, short shrtVal ) : void
Emit ( OpCode opcode, string strVal ) : void
EmitUnconditionalBranch ( OpCode opcode, Label lblTarget ) : void

Unconditional branch opcodes (OpCode.Br, OpCode.Br_S) can lead to unverifiable code in the following cases: # DEAD CODE CASE ldc_i4 1 # Stack depth == 1 br Label2 Label1: nop # Dead code, so IL rules assume stack depth == 0. This causes a verification error, # since next instruction has depth == 1 Label2: pop # Stack depth == 1 ret # LATE BRANCH CASE ldc_i4 1 # Stack depth == 1 br Label2 Label1: nop # Not dead code, but since branch comes from below, IL rules assume stack depth = 0. # This causes a verification error, since next instruction has depth == 1 Label2: pop # Stack depth == 1 ret Label3: br Label1 # Stack depth == 1 This method works around the above limitations by using Brtrue or Brfalse in the following way: ldc_i4 1 # Since this test is always true, this is a way of creating a path to the code that brtrue Label # follows the brtrue instruction. ldc_i4 1 # Since this test is always false, this is a way of creating a path to the code that brfalse Label # starts at Label. 1. If opcode == Brtrue or Brtrue_S, then 1 will be pushed and brtrue instruction will be generated. 2. If opcode == Brfalse or Brfalse_S, then 1 will be pushed and brfalse instruction will be generated. 3. If opcode == Br or Br_S, then a br instruction will be generated.

GenerateHelper ( XmlILModule module, bool isDebug ) : System

Cache metadata used during code-generation phase.

LoadBoolean ( bool boolVal ) : void
LoadInteger ( int intVal ) : void

Generate the optimal Ldc_I4 instruction based on intVal.

LoadParameter ( int paramPos ) : void
LoadQueryContext ( ) : void
LoadQueryOutput ( ) : void
LoadQueryRuntime ( ) : void
LoadType ( Type clrTyp ) : void
LoadXsltLibrary ( ) : void
MarkLabel ( Label lbl ) : void
MethodBegin ( MethodBase methInfo, ISourceLineInfo sourceInfo, bool initWriters ) : void

Begin generating code within a new method.

MethodEnd ( ) : void

Generate "ret" instruction and branch fixup jump table.

SetParameter ( object paramId ) : void
TailCall ( MethodInfo meth ) : void
TestAndBranch ( int i4, Label lblBranch, OpCode opcodeBranch ) : void

Compare the top value on the stack with the specified i4 using the specified relational comparison opcode, and branch to lblBranch if the result is true.

TreatAs ( Type clrTypeSrc, Type clrTypeDst ) : void

Assume that an object reference is on the IL stack. Change the static Clr type from "clrTypeSrc" to "clrTypeDst"

Приватные методы

Метод Описание
EnsureWriter ( ) : void
GetFileName ( ISourceLineInfo sourceInfo ) : string
MarkSequencePoint ( ISourceLineInfo sourceInfo ) : void
TraceCall ( OpCode opcode, MethodInfo meth ) : void

Описание методов

AddSortKey() публичный Метод

public AddSortKey ( XmlQueryType keyType ) : void
keyType XmlQueryType
Результат void

BranchAndMark() публичный Метод

Branch to lblBranch and anchor lblMark. If lblBranch = lblMark, then no need to generate a "br" to the next instruction.
public BranchAndMark ( Label lblBranch, Label lblMark ) : void
lblBranch System.Reflection.Emit.Label
lblMark System.Reflection.Emit.Label
Результат void

Call() публичный Метод

public Call ( MethodInfo meth ) : void
meth System.Reflection.MethodInfo
Результат void

CallArithmeticOp() публичный Метод

public CallArithmeticOp ( QilNodeType opType, XmlTypeCode code ) : void
opType QilNodeType
code XmlTypeCode
Результат void

CallCacheCount() публичный Метод

public CallCacheCount ( Type itemStorageType ) : void
itemStorageType System.Type
Результат void

CallCacheItem() публичный Метод

public CallCacheItem ( Type itemStorageType ) : void
itemStorageType System.Type
Результат void

CallCompare() публичный Метод

public CallCompare ( XmlTypeCode code ) : void
code XmlTypeCode
Результат void

CallCompareEquals() публичный Метод

public CallCompareEquals ( XmlTypeCode code ) : void
code XmlTypeCode
Результат void

CallConcatStrings() публичный Метод

public CallConcatStrings ( int cStrings ) : void
cStrings int
Результат void

CallEndRtfConstruction() публичный Метод

public CallEndRtfConstruction ( ) : void
Результат void

CallEndSequenceConstruction() публичный Метод

public CallEndSequenceConstruction ( ) : void
Результат void

CallEndTree() публичный Метод

public CallEndTree ( ) : void
Результат void

CallGetAtomizedName() публичный Метод

public CallGetAtomizedName ( int idxName ) : void
idxName int
Результат void

CallGetCollation() публичный Метод

public CallGetCollation ( int idxName ) : void
idxName int
Результат void

CallGetEarlyBoundObject() публичный Метод

public CallGetEarlyBoundObject ( int idxObj, Type clrType ) : void
idxObj int
clrType System.Type
Результат void

CallGetGlobalValue() публичный Метод

public CallGetGlobalValue ( int idxValue, Type clrType ) : void
idxValue int
clrType System.Type
Результат void

CallGetNameFilter() публичный Метод

public CallGetNameFilter ( int idxFilter ) : void
idxFilter int
Результат void

CallGetParameter() публичный Метод

public CallGetParameter ( string localName, string namespaceUri ) : void
localName string
namespaceUri string
Результат void

CallGetTypeFilter() публичный Метод

public CallGetTypeFilter ( XPathNodeType nodeType ) : void
nodeType XPathNodeType
Результат void

CallParseTagName() публичный Метод

public CallParseTagName ( GenerateNameType nameType ) : void
nameType GenerateNameType
Результат void

CallSetGlobalValue() публичный Метод

public CallSetGlobalValue ( Type clrType ) : void
clrType System.Type
Результат void

CallStartElementContent() публичный Метод

public CallStartElementContent ( ) : void
Результат void

CallStartRtfConstruction() публичный Метод

public CallStartRtfConstruction ( string baseUri ) : void
baseUri string
Результат void

CallStartSequenceConstruction() публичный Метод

public CallStartSequenceConstruction ( ) : void
Результат void

CallStartTree() публичный Метод

public CallStartTree ( XPathNodeType rootType ) : void
rootType XPathNodeType
Результат void

CallSyncToNavigator() публичный Метод

Call a static method which attempts to reuse a navigator.
public CallSyncToNavigator ( ) : void
Результат void

CallToken() публичный Метод

public CallToken ( MethodInfo meth ) : void
meth System.Reflection.MethodInfo
Результат void

CallValueAs() публичный Метод

public CallValueAs ( Type clrType ) : void
clrType System.Type
Результат void

CallWriteEndAttribute() публичный Метод

public CallWriteEndAttribute ( bool callChk ) : void
callChk bool
Результат void

CallWriteEndComment() публичный Метод

public CallWriteEndComment ( ) : void
Результат void

CallWriteEndElement() публичный Метод

public CallWriteEndElement ( GenerateNameType nameType, bool callChk ) : void
nameType GenerateNameType
callChk bool
Результат void

CallWriteEndPI() публичный Метод

public CallWriteEndPI ( ) : void
Результат void

CallWriteEndRoot() публичный Метод

public CallWriteEndRoot ( ) : void
Результат void

CallWriteNamespaceDecl() публичный Метод

public CallWriteNamespaceDecl ( bool callChk ) : void
callChk bool
Результат void

CallWriteStartAttribute() публичный Метод

public CallWriteStartAttribute ( GenerateNameType nameType, bool callChk ) : void
nameType GenerateNameType
callChk bool
Результат void

CallWriteStartComment() публичный Метод

public CallWriteStartComment ( ) : void
Результат void

CallWriteStartElement() публичный Метод

public CallWriteStartElement ( GenerateNameType nameType, bool callChk ) : void
nameType GenerateNameType
callChk bool
Результат void

CallWriteStartPI() публичный Метод

public CallWriteStartPI ( ) : void
Результат void

CallWriteStartRoot() публичный Метод

public CallWriteStartRoot ( ) : void
Результат void

CallWriteString() публичный Метод

public CallWriteString ( bool disableOutputEscaping, bool callChk ) : void
disableOutputEscaping bool
callChk bool
Результат void

Construct() публичный Метод

public Construct ( ConstructorInfo constr ) : void
constr ConstructorInfo
Результат void

ConstructLiteralDecimal() публичный Метод

public ConstructLiteralDecimal ( decimal dec ) : void
dec decimal
Результат void

ConstructLiteralQName() публичный Метод

public ConstructLiteralQName ( string localName, string namespaceName ) : void
localName string
namespaceName string
Результат void

ConvBranchToBool() публичный Метод

Assume a branch instruction has already been issued. If isTrueBranch is true, then the true path is linked to lblBranch. Otherwise, the false path is linked to lblBranch. Convert this "branching" boolean logic into an explicit push of 1 or 0 onto the stack.
public ConvBranchToBool ( Label lblBranch, bool isTrueBranch ) : void
lblBranch Label
isTrueBranch bool
Результат void

DebugEndScope() публичный Метод

End a new debugging scope.
public DebugEndScope ( ) : void
Результат void

DebugSequencePoint() публичный Метод

Correlate the current IL generation position with the current source position.
public DebugSequencePoint ( ISourceLineInfo sourceInfo ) : void
sourceInfo ISourceLineInfo
Результат void

DebugStartScope() публичный Метод

Begin a new variable debugging scope.
public DebugStartScope ( ) : void
Результат void

DeclareLocal() публичный Метод

Generate a new local variable. Add a numeric suffix to name that ensures that all local variable names will be unique (for readability).
public DeclareLocal ( string name, Type type ) : LocalBuilder
name string
type Type
Результат LocalBuilder

DefineLabel() публичный Метод

public DefineLabel ( ) : Label
Результат Label

Emit() публичный Метод

public Emit ( OpCode opcode ) : void
opcode OpCode
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, ConstructorInfo constrInfo ) : void
opcode OpCode
constrInfo ConstructorInfo
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, FieldInfo fldInfo ) : void
opcode OpCode
fldInfo FieldInfo
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, Label lblVal ) : void
opcode OpCode
lblVal Label
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, LocalBuilder locBldr ) : void
opcode OpCode
locBldr LocalBuilder
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, MethodInfo methInfo ) : void
opcode OpCode
methInfo MethodInfo
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, Type typVal ) : void
opcode OpCode
typVal Type
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, byte byteVal ) : void
opcode OpCode
byteVal byte
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, double dblVal ) : void
opcode OpCode
dblVal double
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, float fltVal ) : void
opcode OpCode
fltVal float
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, int intVal ) : void
opcode OpCode
intVal int
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, long longVal ) : void
opcode OpCode
longVal long
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, sbyte sbyteVal ) : void
opcode OpCode
sbyteVal sbyte
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, short shrtVal ) : void
opcode OpCode
shrtVal short
Результат void

Emit() публичный Метод

public Emit ( OpCode opcode, string strVal ) : void
opcode OpCode
strVal string
Результат void

EmitUnconditionalBranch() публичный Метод

Unconditional branch opcodes (OpCode.Br, OpCode.Br_S) can lead to unverifiable code in the following cases: # DEAD CODE CASE ldc_i4 1 # Stack depth == 1 br Label2 Label1: nop # Dead code, so IL rules assume stack depth == 0. This causes a verification error, # since next instruction has depth == 1 Label2: pop # Stack depth == 1 ret # LATE BRANCH CASE ldc_i4 1 # Stack depth == 1 br Label2 Label1: nop # Not dead code, but since branch comes from below, IL rules assume stack depth = 0. # This causes a verification error, since next instruction has depth == 1 Label2: pop # Stack depth == 1 ret Label3: br Label1 # Stack depth == 1 This method works around the above limitations by using Brtrue or Brfalse in the following way: ldc_i4 1 # Since this test is always true, this is a way of creating a path to the code that brtrue Label # follows the brtrue instruction. ldc_i4 1 # Since this test is always false, this is a way of creating a path to the code that brfalse Label # starts at Label. 1. If opcode == Brtrue or Brtrue_S, then 1 will be pushed and brtrue instruction will be generated. 2. If opcode == Brfalse or Brfalse_S, then 1 will be pushed and brfalse instruction will be generated. 3. If opcode == Br or Br_S, then a br instruction will be generated.
public EmitUnconditionalBranch ( OpCode opcode, Label lblTarget ) : void
opcode OpCode
lblTarget Label
Результат void

GenerateHelper() публичный Метод

Cache metadata used during code-generation phase.
public GenerateHelper ( XmlILModule module, bool isDebug ) : System
module XmlILModule
isDebug bool
Результат System

LoadBoolean() публичный Метод

public LoadBoolean ( bool boolVal ) : void
boolVal bool
Результат void

LoadInteger() публичный Метод

Generate the optimal Ldc_I4 instruction based on intVal.
public LoadInteger ( int intVal ) : void
intVal int
Результат void

LoadParameter() публичный Метод

public LoadParameter ( int paramPos ) : void
paramPos int
Результат void

LoadQueryContext() публичный Метод

public LoadQueryContext ( ) : void
Результат void

LoadQueryOutput() публичный Метод

public LoadQueryOutput ( ) : void
Результат void

LoadQueryRuntime() публичный Метод

public LoadQueryRuntime ( ) : void
Результат void

LoadType() публичный Метод

public LoadType ( Type clrTyp ) : void
clrTyp Type
Результат void

LoadXsltLibrary() публичный Метод

public LoadXsltLibrary ( ) : void
Результат void

MarkLabel() публичный Метод

public MarkLabel ( Label lbl ) : void
lbl Label
Результат void

MethodBegin() публичный Метод

Begin generating code within a new method.
public MethodBegin ( MethodBase methInfo, ISourceLineInfo sourceInfo, bool initWriters ) : void
methInfo MethodBase
sourceInfo ISourceLineInfo
initWriters bool
Результат void

MethodEnd() публичный Метод

Generate "ret" instruction and branch fixup jump table.
public MethodEnd ( ) : void
Результат void

SetParameter() публичный Метод

public SetParameter ( object paramId ) : void
paramId object
Результат void

TailCall() публичный Метод

public TailCall ( MethodInfo meth ) : void
meth MethodInfo
Результат void

TestAndBranch() публичный Метод

Compare the top value on the stack with the specified i4 using the specified relational comparison opcode, and branch to lblBranch if the result is true.
public TestAndBranch ( int i4, Label lblBranch, OpCode opcodeBranch ) : void
i4 int
lblBranch Label
opcodeBranch OpCode
Результат void

TreatAs() публичный Метод

Assume that an object reference is on the IL stack. Change the static Clr type from "clrTypeSrc" to "clrTypeDst"
public TreatAs ( Type clrTypeSrc, Type clrTypeDst ) : void
clrTypeSrc Type
clrTypeDst Type
Результат void