added IsPointer member to DNA field data

This commit is contained in:
mm00
2025-02-19 17:07:37 +01:00
parent 095986af06
commit f327f18b57
2 changed files with 42 additions and 4 deletions

View File

@@ -234,6 +234,28 @@ namespace CodeGenerator {
}
};
ctd.Members.Add(cmp);
cmf = new CodeMemberField(typeof(bool), "_isPointer") {
Attributes = MemberAttributes.Private
};
ctd.Members.Add(cmf);
cmp = new CodeMemberProperty() {
Name = "IsPointer",
Type = new CodeTypeReference(typeof(bool)),
Attributes = MemberAttributes.Public,
HasGet = true,
GetStatements = {
new CodeMethodReturnStatement(new CodeSnippetExpression("_isPointer"))
},
HasSet = true,
SetStatements = {
new CodeAssignStatement(new CFieldRefExp(new CThisRefExp(), "_isPointer"), new CArgRefExp("value"))
}
};
ctd.Members.Add(cmp);
var cc = new CodeConstructor() { Attributes = MemberAttributes.Public };
@@ -242,7 +264,8 @@ namespace CodeGenerator {
new(typeof(string), "originalType"),
new(typeof(string), "originalName"),
new(typeof(string), "underlyingType"),
new(typeof(int), "size")
new(typeof(int), "size"),
new(typeof(bool), "isPointer")
});
cc.Statements.AddRange(new CodeAssignStatement[] {
@@ -250,7 +273,8 @@ namespace CodeGenerator {
new(new CFieldRefExp(new CThisRefExp(), "OriginalType"), new CArgRefExp("originalType")),
new(new CFieldRefExp(new CThisRefExp(), "OriginalName"), new CArgRefExp("originalName")),
new(new CFieldRefExp(new CThisRefExp(), "OriginalType"), new CArgRefExp("underlyingType")),
new(new CFieldRefExp(new CThisRefExp(), "Size"), new CArgRefExp("size"))
new(new CFieldRefExp(new CThisRefExp(), "Size"), new CArgRefExp("size")),
new(new CFieldRefExp(new CThisRefExp(), "IsPointer"), new CArgRefExp("isPointer"))
});
ctd.Members.Add(cc);
@@ -327,6 +351,15 @@ namespace CodeGenerator {
BlendFile.Dna1Body body) {
string t;
int size = body.Lengths[field.IdxType];
bool isPointer = false;
if (field.Name.StartsWith('*'))
{
size = 4;
isPointer = true;
}
if (field.Name.Contains('[')) {
CodeMemberField amf = CreateArrayMemberField(field);
var sb = new StringBuilder();
@@ -347,14 +380,15 @@ namespace CodeGenerator {
{
t = field.Type;
}
CodeAttributeDeclaration cad = new("DNAFieldAttribute");
cad.Arguments.AddRange(new CodeAttributeArgumentCollection() {
new(new CodePrimitiveExpression(index)),
new(new CodePrimitiveExpression(field.Type)),
new(new CodePrimitiveExpression(field.Name)),
new(new CodePrimitiveExpression(t)),
new(new CodePrimitiveExpression(size))
new(new CodePrimitiveExpression(size)),
new(new CodePrimitiveExpression(isPointer))
});
return cad;
}