@@ -70,6 +70,14 @@ namespace CodeGen.Engine
7070 structureExpressionEvaluators.Add("STRUCTURE_DISPLAY_FIELD", evaluateStructureDisplayField)
7171 structureExpressionEvaluators.Add("STRUCTURE_KEYS", evaluateStructureKeys)
7272 structureExpressionEvaluators.Add("STRUCTURE_LDESC", evaluateStructureLongDesc)
73+
74+ structureExpressionEvaluators.Add("STRUCTURE_ALPHA_FIELDS", evaluateStructureAlphaFields)
75+ structureExpressionEvaluators.Add("STRUCTURE_DECIMAL_FIELDS", evaluateStructureDecimalFields)
76+ structureExpressionEvaluators.Add("STRUCTURE_IMPLIED_FIELDS", evaluateStructureImpliedFields)
77+ structureExpressionEvaluators.Add("STRUCTURE_INTEGER_FIELDS", evaluateStructureIntegerFields)
78+ structureExpressionEvaluators.Add("STRUCTURE_DATE_FIELDS", evaluateStructureDateFields)
79+ structureExpressionEvaluators.Add("STRUCTURE_TIME_FIELDS", evaluateStructureTimeFields)
80+ structureExpressionEvaluators.Add("STRUCTURE_USER_FIELDS", evaluateStructureUserFields)
7381 endmethod
7482
7583 ;; -------------------------------------------------------------------------------------------------------------------------------
@@ -191,6 +199,124 @@ namespace CodeGen.Engine
191199 mreturn evaluateStructureExpression(tkn, template, loops, doEvaluate)
192200 endmethod
193201
202+
203+
204+
205+
206+ private static method evaluateStructureAlphaFields, boolean
207+ tkn, @Token
208+ template, @FileNode
209+ loops, @IEnumerable<LoopNode>
210+ endparams
211+ proc
212+ lambda doEvaluate(str)
213+ begin
214+ ;TODO: Compiler Bug: fails if inlined
215+ data firstField = str.Fields.FirstOrDefault(lambda(field) {field.DataType==RpsFieldDataType.Alpha})
216+ mreturn firstField != ^null
217+ end
218+ mreturn evaluateStructureExpression(tkn, template, loops, doEvaluate)
219+ endmethod
220+
221+ private static method evaluateStructureDecimalFields, boolean
222+ tkn, @Token
223+ template, @FileNode
224+ loops, @IEnumerable<LoopNode>
225+ endparams
226+ proc
227+ lambda doEvaluate(str)
228+ begin
229+ ;TODO: Compiler Bug: fails if inlined
230+ data firstField = str.Fields.FirstOrDefault(lambda(field) {field.DataType==RpsFieldDataType.Decimal && field.Precision==0})
231+ mreturn firstField != ^null
232+ end
233+ mreturn evaluateStructureExpression(tkn, template, loops, doEvaluate)
234+ endmethod
235+
236+ private static method evaluateStructureImpliedFields, boolean
237+ tkn, @Token
238+ template, @FileNode
239+ loops, @IEnumerable<LoopNode>
240+ endparams
241+ proc
242+ lambda doEvaluate(str)
243+ begin
244+ ;TODO: Compiler Bug: fails if inlined
245+ data firstField = str.Fields.FirstOrDefault(lambda(field) {field.DataType==RpsFieldDataType.Decimal && field.Precision>0})
246+ mreturn firstField != ^null
247+ end
248+ mreturn evaluateStructureExpression(tkn, template, loops, doEvaluate)
249+ endmethod
250+
251+ private static method evaluateStructureIntegerFields, boolean
252+ tkn, @Token
253+ template, @FileNode
254+ loops, @IEnumerable<LoopNode>
255+ endparams
256+ proc
257+ lambda doEvaluate(str)
258+ begin
259+ ;TODO: Compiler Bug: fails if inlined
260+ data firstField = str.Fields.FirstOrDefault(lambda(field) {field.DataType==RpsFieldDataType.Integer && field.Precision>0})
261+ mreturn firstField != ^null
262+ end
263+ mreturn evaluateStructureExpression(tkn, template, loops, doEvaluate)
264+ endmethod
265+
266+ private static method evaluateStructureDateFields, boolean
267+ tkn, @Token
268+ template, @FileNode
269+ loops, @IEnumerable<LoopNode>
270+ endparams
271+ proc
272+ lambda doEvaluate(str)
273+ begin
274+ ;TODO: Compiler Bug: fails if inlined
275+ data firstField = str.Fields.FirstOrDefault(lambda(field) {
276+ & field.DataTypeSubClass == RpsFieldSubclass.UserDate
277+ & || field.DataTypeSubClass == RpsFieldSubclass.DateYYYYJJJ
278+ & || field.DataTypeSubClass == RpsFieldSubclass.DateYYYYPP
279+ & || field.DataTypeSubClass == RpsFieldSubclass.DateYYYYMMDD
280+ & || field.DataTypeSubClass == RpsFieldSubclass.DateYYJJJ
281+ & || field.DataTypeSubClass == RpsFieldSubclass.DateYYPP
282+ & || field.DataTypeSubClass == RpsFieldSubclass.DateYYMMDD })
283+ mreturn firstField != ^null
284+ end
285+ mreturn evaluateStructureExpression(tkn, template, loops, doEvaluate)
286+ endmethod
287+
288+ private static method evaluateStructureTimeFields, boolean
289+ tkn, @Token
290+ template, @FileNode
291+ loops, @IEnumerable<LoopNode>
292+ endparams
293+ proc
294+ lambda doEvaluate(str)
295+ begin
296+ ;TODO: Compiler Bug: fails if inlined
297+ data firstField = str.Fields.FirstOrDefault(lambda(field) {
298+ & field.DataTypeSubClass == RpsFieldSubclass.TimeHHMM
299+ & || field.DataTypeSubClass == RpsFieldSubclass.TimeHHMMSS })
300+ mreturn firstField != ^null
301+ end
302+ mreturn evaluateStructureExpression(tkn, template, loops, doEvaluate)
303+ endmethod
304+
305+ private static method evaluateStructureUserFields, boolean
306+ tkn, @Token
307+ template, @FileNode
308+ loops, @IEnumerable<LoopNode>
309+ endparams
310+ proc
311+ lambda doEvaluate(str)
312+ begin
313+ ;TODO: Compiler Bug: fails if inlined
314+ data firstField = str.Fields.FirstOrDefault(lambda(field) {field.DataType==RpsFieldDataType.User})
315+ mreturn firstField != ^null
316+ end
317+ mreturn evaluateStructureExpression(tkn, template, loops, doEvaluate)
318+ endmethod
319+
194320 ;;===================================================================================
195321
196322 private static method evaluateStructureHasField, boolean
0 commit comments