void DisassembleRecord(BamlContext ctx, BamlRecord record) { if (BamlNode.IsFooter(record)) { while (scopeStack.Count > 0 && !BamlNode.IsMatch(scopeStack.Peek(), record)) { scopeStack.Pop(); output.DecreaseIndent(); } if (scopeStack.Count > 0) { scopeStack.Pop(); output.DecreaseIndent(); } } output.Write(record.Type.ToString(), BamlToolTipReference.Create(GetRecordReference(record)), DecompilerReferenceFlags.Local | DecompilerReferenceFlags.Definition, BoxedTextColor.Keyword); if (handlerMap.TryGetValue(record.Type, out var handler)) { output.Write(" [", BoxedTextColor.Text); handler(ctx, record); output.Write("]", BoxedTextColor.Text); } output.WriteLine(); if (BamlNode.IsHeader(record)) { scopeStack.Push(record); output.IncreaseIndent(); } }
void DisassembleRecord(BamlContext ctx, BamlRecord record) { if (BamlNode.IsFooter(record)) { while (scopeStack.Count > 0 && !BamlNode.IsMatch(scopeStack.Peek(), record)) { scopeStack.Pop(); output.Unindent(); } if (scopeStack.Count > 0) { scopeStack.Pop(); output.Unindent(); } } output.WriteDefinition(record.Type.ToString(), BamlToolTipReference.Create(GetRecordReference(record)), TextTokenKind.Keyword, true); Action <BamlContext, BamlRecord> handler; if (handlerMap.TryGetValue(record.Type, out handler)) { output.Write(" [", TextTokenKind.Text); handler(ctx, record); output.Write("]", TextTokenKind.Text); } output.WriteLine(); if (BamlNode.IsHeader(record)) { scopeStack.Push(record); output.Indent(); } }
void WriteAssemblyId(BamlContext ctx, ushort id) { string reference; if (id == 0xffff) { reference = ctx.KnownThings.FrameworkAssembly.FullName; } else if (ctx.AssemblyIdMap.ContainsKey(id)) { reference = ctx.AssemblyIdMap[id].AssemblyFullName; } else { reference = null; } output.Write($"0x{id:x4}", BamlToolTipReference.Create(reference), DecompilerReferenceFlags.Local, BoxedTextColor.Number); }
void WriteAssemblyId(BamlContext ctx, ushort id) { string reference; if (id == 0xffff) { reference = ctx.KnownThings.FrameworkAssembly.FullName; } else if (ctx.AssemblyIdMap.ContainsKey(id)) { reference = ctx.AssemblyIdMap[id].AssemblyFullName; } else { reference = null; } output.WriteReference(string.Format("0x{0:x4}", id), BamlToolTipReference.Create(reference), TextTokenKind.Number, true); }
void WriteAttributeId(BamlContext ctx, ushort id) { string declType; string name; if (id > 0x7fff) { var knownMember = ctx.KnownThings.Members((KnownMembers)(-id)); declType = knownMember.DeclaringType.FullName; name = knownMember.Name; } else if (ctx.AttributeIdMap.ContainsKey(id)) { var attrInfo = ctx.AttributeIdMap[id]; if (attrInfo.OwnerTypeId > 0x7fff) { declType = ctx.KnownThings.Types((KnownTypes)(-attrInfo.OwnerTypeId)).FullName; } else if (ctx.TypeIdMap.ContainsKey(attrInfo.OwnerTypeId)) { declType = ctx.TypeIdMap[attrInfo.OwnerTypeId].TypeFullName; } else { declType = $"(0x{attrInfo.OwnerTypeId:x4})"; } name = attrInfo.Name; } else { declType = name = null; } string reference = null; if (declType is not null && name is not null) { reference = $"{IdentifierEscaper.Escape(declType)}::{IdentifierEscaper.Escape(name)}"; } output.Write($"0x{id:x4}", BamlToolTipReference.Create(reference), DecompilerReferenceFlags.Local, BoxedTextColor.Number); }
void WriteAttributeId(BamlContext ctx, ushort id) { string declType; string name; if (id > 0x7fff) { var knownMember = ctx.KnownThings.Members((KnownMembers)(-id)); declType = knownMember.DeclaringType.FullName; name = knownMember.Name; } else if (ctx.AttributeIdMap.ContainsKey(id)) { var attrInfo = ctx.AttributeIdMap[id]; if (attrInfo.OwnerTypeId > 0x7fff) { declType = ctx.KnownThings.Types((KnownTypes)(-attrInfo.OwnerTypeId)).FullName; } else if (ctx.TypeIdMap.ContainsKey(attrInfo.OwnerTypeId)) { declType = ctx.TypeIdMap[attrInfo.OwnerTypeId].TypeFullName; } else { declType = string.Format("(0x{0:x4})", attrInfo.OwnerTypeId); } name = attrInfo.Name; } else { declType = name = null; } string reference = null; if (declType != null && name != null) { reference = string.Format("{0}::{1}", IdentifierEscaper.Escape(declType), IdentifierEscaper.Escape(name)); } output.WriteReference(string.Format("0x{0:x4}", id), BamlToolTipReference.Create(reference), TextTokenKind.Number, true); }
void WriteStringId(BamlContext ctx, ushort id) { string str; if (id > 0x7fff) { str = ctx.KnownThings.Strings((short)-id); } else if (ctx.StringIdMap.ContainsKey(id)) { str = ctx.StringIdMap[id].Value; } else { str = null; } string reference = null; if (str is not null) { reference = SimpleTypeConverter.ToString(str, true); } output.Write($"0x{id:x4}", BamlToolTipReference.Create(reference), DecompilerReferenceFlags.Local, BoxedTextColor.Number); }
void WriteTypeId(BamlContext ctx, ushort id) { string reference; if (id > 0x7fff) { reference = ctx.KnownThings.Types((KnownTypes)(-id)).FullName; } else if (ctx.TypeIdMap.ContainsKey(id)) { reference = ctx.TypeIdMap[id].TypeFullName; } else { reference = null; } if (reference is not null) { reference = IdentifierEscaper.Escape(reference); } output.Write($"0x{id:x4}", BamlToolTipReference.Create(reference), DecompilerReferenceFlags.Local, BoxedTextColor.Number); }
void WriteStringId(BamlContext ctx, ushort id) { string str; if (id > 0x7fff) { str = ctx.KnownThings.Strings((short)-id); } else if (ctx.StringIdMap.ContainsKey(id)) { str = ctx.StringIdMap[id].Value; } else { str = null; } string reference = null; if (str != null) { reference = NumberVMUtils.ToString(str, true); } output.WriteReference(string.Format("0x{0:x4}", id), BamlToolTipReference.Create(reference), TextTokenKind.Number, true); }
void WriteTypeId(BamlContext ctx, ushort id) { string reference; if (id > 0x7fff) { reference = ctx.KnownThings.Types((KnownTypes)(-id)).FullName; } else if (ctx.TypeIdMap.ContainsKey(id)) { reference = ctx.TypeIdMap[id].TypeFullName; } else { reference = null; } if (reference != null) { reference = IdentifierEscaper.Escape(reference); } output.WriteReference(string.Format("0x{0:x4}", id), BamlToolTipReference.Create(reference), TextTokenKind.Number, true); }
void WriteRecordRef(BamlRecord record) => output.Write(record.Type.ToString(), BamlToolTipReference.Create(GetRecordReference(record)), DecompilerReferenceFlags.Local, BoxedTextColor.Keyword);
void WriteDefinition(string value, string def = null) { string str = SimpleTypeConverter.ToString(value, true); output.Write(str, BamlToolTipReference.Create(def ?? IdentifierEscaper.Escape(value)), DecompilerReferenceFlags.Local | DecompilerReferenceFlags.Definition, BoxedTextColor.String); }
void WriteRecordRef(BamlRecord record) { output.WriteReference(record.Type.ToString(), BamlToolTipReference.Create(GetRecordReference(record)), TextTokenKind.Keyword, true); }
void WriteDefinition(string value, string def = null) { string str = NumberVMUtils.ToString(value, true); output.WriteDefinition(str, BamlToolTipReference.Create(def ?? IdentifierEscaper.Escape(value)), TextTokenKind.String, true); }