IKVM11  11
Java SE 11 Virtual Machine for .NET
Loading...
Searching...
No Matches
IKVM.Reflection.Emit.SequencePointEncoder Struct Reference

Helper to encode sequence points. More...

Public Member Functions

 SequencePointEncoder (BlobBuilder writer)
 initializes a new instance.
 
void LocalSignature (StandaloneSignatureHandle localSignature)
 Encodes the local signature.
 
void SequencePoint (DocumentHandle document, int offset, int startLine, int startColumn, int endLine, int endColumn, ref DocumentHandle previousDocument)
 Encodes a new sequence point. previousDocument is used to determine whether a new document record is required to be written first.
 

Public Attributes

readonly BlobBuilder writer
 
bool localSignatureEncoded = false
 
bool sequencePointEncoded = false
 
int prevOffset = -1
 
int prevNonHiddenStartLine = -1
 
int prevNonHiddenStartColumn = -1
 

Detailed Description

Helper to encode sequence points.

Definition at line 12 of file SequencePointEncoder.cs.

Constructor & Destructor Documentation

◆ SequencePointEncoder()

IKVM.Reflection.Emit.SequencePointEncoder.SequencePointEncoder ( BlobBuilder writer)

initializes a new instance.

Parameters
writer

Definition at line 27 of file SequencePointEncoder.cs.

28 {
29 this.writer = writer ?? throw new ArgumentNullException(nameof(writer));
30 }

Member Function Documentation

◆ LocalSignature()

void IKVM.Reflection.Emit.SequencePointEncoder.LocalSignature ( StandaloneSignatureHandle localSignature)

Encodes the local signature.

Parameters
localSignature
initialDocument

<param name="previousDocument".

Definition at line 38 of file SequencePointEncoder.cs.

39 {
41 throw new InvalidOperationException("Local Signature already encoded.");
43 throw new InvalidOperationException("Sequence point already encoded.");
44
45 // write local signature
46 writer.WriteCompressedInteger(MetadataTokens.GetRowNumber(localSignature));
47
49 }

◆ SequencePoint()

void IKVM.Reflection.Emit.SequencePointEncoder.SequencePoint ( DocumentHandle document,
int offset,
int startLine,
int startColumn,
int endLine,
int endColumn,
ref DocumentHandle previousDocument )

Encodes a new sequence point. previousDocument is used to determine whether a new document record is required to be written first.

Parameters
document
offset
startLine
startColumn
endLine
endColumn
previousDocument
Exceptions
InvalidOperationException

Definition at line 62 of file SequencePointEncoder.cs.

63 {
64 if (localSignatureEncoded == false)
65 throw new InvalidOperationException("Local signature not already encoded.");
66 if (offset <= prevOffset)
67 throw new ArgumentException("Subsequent sequence points must appear at an offset greater than the previous sequence point.");
68
69 // document passed, and different from previous, write new document-record
70 if (document.IsNil == false && document != previousDocument)
71 {
72 // this isn't the initial header document, but a document-record, which requires a zero IL offset
74 writer.WriteCompressedInteger(0);
75
76 writer.WriteCompressedInteger(MetadataTokens.GetRowNumber(document));
77 previousDocument = document;
78 }
79
80 // IL offset or delta IL offset
81 if (prevOffset == -1)
82 writer.WriteCompressedInteger(offset);
83 else
84 writer.WriteCompressedInteger(offset - prevOffset);
85
86 // hidden or non-hidden sequence point
87 if (startLine == System.Reflection.Metadata.SequencePoint.HiddenLine)
88 {
89 writer.WriteCompressedInteger(0);
90 writer.WriteCompressedInteger(0);
91 }
92 else
93 {
94 var deltaLines = endLine - startLine;
95 var deltaColumns = endColumn - startColumn;
96 Debug.Assert(startLine == System.Reflection.Metadata.SequencePoint.HiddenLine || deltaLines > 0 || deltaColumns > 0);
97
98 // write change in lines; then change in columns (signed if change in lines)
99 writer.WriteCompressedInteger(deltaLines);
100 if (deltaLines == 0)
101 writer.WriteCompressedInteger(deltaColumns);
102 else
103 writer.WriteCompressedSignedInteger(deltaColumns);
104
105 // delta start lines & columns
106 if (prevNonHiddenStartLine == -1)
107 {
108 Debug.Assert(prevNonHiddenStartColumn == -1);
109 writer.WriteCompressedInteger(startLine);
110 writer.WriteCompressedInteger(startColumn);
111 }
112 else
113 {
114 writer.WriteCompressedSignedInteger(startLine - prevNonHiddenStartLine);
115 writer.WriteCompressedSignedInteger(startColumn - prevNonHiddenStartColumn);
116 }
117
118 prevNonHiddenStartLine = startLine;
119 prevNonHiddenStartColumn = startColumn;
120 }
121
122 prevOffset = offset;
124 }

Member Data Documentation

◆ localSignatureEncoded

bool IKVM.Reflection.Emit.SequencePointEncoder.localSignatureEncoded = false

Definition at line 17 of file SequencePointEncoder.cs.

◆ prevNonHiddenStartColumn

int IKVM.Reflection.Emit.SequencePointEncoder.prevNonHiddenStartColumn = -1

Definition at line 21 of file SequencePointEncoder.cs.

◆ prevNonHiddenStartLine

int IKVM.Reflection.Emit.SequencePointEncoder.prevNonHiddenStartLine = -1

Definition at line 20 of file SequencePointEncoder.cs.

◆ prevOffset

int IKVM.Reflection.Emit.SequencePointEncoder.prevOffset = -1

Definition at line 19 of file SequencePointEncoder.cs.

◆ sequencePointEncoded

bool IKVM.Reflection.Emit.SequencePointEncoder.sequencePointEncoded = false

Definition at line 18 of file SequencePointEncoder.cs.

◆ writer

readonly BlobBuilder IKVM.Reflection.Emit.SequencePointEncoder.writer

Definition at line 15 of file SequencePointEncoder.cs.


The documentation for this struct was generated from the following file: