C# Class System.Xml.Xsl.IlGen.GenerateHelper

Contains helper methods used during the code generation phase.
Afficher le fichier Open project: dotnet/corefx Class Usage Examples

Méthodes publiques

Méthode Description
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"

Private Methods

Méthode Description
EnsureWriter ( ) : void
GetFileName ( ISourceLineInfo sourceInfo ) : string
MarkSequencePoint ( ISourceLineInfo sourceInfo ) : void
TraceCall ( OpCode opcode, MethodInfo meth ) : void

Method Details

AddSortKey() public méthode

public AddSortKey ( XmlQueryType keyType ) : void
keyType XmlQueryType
Résultat void

BranchAndMark() public méthode

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
Résultat void

Call() public méthode

public Call ( MethodInfo meth ) : void
meth System.Reflection.MethodInfo
Résultat void

CallArithmeticOp() public méthode

public CallArithmeticOp ( QilNodeType opType, XmlTypeCode code ) : void
opType QilNodeType
code XmlTypeCode
Résultat void

CallCacheCount() public méthode

public CallCacheCount ( Type itemStorageType ) : void
itemStorageType System.Type
Résultat void

CallCacheItem() public méthode

public CallCacheItem ( Type itemStorageType ) : void
itemStorageType System.Type
Résultat void

CallCompare() public méthode

public CallCompare ( XmlTypeCode code ) : void
code XmlTypeCode
Résultat void

CallCompareEquals() public méthode

public CallCompareEquals ( XmlTypeCode code ) : void
code XmlTypeCode
Résultat void

CallConcatStrings() public méthode

public CallConcatStrings ( int cStrings ) : void
cStrings int
Résultat void

CallEndRtfConstruction() public méthode

public CallEndRtfConstruction ( ) : void
Résultat void

CallEndSequenceConstruction() public méthode

public CallEndSequenceConstruction ( ) : void
Résultat void

CallEndTree() public méthode

public CallEndTree ( ) : void
Résultat void

CallGetAtomizedName() public méthode

public CallGetAtomizedName ( int idxName ) : void
idxName int
Résultat void

CallGetCollation() public méthode

public CallGetCollation ( int idxName ) : void
idxName int
Résultat void

CallGetEarlyBoundObject() public méthode

public CallGetEarlyBoundObject ( int idxObj, Type clrType ) : void
idxObj int
clrType System.Type
Résultat void

CallGetGlobalValue() public méthode

public CallGetGlobalValue ( int idxValue, Type clrType ) : void
idxValue int
clrType System.Type
Résultat void

CallGetNameFilter() public méthode

public CallGetNameFilter ( int idxFilter ) : void
idxFilter int
Résultat void

CallGetParameter() public méthode

public CallGetParameter ( string localName, string namespaceUri ) : void
localName string
namespaceUri string
Résultat void

CallGetTypeFilter() public méthode

public CallGetTypeFilter ( XPathNodeType nodeType ) : void
nodeType XPathNodeType
Résultat void

CallParseTagName() public méthode

public CallParseTagName ( GenerateNameType nameType ) : void
nameType GenerateNameType
Résultat void

CallSetGlobalValue() public méthode

public CallSetGlobalValue ( Type clrType ) : void
clrType System.Type
Résultat void

CallStartElementContent() public méthode

public CallStartElementContent ( ) : void
Résultat void

CallStartRtfConstruction() public méthode

public CallStartRtfConstruction ( string baseUri ) : void
baseUri string
Résultat void

CallStartSequenceConstruction() public méthode

public CallStartSequenceConstruction ( ) : void
Résultat void

CallStartTree() public méthode

public CallStartTree ( XPathNodeType rootType ) : void
rootType XPathNodeType
Résultat void

CallSyncToNavigator() public méthode

Call a static method which attempts to reuse a navigator.
public CallSyncToNavigator ( ) : void
Résultat void

CallToken() public méthode

public CallToken ( MethodInfo meth ) : void
meth System.Reflection.MethodInfo
Résultat void

CallValueAs() public méthode

public CallValueAs ( Type clrType ) : void
clrType System.Type
Résultat void

CallWriteEndAttribute() public méthode

public CallWriteEndAttribute ( bool callChk ) : void
callChk bool
Résultat void

CallWriteEndComment() public méthode

public CallWriteEndComment ( ) : void
Résultat void

CallWriteEndElement() public méthode

public CallWriteEndElement ( GenerateNameType nameType, bool callChk ) : void
nameType GenerateNameType
callChk bool
Résultat void

CallWriteEndPI() public méthode

public CallWriteEndPI ( ) : void
Résultat void

CallWriteEndRoot() public méthode

public CallWriteEndRoot ( ) : void
Résultat void

CallWriteNamespaceDecl() public méthode

public CallWriteNamespaceDecl ( bool callChk ) : void
callChk bool
Résultat void

CallWriteStartAttribute() public méthode

public CallWriteStartAttribute ( GenerateNameType nameType, bool callChk ) : void
nameType GenerateNameType
callChk bool
Résultat void

CallWriteStartComment() public méthode

public CallWriteStartComment ( ) : void
Résultat void

CallWriteStartElement() public méthode

public CallWriteStartElement ( GenerateNameType nameType, bool callChk ) : void
nameType GenerateNameType
callChk bool
Résultat void

CallWriteStartPI() public méthode

public CallWriteStartPI ( ) : void
Résultat void

CallWriteStartRoot() public méthode

public CallWriteStartRoot ( ) : void
Résultat void

CallWriteString() public méthode

public CallWriteString ( bool disableOutputEscaping, bool callChk ) : void
disableOutputEscaping bool
callChk bool
Résultat void

Construct() public méthode

public Construct ( ConstructorInfo constr ) : void
constr ConstructorInfo
Résultat void

ConstructLiteralDecimal() public méthode

public ConstructLiteralDecimal ( decimal dec ) : void
dec decimal
Résultat void

ConstructLiteralQName() public méthode

public ConstructLiteralQName ( string localName, string namespaceName ) : void
localName string
namespaceName string
Résultat void

ConvBranchToBool() public méthode

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
Résultat void

DebugEndScope() public méthode

End a new debugging scope.
public DebugEndScope ( ) : void
Résultat void

DebugSequencePoint() public méthode

Correlate the current IL generation position with the current source position.
public DebugSequencePoint ( ISourceLineInfo sourceInfo ) : void
sourceInfo ISourceLineInfo
Résultat void

DebugStartScope() public méthode

Begin a new variable debugging scope.
public DebugStartScope ( ) : void
Résultat void

DeclareLocal() public méthode

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
Résultat LocalBuilder

DefineLabel() public méthode

public DefineLabel ( ) : Label
Résultat Label

Emit() public méthode

public Emit ( OpCode opcode ) : void
opcode OpCode
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, ConstructorInfo constrInfo ) : void
opcode OpCode
constrInfo ConstructorInfo
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, FieldInfo fldInfo ) : void
opcode OpCode
fldInfo FieldInfo
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, Label lblVal ) : void
opcode OpCode
lblVal Label
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, LocalBuilder locBldr ) : void
opcode OpCode
locBldr LocalBuilder
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, MethodInfo methInfo ) : void
opcode OpCode
methInfo MethodInfo
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, Type typVal ) : void
opcode OpCode
typVal Type
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, byte byteVal ) : void
opcode OpCode
byteVal byte
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, double dblVal ) : void
opcode OpCode
dblVal double
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, float fltVal ) : void
opcode OpCode
fltVal float
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, int intVal ) : void
opcode OpCode
intVal int
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, long longVal ) : void
opcode OpCode
longVal long
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, sbyte sbyteVal ) : void
opcode OpCode
sbyteVal sbyte
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, short shrtVal ) : void
opcode OpCode
shrtVal short
Résultat void

Emit() public méthode

public Emit ( OpCode opcode, string strVal ) : void
opcode OpCode
strVal string
Résultat void

EmitUnconditionalBranch() public méthode

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
Résultat void

GenerateHelper() public méthode

Cache metadata used during code-generation phase.
public GenerateHelper ( XmlILModule module, bool isDebug ) : System
module XmlILModule
isDebug bool
Résultat System

LoadBoolean() public méthode

public LoadBoolean ( bool boolVal ) : void
boolVal bool
Résultat void

LoadInteger() public méthode

Generate the optimal Ldc_I4 instruction based on intVal.
public LoadInteger ( int intVal ) : void
intVal int
Résultat void

LoadParameter() public méthode

public LoadParameter ( int paramPos ) : void
paramPos int
Résultat void

LoadQueryContext() public méthode

public LoadQueryContext ( ) : void
Résultat void

LoadQueryOutput() public méthode

public LoadQueryOutput ( ) : void
Résultat void

LoadQueryRuntime() public méthode

public LoadQueryRuntime ( ) : void
Résultat void

LoadType() public méthode

public LoadType ( Type clrTyp ) : void
clrTyp Type
Résultat void

LoadXsltLibrary() public méthode

public LoadXsltLibrary ( ) : void
Résultat void

MarkLabel() public méthode

public MarkLabel ( Label lbl ) : void
lbl Label
Résultat void

MethodBegin() public méthode

Begin generating code within a new method.
public MethodBegin ( MethodBase methInfo, ISourceLineInfo sourceInfo, bool initWriters ) : void
methInfo MethodBase
sourceInfo ISourceLineInfo
initWriters bool
Résultat void

MethodEnd() public méthode

Generate "ret" instruction and branch fixup jump table.
public MethodEnd ( ) : void
Résultat void

SetParameter() public méthode

public SetParameter ( object paramId ) : void
paramId object
Résultat void

TailCall() public méthode

public TailCall ( MethodInfo meth ) : void
meth MethodInfo
Résultat void

TestAndBranch() public méthode

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
Résultat void

TreatAs() public méthode

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
Résultat void