feat(abcip): thread nested-struct template id so nested UDT members are addressable (#6)
This commit is contained in:
@@ -88,12 +88,18 @@ public static class CipTemplateObjectDecoder
|
||||
? AbCipDataType.Structure
|
||||
: (CipSymbolObjectDecoder.MapTypeCode(typeCode) ?? AbCipDataType.Structure);
|
||||
|
||||
// For a struct member the low 12 bits are the nested UDT's template instance id (same encoding as the
|
||||
// Symbol Object), NOT a primitive type code — capture it so the nested shape can be fetched. Use the
|
||||
// FULL 12-bit mask (not the byte-cast typeCode, which truncates a 12-bit id).
|
||||
var nestedTemplateId = isStruct ? (uint?)(info & MemberInfoTypeCodeMask) : null;
|
||||
|
||||
var memberName = i < memberNames.Length ? memberNames[i] : $"<member_{i}>";
|
||||
members.Add(new AbCipUdtMember(
|
||||
Name: memberName,
|
||||
Offset: offset,
|
||||
DataType: dataType,
|
||||
ArrayLength: arraySize == 0 ? 1 : arraySize));
|
||||
ArrayLength: arraySize == 0 ? 1 : arraySize,
|
||||
NestedTemplateId: nestedTemplateId));
|
||||
}
|
||||
|
||||
return new AbCipUdtShape(
|
||||
|
||||
Reference in New Issue
Block a user