ZoneCodeGenerator: Set conditions on structs that make the build fail right now

This commit is contained in:
Jan 2019-11-21 21:47:56 +01:00
parent 27f92e6c33
commit 377dc5c99b
6 changed files with 82 additions and 27 deletions

View File

@ -482,6 +482,29 @@ use menuDef_t;
set string window::name;
set name window::name;
// expressionRpnDataUnion
use expressionRpnDataUnion;
set condition cmd never;
// textDefData_t
use textDefData_t;
set condition data never;
// itemDefData_t
use itemDefData_t;
set condition data never;
// focusDefData_t
use focusDefData_t;
set condition data never;
// Operand
use Operand;
set condition internals::intVal dataType == VAL_INT;
set condition internals::floatVal dataType == VAL_FLOAT;
set condition internals::string dataType == VAL_STRING;
set condition internals::dvar never;
// =========================================
// LocalizeEntry
// =========================================
@ -536,6 +559,10 @@ set name name;
use FxElemVisuals;
set condition anonymous never;
// FxElemExtendedDefPtr
use FxElemExtendedDefPtr;
set condition unknownDef never;
// =========================================
// FxImpactTable
// =========================================
@ -664,7 +691,9 @@ set string moveUpButtonName;
set string moveDownButtonName;
set string switchSeatButtonName;
set string steerGraphName;
set condition steerGraph never;
set string accelGraphName;
set condition accelGraph never;
// =========================================
// MemoryBlock

View File

@ -17,7 +17,8 @@ namespace ZoneCodeGenerator.Generating
public ISet<StructureInformation> Structures { get; }
public ISet<DataType> MemberTypes { get; }
public IEnumerable<StructureInformation> ReferencedAssets => Structures.Where(inf => inf.IsAsset && inf != Asset);
public IEnumerable<StructureInformation> ReferencedAssets =>
Structures.Where(inf => inf.IsAsset && inf != Asset);
public IList<FastFileBlock> Blocks { get; private set; }
@ -38,9 +39,9 @@ namespace ZoneCodeGenerator.Generating
if (structureInformation.IsAsset && structureInformation != Asset)
return;
foreach (var member in structureInformation.OrderedMembers)
foreach (var member in structureInformation.OrderedMembers
.Where(member => member.StructureType != null && !member.Computations.ShouldIgnore))
{
if(member.StructureType != null)
AddToContext(member.StructureType);
}
}
@ -55,13 +56,16 @@ namespace ZoneCodeGenerator.Generating
};
context.AddToContext(asset);
context.MemberTypes.UnionWith(context.Structures.Where(information => !information.IsAsset || information == asset)
context.MemberTypes.UnionWith(context.Structures
.Where(structureInformation => !structureInformation.IsAsset || structureInformation == asset)
.Where(structureInformation =>
structureInformation.Computations.IsUsed || structureInformation == asset)
.SelectMany(information => information.OrderedMembers)
.Where(information => !information.Computations.ShouldIgnore)
.Select(information => information.Member.VariableType.Type)
.Where(type => !(type is DataTypeBaseType) && type != asset.Type)
.Distinct());
return context;
}
}

View File

@ -17,7 +17,10 @@ $endif$
%>
PrintOperandDynamic(op) ::= <%
$TypeVarName(op.Structure)$->$first(op.ReferencedMemberChain):{member | $member.Member.Name$}$$rest(op.ReferencedMemberChain):{member | .$member.Member.Name$}$
$TypeVarName(op.Structure)$
->$first(op.ReferencedMemberChain):{member | $member.Member.Name$}$
$rest(op.ReferencedMemberChain):{member | .$member.Member.Name$}$
$op.ArrayIndices:{ arrayIndex | [$arrayIndex$]}$
%>
PrintOperation(operation) ::= <%

View File

@ -1,8 +1,21 @@
// Everything related to loading an embedded reference
LoadEmbedded(context, structure, member) ::= <<
$if(!member.Computations.ShouldIgnore)$
LoadEmbedded_Load(context, structure, member) ::= <<
$TypeVarName(member.StructureType)$ = &$TypeVarName(structure)$->$member.Member.Name$;
Load_$member.Member.VariableType.Type.Name$(false);
$endif$
>>
LoadEmbedded_Array(context, structure, member) ::= <<
>>
LoadEmbedded(context, structure, member) ::= <%
$if(!member.Computations.ShouldIgnore)$
$if(member.Computations.IsArray)$
$LoadEmbedded_Array(context, structure, member)$
$else$
$LoadEmbedded_Load(context, structure, member)$
$endif$
$endif$
%>

View File

@ -1,26 +1,30 @@
// String
LoadStringSingleDepth(context, structure, member) ::= <<
LoadStringSingleDepth(context, structure, member) ::= <%
$if(!member.Computations.IsArray)$
varXString = &$TypeVarName(structure)$->$member.Member.Name$;
LoadXString(false); $\\$
varXString = &$TypeVarName(structure)$->$member.Member.Name$;$\n$
LoadXString(false);$\n$
$else$
varXString = $TypeVarName(structure)$->$member.Member.Name$;
LoadXStringArray(false, $first(member.Computations.ArraySizes)$); $\\$
varXString = $TypeVarName(structure)$->$member.Member.Name$;$\n$
LoadXStringArray(false, $first(member.Computations.ArraySizes)$);$\n$
$endif$
>>
%>
LoadString(context, structure, member) ::= <<
$if(member.Computations.PointerDepthIsOne)$
$LoadStringSingleDepth(context, structure, member)$ $\\$
$elseif(member.Computations.PointerDepthIsTwo && member.Computations.ArrayPointerCountEvaluation)$
LoadString_PointerCheck(context, structure, member) ::= <<
if ($TypeVarName(structure)$->$member.Member.Name$)
{
$TypeVarName(structure)$->$member.Member.Name$ = m_stream->Alloc<$TypeDeclaration(member.Member.VariableType)$*>(alignof($TypeDeclaration(member.Member.VariableType)$*));
varXString = $TypeVarName(structure)$->$member.Member.Name$;
LoadXStringArray(true, $PrintEvaluation(member.Computations.ArrayPointerCountEvaluation)$);
} $\\$
$else$
#error Cannot load string $member.Member.Name$ $\\$
$endif$
}
>>
LoadString(context, structure, member) ::= <%
$if(member.Computations.PointerDepthIsOne)$
$LoadStringSingleDepth(context, structure, member)$
$elseif(member.Computations.PointerDepthIsTwo && member.Computations.ArrayPointerCountEvaluation)$
$LoadString_PointerCheck(context, structure, member)$
$else$
#error Cannot load string $member.Member.Name$
$endif$
%>

View File

@ -5,6 +5,7 @@ import "Common.stg"
import "Loading/Common.stg"
import "Loading/String.stg"
import "Loading/ArrayPointer.stg"
import "Loading/Embedded.stg"
import "Loading/SinglePointer.stg"
// Loading common
@ -39,7 +40,7 @@ $HeaderArrayPtrLoadMethodDeclaration(structure)$
$\n$
$endif$
$if(structure.NonEmbeddedReferenceExists && !structure.IsLeaf)$
$if(!structure.IsLeaf && structure.Computations.IsUsed)$
$HeaderLoadMethodDeclaration(structure)$
$\n$
$endif$
@ -98,7 +99,8 @@ $elseif(member.Computations.IsArrayPointerReference && member.Computations.Point
$LoadArrayPointer(context, structure, member)$
$elseif(member.Computations.IsSinglePointerReference)$
$LoadSinglePointer(context, structure, member)$
$elseif(member.Computations.IsEmbeddedReference && member.StructureType)$
$elseif(member.Computations.IsEmbeddedReference && member.StructureType && !member.StructureType.IsLeaf)$
$LoadEmbedded(context, structure, member)$
$endif$
%>
@ -200,7 +202,7 @@ $if(structure.ArrayPointerReferenceExists && !structure.IsLeaf)$
$LoadArrayPtrMethod(structure, context)$
$endif$
$if(structure.NonEmbeddedReferenceExists && !structure.IsLeaf)$
$if(!structure.IsLeaf && structure.Computations.IsUsed)$
$LoadMethod(structure, context)$
$endif$