mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-21 00:25:44 +00:00
ZoneCodeGenerator: Fix aligning wrong when custom aligning is set in size calculation
This commit is contained in:
parent
96f2067030
commit
c995a12001
@ -8,6 +8,7 @@
|
|||||||
public string FullName => string.IsNullOrEmpty(Namespace) ? Name : $"{Namespace}::{Name}";
|
public string FullName => string.IsNullOrEmpty(Namespace) ? Name : $"{Namespace}::{Name}";
|
||||||
|
|
||||||
public abstract int Alignment { get; }
|
public abstract int Alignment { get; }
|
||||||
|
public abstract bool ForceAlignment { get; }
|
||||||
public abstract int Size { get; }
|
public abstract int Size { get; }
|
||||||
|
|
||||||
protected DataType(string _namespace, string name, DataTypeType type)
|
protected DataType(string _namespace, string name, DataTypeType type)
|
||||||
|
@ -29,6 +29,7 @@ namespace ZoneCodeGenerator.Domain
|
|||||||
.Cast<DataTypeBaseType>()
|
.Cast<DataTypeBaseType>()
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
|
public override bool ForceAlignment => false;
|
||||||
public override int Size { get; }
|
public override int Size { get; }
|
||||||
public override int Alignment => Size;
|
public override int Alignment => Size;
|
||||||
|
|
||||||
|
@ -7,9 +7,11 @@ namespace ZoneCodeGenerator.Domain
|
|||||||
public DataTypeBaseType ParentType { get; }
|
public DataTypeBaseType ParentType { get; }
|
||||||
public List<EnumMember> Members { get; }
|
public List<EnumMember> Members { get; }
|
||||||
|
|
||||||
|
public override bool ForceAlignment => ParentType.ForceAlignment;
|
||||||
public override int Size => ParentType.Size;
|
public override int Size => ParentType.Size;
|
||||||
public override int Alignment => ParentType.Alignment;
|
public override int Alignment => ParentType.Alignment;
|
||||||
|
|
||||||
|
|
||||||
public DataTypeEnum(string _namespace, string name, DataTypeBaseType parentType) : base(_namespace, name, DataTypeType.Enum)
|
public DataTypeEnum(string _namespace, string name, DataTypeBaseType parentType) : base(_namespace, name, DataTypeType.Enum)
|
||||||
{
|
{
|
||||||
Members = new List<EnumMember>();
|
Members = new List<EnumMember>();
|
||||||
|
@ -29,7 +29,7 @@ namespace ZoneCodeGenerator.Domain
|
|||||||
currentBitOffset = 0;
|
currentBitOffset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
currentSize = currentSize.Align(Math.Min(member.Alignment, Pack));
|
currentSize = currentSize.Align(member.ForceAlignment ? member.Alignment : Math.Min(member.Alignment, Pack));
|
||||||
currentSize += member.VariableType.Size;
|
currentSize += member.VariableType.Size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
public int? AlignmentOverride { get; set; }
|
public int? AlignmentOverride { get; set; }
|
||||||
public override int Alignment => AlignmentOverride ?? TypeDefinition.Alignment;
|
public override int Alignment => AlignmentOverride ?? TypeDefinition.Alignment;
|
||||||
|
public override bool ForceAlignment => AlignmentOverride != null || TypeDefinition.ForceAlignment;
|
||||||
public override int Size => TypeDefinition.Size;
|
public override int Size => TypeDefinition.Size;
|
||||||
|
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
|
@ -8,6 +8,7 @@ namespace ZoneCodeGenerator.Domain
|
|||||||
public int? AlignmentOverride { get; set; }
|
public int? AlignmentOverride { get; set; }
|
||||||
private int alignment;
|
private int alignment;
|
||||||
public override int Alignment => AlignmentOverride ?? alignment;
|
public override int Alignment => AlignmentOverride ?? alignment;
|
||||||
|
public override bool ForceAlignment => AlignmentOverride != null;
|
||||||
|
|
||||||
private int size;
|
private int size;
|
||||||
public override int Size => size;
|
public override int Size => size;
|
||||||
|
@ -42,6 +42,8 @@ namespace ZoneCodeGenerator.Domain
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override int Alignment => 0;
|
public override int Alignment => 0;
|
||||||
|
public override bool ForceAlignment => false;
|
||||||
|
|
||||||
public override int Size => 0;
|
public override int Size => 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ namespace ZoneCodeGenerator.Domain
|
|||||||
public IReadOnlyList<ReferenceType> References => references.AsReadOnly();
|
public IReadOnlyList<ReferenceType> References => references.AsReadOnly();
|
||||||
|
|
||||||
public int Alignment => references.OfType<ReferenceTypePointer>().Any() ? PointerSize : Type.Alignment;
|
public int Alignment => references.OfType<ReferenceTypePointer>().Any() ? PointerSize : Type.Alignment;
|
||||||
|
public bool ForceAlignment => !references.OfType<ReferenceTypePointer>().Any() && Type.ForceAlignment;
|
||||||
|
|
||||||
public int Size
|
public int Size
|
||||||
{
|
{
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
public int? AlignmentOverride { get; set; }
|
public int? AlignmentOverride { get; set; }
|
||||||
|
|
||||||
public int Alignment => AlignmentOverride ?? VariableType.Alignment;
|
public int Alignment => AlignmentOverride ?? VariableType.Alignment;
|
||||||
|
public bool ForceAlignment => AlignmentOverride != null || VariableType.ForceAlignment;
|
||||||
|
|
||||||
public TypeDeclaration VariableType { get; }
|
public TypeDeclaration VariableType { get; }
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user