added IsPointer member to DNA field data
This commit is contained in:
@@ -234,6 +234,28 @@ namespace CodeGenerator {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
ctd.Members.Add(cmp);
|
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 };
|
var cc = new CodeConstructor() { Attributes = MemberAttributes.Public };
|
||||||
|
|
||||||
@@ -242,7 +264,8 @@ namespace CodeGenerator {
|
|||||||
new(typeof(string), "originalType"),
|
new(typeof(string), "originalType"),
|
||||||
new(typeof(string), "originalName"),
|
new(typeof(string), "originalName"),
|
||||||
new(typeof(string), "underlyingType"),
|
new(typeof(string), "underlyingType"),
|
||||||
new(typeof(int), "size")
|
new(typeof(int), "size"),
|
||||||
|
new(typeof(bool), "isPointer")
|
||||||
});
|
});
|
||||||
|
|
||||||
cc.Statements.AddRange(new CodeAssignStatement[] {
|
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(), "OriginalType"), new CArgRefExp("originalType")),
|
||||||
new(new CFieldRefExp(new CThisRefExp(), "OriginalName"), new CArgRefExp("originalName")),
|
new(new CFieldRefExp(new CThisRefExp(), "OriginalName"), new CArgRefExp("originalName")),
|
||||||
new(new CFieldRefExp(new CThisRefExp(), "OriginalType"), new CArgRefExp("underlyingType")),
|
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);
|
ctd.Members.Add(cc);
|
||||||
@@ -327,6 +351,15 @@ namespace CodeGenerator {
|
|||||||
BlendFile.Dna1Body body) {
|
BlendFile.Dna1Body body) {
|
||||||
string t;
|
string t;
|
||||||
int size = body.Lengths[field.IdxType];
|
int size = body.Lengths[field.IdxType];
|
||||||
|
|
||||||
|
bool isPointer = false;
|
||||||
|
|
||||||
|
if (field.Name.StartsWith('*'))
|
||||||
|
{
|
||||||
|
size = 4;
|
||||||
|
isPointer = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (field.Name.Contains('[')) {
|
if (field.Name.Contains('[')) {
|
||||||
CodeMemberField amf = CreateArrayMemberField(field);
|
CodeMemberField amf = CreateArrayMemberField(field);
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
@@ -347,14 +380,15 @@ namespace CodeGenerator {
|
|||||||
{
|
{
|
||||||
t = field.Type;
|
t = field.Type;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeAttributeDeclaration cad = new("DNAFieldAttribute");
|
CodeAttributeDeclaration cad = new("DNAFieldAttribute");
|
||||||
cad.Arguments.AddRange(new CodeAttributeArgumentCollection() {
|
cad.Arguments.AddRange(new CodeAttributeArgumentCollection() {
|
||||||
new(new CodePrimitiveExpression(index)),
|
new(new CodePrimitiveExpression(index)),
|
||||||
new(new CodePrimitiveExpression(field.Type)),
|
new(new CodePrimitiveExpression(field.Type)),
|
||||||
new(new CodePrimitiveExpression(field.Name)),
|
new(new CodePrimitiveExpression(field.Name)),
|
||||||
new(new CodePrimitiveExpression(t)),
|
new(new CodePrimitiveExpression(t)),
|
||||||
new(new CodePrimitiveExpression(size))
|
new(new CodePrimitiveExpression(size)),
|
||||||
|
new(new CodePrimitiveExpression(isPointer))
|
||||||
});
|
});
|
||||||
return cad;
|
return cad;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
namespace CodeGenerator {
|
namespace CodeGenerator {
|
||||||
public static class StrExt {
|
public static class StrExt {
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string ParseFName(this string str) {
|
public static string ParseFName(this string str) {
|
||||||
str = str.Replace("*", "ptr_");
|
str = str.Replace("*", "ptr_");
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static string ParseFType(this string str) {
|
public static string ParseFType(this string str) {
|
||||||
return str switch {
|
return str switch {
|
||||||
"char" => typeof(char).AssemblyQualifiedName,
|
"char" => typeof(char).AssemblyQualifiedName,
|
||||||
|
|||||||
Reference in New Issue
Block a user