Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
255da99
Progress towards GetMethodTableName
davidwrighton Jul 9, 2024
0671cd4
Move metadata reader into helpers
davidwrighton Jul 11, 2024
636bb2b
Simplify storage of saved metadata copy for reflection emit scenarios
davidwrighton Jul 11, 2024
d359ed9
Fix bugs found when trying to actually use this logic
davidwrighton Jul 11, 2024
fc24cd4
Update contract documentation
davidwrighton Jul 11, 2024
d93e98b
Merge branch 'main' into cdac-methodtable-name
davidwrighton Jul 11, 2024
fead409
Feedback
davidwrighton Jul 12, 2024
d2b36fc
Add support for the EEName DacStream
davidwrighton Jul 15, 2024
8fdcc24
- Refactor to expose TypeHandle exclusively from the contracts
davidwrighton Jul 15, 2024
30da32c
Address concern around data structure for DynamicMetadata
davidwrighton Jul 15, 2024
87f7003
Merge branch 'cdac-methodtable-name' of github.com:davidwrighton/runt…
davidwrighton Jul 15, 2024
143cb86
Fix build break
davidwrighton Jul 15, 2024
7284f83
Fix musl build issue
davidwrighton Jul 16, 2024
2d5ec4f
Cherrypick RuntimeTypeSystem changes from #104759
lambdageek Jul 16, 2024
8e2dbca
update tests
lambdageek Jul 16, 2024
e3964f9
start GetMethodDescDataImpl
lambdageek Jul 8, 2024
38d0a51
WIP: managed GetMethodDescData skeleton
lambdageek Jul 8, 2024
9d88f19
wip: MethodDesc
lambdageek Jul 9, 2024
4a4c3a4
add MethodDescChunk
lambdageek Jul 10, 2024
510a10f
WIP: validating a MethodDesc
lambdageek Jul 11, 2024
419cb11
checkpoint: MethodDesc validation
lambdageek Jul 12, 2024
1321aa9
update contract
lambdageek Jul 12, 2024
dcc4540
fix RuntimeTypeSystem unit tests
lambdageek Jul 12, 2024
c31bdcf
update contract
lambdageek Jul 15, 2024
7517e32
fix GetMethodDescChunkPointerMayThrow
lambdageek Jul 15, 2024
54ab23e
update tests
lambdageek Jul 16, 2024
27fcddc
fixup rebase
lambdageek Jul 16, 2024
2a41206
Remove unnecessary usings
davidwrighton Jul 16, 2024
dbe3cf4
- Transform magic numbers from DacStreams implementation into constants
davidwrighton Jul 16, 2024
3a35f41
Feedback
davidwrighton Jul 16, 2024
1eb3b36
Merge branch 'cdac-methodtable-name' into cdac-methoddescname
davidwrighton Jul 17, 2024
785ced4
Add non-contract portion of GetMethodDescName
davidwrighton Jul 19, 2024
01d3d24
Remove default parameter from AppendMethodInternal
davidwrighton Aug 7, 2024
1b6b6fd
Merge branch 'main' of github.com:dotnet/runtime into cdac-methoddesc…
davidwrighton Aug 7, 2024
0c7a254
First stab at the actual contract implementations for the MethodDesc …
davidwrighton Aug 8, 2024
ec9eb54
Commit current state
davidwrighton Aug 8, 2024
54ded9a
It Works!
davidwrighton Aug 8, 2024
3ffb03b
Document the new contracts needed for generating MethodDesc names
davidwrighton Aug 8, 2024
e72cea6
Handle Path fallback scenario. Leave actual implementation/documentat…
davidwrighton Aug 9, 2024
c250bb8
Remove extra lines found in Loader_1.cs
davidwrighton Aug 9, 2024
c3ebfdb
Address code review comments
davidwrighton Aug 9, 2024
bcf9fba
Adjust cdac naming to new model
davidwrighton Aug 12, 2024
de846a5
Merge branch 'main' into cdac-methoddescname
davidwrighton Aug 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
It Works!
  • Loading branch information
davidwrighton committed Aug 8, 2024
commit 54ded9a67765d98be4df17ddce60c77804bdd53f
37 changes: 36 additions & 1 deletion src/native/managed/cdacreader/src/Helpers/EcmaMetadataReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,42 @@ public uint GetColumnAsConstant(EcmaMetadataCursor c, MetadataColumnIndex col_id

public System.ReadOnlySpan<byte> GetColumnAsBlob(EcmaMetadataCursor c, MetadataColumnIndex col_idx)
{
throw new NotImplementedException();
if (columnTypes[(int)col_idx] != ColumnType.Blob)
throw new NotImplementedException();

uint rawResult = GetColumnRaw(c, col_idx);
if (rawResult == 0)
return default;

checked
{
ReadOnlySpan<byte> blobHeap = _ecmaMetadata.BlobHeap.Span;
int curOffset = (int)rawResult;

byte headerByte1 = blobHeap[curOffset];
int size;
if ((headerByte1 & 0x80) == 0)
{
size = headerByte1;
}
else if ((headerByte1 & 0xC) == 0x80)
{
byte headerByte2 = blobHeap[++curOffset];
size = headerByte1 & 0x3F << 8 + headerByte2;
}
else
{
byte headerByte2 = blobHeap[++curOffset];
byte headerByte3 = blobHeap[++curOffset];
byte headerByte4 = blobHeap[++curOffset];
size = (headerByte1 & 0x3F << 24) +
(headerByte2 << 16) +
(headerByte3 << 8) +
headerByte4;
}
curOffset++;
return blobHeap.Slice(curOffset, size);
}
}

public uint GetColumnAsToken(EcmaMetadataCursor c, MetadataColumnIndex col_idx)
Expand Down
22 changes: 20 additions & 2 deletions src/native/managed/cdacreader/src/Legacy/TypeNameBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,15 @@ private enum ParseState
private int InstNesting;
private Stack<int>? GenericStartsStack;

private TypeNameBuilder(StringBuilder typeString, Target target, TypeNameFormat format)
private TypeNameBuilder(StringBuilder typeString, Target target, TypeNameFormat format, bool initialStateIsName = false)
{
TypeString = typeString;
Target = target;
UseAngleBracketsForGenerics = format.HasFlag(TypeNameFormat.FormatAngleBrackets);
State = ParseState.Start;
if (initialStateIsName)
State = ParseState.Name;
else
State = ParseState.Start;
}

public static void AppendMethodInternal(Target target, StringBuilder stringBuilder, Contracts.MethodDescHandle method, TypeNameFormat format)
Expand Down Expand Up @@ -121,6 +124,12 @@ public static void AppendMethodImpl(Target target, StringBuilder stringBuilder,
stringBuilder.Append(reader.GetColumnAsUtf8String(cursor, MetadataColumnIndex.MethodDef_Name));
}

ReadOnlySpan<TypeHandle> genericMethodInstantiation = runtimeTypeSystem.GetGenericMethodInstantiation(method);
if (genericMethodInstantiation.Length > 0 && !runtimeTypeSystem.IsGenericMethodDefinition(method))
{
AppendInst(target, stringBuilder, genericMethodInstantiation, format);
}

if (format.HasFlag(TypeNameFormat.FormatSignature))
{
ReadOnlySpan<byte> signature;
Expand Down Expand Up @@ -303,6 +312,15 @@ private static void AppendTypeCore(ref TypeNameBuilder tnb, Contracts.TypeHandle
}
}

// Append a square-bracket-enclosed, comma-separated list of n type parameters in inst to the string s
// and enclose each parameter in square brackets to disambiguate the commas
// The following flags in the FormatFlags argument are significant: FormatNamespace FormatFullInst FormatAssembly FormatNoVersion
private static void AppendInst(Target target, StringBuilder stringBuilder, ReadOnlySpan<TypeHandle> inst, TypeNameFormat format)
{
TypeNameBuilder tnb = new (stringBuilder, target, format, initialStateIsName: true);
AppendInst(ref tnb, inst, format);
}

private static void AppendInst(ref TypeNameBuilder tnb, ReadOnlySpan<TypeHandle> inst, TypeNameFormat format)
{
tnb.OpenGenericArguments();
Expand Down