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

@@ -235,6 +235,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 };
cc.Parameters.AddRange(new CParamDeclExp[] {
@@ -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();
@@ -354,7 +387,8 @@ namespace CodeGenerator {
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;
}

View File

@@ -1,10 +1,14 @@
using System.Runtime.CompilerServices;
namespace CodeGenerator {
public static class StrExt {
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static string ParseFName(this string str) {
str = str.Replace("*", "ptr_");
return str;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static string ParseFType(this string str) {
return str switch {
"char" => typeof(char).AssemblyQualifiedName,