C# 클래스 System.Xml.Xsl.IlGen.GenerateHelper

Contains helper methods used during the code generation phase.
파일 보기 프로젝트 열기: dotnet/corefx 1 사용 예제들

공개 메소드들

메소드 설명
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