Added type size to custom attributes

This commit is contained in:
mm00
2025-02-19 18:47:19 +01:00
parent 380949122c
commit 2d2e45a8cf

View File

@@ -98,6 +98,8 @@ namespace CodeGenerator {
//Add the class to the namespace //Add the class to the namespace
ns.Types.Add(ctd); ns.Types.Add(ctd);
var totalSize = 0;
//Add the fields to the class //Add the fields to the class
Log($"Fields: {type.Fields.Count}"); Log($"Fields: {type.Fields.Count}");
for (var index = 0; index < type.Fields.Count; index++) { for (var index = 0; index < type.Fields.Count; index++) {
@@ -113,10 +115,17 @@ namespace CodeGenerator {
Log($"Generating field {field.Name}"); Log($"Generating field {field.Name}");
cmf = CreateMemberField(field); cmf = CreateMemberField(field);
} }
cmf.CustomAttributes.Add(GenerateDNAFieldAttribute(index, field, field.M_Parent.M_Parent));
var size = 0;
var attributes = GenerateDNAFieldAttribute(index, field, field.M_Parent.M_Parent, out size);
totalSize += size;
cmf.CustomAttributes.Add(attributes);
ctd.Members.Add(cmf); ctd.Members.Add(cmf);
} }
ctd.CustomAttributes[0].Arguments.Add(new CodeAttributeArgument(new CodePrimitiveExpression(totalSize)));
Log("Generating Parameterless constructor"); Log("Generating Parameterless constructor");
if(ctd.Members.Count > 0) if(ctd.Members.Count > 0)
ctd.Members.Add(GenerateParameterlessConstructor(type, ctd)); ctd.Members.Add(GenerateParameterlessConstructor(type, ctd));
@@ -330,17 +339,41 @@ namespace CodeGenerator {
} }
}; };
ctd.Members.Add(cmp); ctd.Members.Add(cmp);
cmf = new CodeMemberField(typeof(int), "_size") {
Attributes = MemberAttributes.Private
};
ctd.Members.Add(cmf);
cmp = new CodeMemberProperty() {
Name = "Size",
Type = new CodeTypeReference(typeof(int)),
Attributes = MemberAttributes.Public,
HasGet = true,
GetStatements = {
new CodeMethodReturnStatement(new CodeSnippetExpression("_size"))
},
HasSet = true,
SetStatements = {
new CodeAssignStatement(new CFieldRefExp(new CThisRefExp(), "_size"), new CArgRefExp("value"))
}
};
ctd.Members.Add(cmp);
var cc = new CodeConstructor() { Attributes = MemberAttributes.Public }; var cc = new CodeConstructor() { Attributes = MemberAttributes.Public };
cc.Parameters.AddRange(new CParamDeclExp[] { cc.Parameters.AddRange(new CParamDeclExp[] {
new(typeof(int), "originalIndex"), new(typeof(int), "originalIndex"),
new(typeof(string), "originalName") new(typeof(string), "originalName"),
new(typeof(int), "size")
}); });
cc.Statements.AddRange(new CodeAssignStatement[] { cc.Statements.AddRange(new CodeAssignStatement[] {
new(new CFieldRefExp(new CThisRefExp(), "OriginalIndex"), new CArgRefExp("originalIndex")), new(new CFieldRefExp(new CThisRefExp(), "OriginalIndex"), new CArgRefExp("originalIndex")),
new(new CFieldRefExp(new CThisRefExp(), "OriginalName"), new CArgRefExp("originalName")) new(new CFieldRefExp(new CThisRefExp(), "OriginalName"), new CArgRefExp("originalName")),
new(new CFieldRefExp(new CThisRefExp(), "Size"), new CArgRefExp("size"))
}); });
ctd.Members.Add(cc); ctd.Members.Add(cc);
@@ -348,15 +381,15 @@ namespace CodeGenerator {
} }
private static CodeAttributeDeclaration GenerateDNAFieldAttribute(int index, BlendFile.DnaField field, private static CodeAttributeDeclaration GenerateDNAFieldAttribute(int index, BlendFile.DnaField field,
BlendFile.Dna1Body body) { BlendFile.Dna1Body body, out int size) {
string t; string t;
int size = body.Lengths[field.IdxType]; size = body.Lengths[field.IdxType];
bool isPointer = false; bool isPointer = false;
if (field.Name.StartsWith('*')) if (field.Name.StartsWith('*'))
{ {
size = 4; size = 8;
isPointer = true; isPointer = true;
} }