diff options
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/slang.natvis | 63 |
1 files changed, 57 insertions, 6 deletions
diff --git a/source/slang/slang.natvis b/source/slang/slang.natvis index f7b50437e..bf4e325e3 100644 --- a/source/slang/slang.natvis +++ b/source/slang/slang.natvis @@ -96,6 +96,7 @@ </CustomListItems> <Item Name="[value]" Condition="op == Slang::kIROp_StringLit">((IRStringLit*)this)->value.stringVal.chars,[((IRStringLit*)this)->value.stringVal.numChars]s8</Item> <Item Name="[value]" Condition="op == Slang::kIROp_IntLit">((IRIntLit*)this)->value.intVal</Item> + <!-- <Synthetic Name="[operands]"> <DisplayString>{{count = {operandCount}}}</DisplayString> <Expand> @@ -106,16 +107,66 @@ </ArrayItems> </Expand> </Synthetic> - <Item Name="[parent]">parent</Item> + --> + <CustomListItems MaxItemsPerView="10"> + <Variable Name="index" InitialValue="0"/> + <Variable Name="nameDecoration" InitialValue="(IRInst*)nullptr"/> + <Variable Name="child" InitialValue="(IRInst*)nullptr"/> + <Variable Name="pOperandInst" InitialValue="(IRInst*)nullptr"/> + <Loop Condition="index < operandCount"> + <Exec>pOperandInst = ((IRUse*)(&(typeUse) + 1 + index))->usedValue </Exec> + <Exec>child = pOperandInst->m_decorationsAndChildren.first</Exec> + <Exec>nameDecoration = 0</Exec> + <Loop Condition="child != 0"> + <If Condition="child->op == Slang::kIROp_NameHintDecoration"> + <Exec>nameDecoration = child</Exec> + <Break/> + </If> + <If Condition="child->op == Slang::kIROp_ExportDecoration && (nameDecoration == 0 || nameDecoration->op != Slang::kIROp_NameHintDecoration)"> + <Exec>nameDecoration = child</Exec> + </If> + <If Condition="child->op == Slang::kIROp_ImportDecoration && (nameDecoration == 0 || nameDecoration->op != Slang::kIROp_NameHintDecoration)"> + <Exec>nameDecoration = child</Exec> + </If> + <Exec>child = child->next</Exec> + </Loop> + <Item Condition="nameDecoration != 0" Name="[operand{index}] : {((Slang::IRStringLit*)(((Slang::IRUse*)(nameDecoration + 1))->usedValue))->value.stringVal.chars,[((Slang::IRStringLit*)(((Slang::IRUse*)(nameDecoration + 1))->usedValue))->value.stringVal.numChars]s8}">*pOperandInst</Item> + <Item Condition="nameDecoration == 0" Name="[operand{index}]">*pOperandInst</Item> + <Exec>index = index + 1</Exec> + </Loop> + </CustomListItems> <Synthetic Name="[decorations/children]"> <Expand> - <LinkedListItems> - <HeadPointer>m_decorationsAndChildren.first</HeadPointer> - <NextPointer>next</NextPointer> - <ValueNode>this</ValueNode> - </LinkedListItems> + <CustomListItems MaxItemsPerView="5000"> + <Variable Name="pItem" InitialValue="m_decorationsAndChildren.first"/> + <Variable Name="nameDecoration" InitialValue="(IRInst*)nullptr"/> + <Variable Name="child" InitialValue="(IRInst*)nullptr"/> + <Variable Name="index" InitialValue="0"/> + <Loop Condition="pItem != 0"> + <Exec>child = pItem->m_decorationsAndChildren.first </Exec> + <Exec>nameDecoration = 0</Exec> + <Loop Condition="child != 0"> + <If Condition="child->op == Slang::kIROp_NameHintDecoration"> + <Exec>nameDecoration = child</Exec> + <Break/> + </If> + <If Condition="child->op == Slang::kIROp_ExportDecoration && (nameDecoration == 0 || nameDecoration->op != Slang::kIROp_NameHintDecoration)"> + <Exec>nameDecoration = child</Exec> + </If> + <If Condition="child->op == Slang::kIROp_ImportDecoration && (nameDecoration == 0 || nameDecoration->op != Slang::kIROp_NameHintDecoration)"> + <Exec>nameDecoration = child</Exec> + </If> + <Exec>child = child->next</Exec> + </Loop> + <Item Condition="nameDecoration != 0" Name="[{index}] : {((Slang::IRStringLit*)(((Slang::IRUse*)(nameDecoration + 1))->usedValue))->value.stringVal.chars,[((Slang::IRStringLit*)(((Slang::IRUse*)(nameDecoration + 1))->usedValue))->value.stringVal.numChars]s8}">*pItem</Item> + <Item Condition="nameDecoration == 0">*pItem</Item> + <Exec>pItem = pItem->next</Exec> + <Exec>index = index + 1</Exec> + </Loop> + </CustomListItems> </Expand> </Synthetic> + <Item Name="[parent]">parent</Item> <Synthetic Name="[uses]"> <Expand> <LinkedListItems> |
