mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-20 16:15:43 +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 abstract int Alignment { get; }
|
||||
public abstract bool ForceAlignment { get; }
|
||||
public abstract int Size { get; }
|
||||
|
||||
protected DataType(string _namespace, string name, DataTypeType type)
|
||||
|
@ -29,6 +29,7 @@ namespace ZoneCodeGenerator.Domain
|
||||
.Cast<DataTypeBaseType>()
|
||||
.ToList();
|
||||
|
||||
public override bool ForceAlignment => false;
|
||||
public override int Size { get; }
|
||||
public override int Alignment => Size;
|
||||
|
||||
|
@ -7,8 +7,10 @@ namespace ZoneCodeGenerator.Domain
|
||||
public DataTypeBaseType ParentType { get; }
|
||||
public List<EnumMember> Members { get; }
|
||||
|
||||
public override bool ForceAlignment => ParentType.ForceAlignment;
|
||||
public override int Size => ParentType.Size;
|
||||
public override int Alignment => ParentType.Alignment;
|
||||
|
||||
|
||||
public DataTypeEnum(string _namespace, string name, DataTypeBaseType parentType) : base(_namespace, name, DataTypeType.Enum)
|
||||
{
|
||||
|
@ -29,7 +29,7 @@ namespace ZoneCodeGenerator.Domain
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -39,7 +39,7 @@ namespace ZoneCodeGenerator.Domain
|
||||
currentBitOffset = currentBitOffset.Align(8);
|
||||
currentSize += currentBitOffset / 8;
|
||||
}
|
||||
|
||||
|
||||
return currentSize.Align(Alignment);
|
||||
}
|
||||
|
||||
@ -48,4 +48,4 @@ namespace ZoneCodeGenerator.Domain
|
||||
return $"struct {FullName}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -11,6 +11,7 @@
|
||||
|
||||
public int? AlignmentOverride { get; set; }
|
||||
public override int Alignment => AlignmentOverride ?? TypeDefinition.Alignment;
|
||||
public override bool ForceAlignment => AlignmentOverride != null || TypeDefinition.ForceAlignment;
|
||||
public override int Size => TypeDefinition.Size;
|
||||
|
||||
public override string ToString()
|
||||
|
@ -8,6 +8,7 @@ namespace ZoneCodeGenerator.Domain
|
||||
public int? AlignmentOverride { get; set; }
|
||||
private int alignment;
|
||||
public override int Alignment => AlignmentOverride ?? alignment;
|
||||
public override bool ForceAlignment => AlignmentOverride != null;
|
||||
|
||||
private int size;
|
||||
public override int Size => size;
|
||||
|
@ -42,6 +42,8 @@ namespace ZoneCodeGenerator.Domain
|
||||
}
|
||||
|
||||
public override int Alignment => 0;
|
||||
public override bool ForceAlignment => false;
|
||||
|
||||
public override int Size => 0;
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ namespace ZoneCodeGenerator.Domain
|
||||
public IReadOnlyList<ReferenceType> References => references.AsReadOnly();
|
||||
|
||||
public int Alignment => references.OfType<ReferenceTypePointer>().Any() ? PointerSize : Type.Alignment;
|
||||
public bool ForceAlignment => !references.OfType<ReferenceTypePointer>().Any() && Type.ForceAlignment;
|
||||
|
||||
public int Size
|
||||
{
|
||||
|
@ -7,6 +7,7 @@
|
||||
public int? AlignmentOverride { get; set; }
|
||||
|
||||
public int Alignment => AlignmentOverride ?? VariableType.Alignment;
|
||||
public bool ForceAlignment => AlignmentOverride != null || VariableType.ForceAlignment;
|
||||
|
||||
public TypeDeclaration VariableType { get; }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user