added IsPointer member to DNA field data
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user