IScalarRecord

This commit is contained in:
Michael Schimmel
2025-12-09 13:55:09 +01:00
parent 76c92fa355
commit 5376f8924a
4 changed files with 86 additions and 101 deletions
+6 -22
View File
@@ -338,13 +338,10 @@ begin
case seriesVar.Kind of
vkRecordSeries:
begin
if (itemValue.Kind <> vkRecord) then
if (itemValue.Kind <> vkScalarRecord) then
raise EEvaluatorException.Create('Can only add record values to a TScalarRecordSeries.');
with seriesVar.AsRecordSeries do
begin
Add(itemValue.AsRecord, lookback);
end;
seriesVar.AsRecordSeries.Add(itemValue.AsScalarRecord, lookback);
end;
else
raise EEvaluatorException.Create('"add" operation is only supported for series types.');
@@ -414,7 +411,6 @@ var
key: IKeyword;
memberSeries: ISeries;
scalarValue: TScalar;
rec: TScalarRecord;
begin
baseValue := Node.Base.Accept(Self);
indexValue := Node.Index.Accept(Self);
@@ -450,8 +446,7 @@ begin
values[i] := scalarValue.Value;
end;
rec := TScalarRecord.Create(recSeries.Def, values);
Result := TDataValue.FromRecord(rec);
Result := TDataValue.FromScalarRecord(TScalarRecord.Create(recSeries.Def, values));
end;
else
raise EEvaluatorException.Create('Indexer `[]` is not supported for this value type.');
@@ -466,18 +461,8 @@ begin
case baseValue.Kind of
vkRecordSeries: Result := TDataValue.FromSeries(baseValue.AsRecordSeries[Node.Member.Value]);
vkRecord: Result := TDataValue(baseValue.AsRecord[Node.Member.Value]);
vkGenericRecord:
begin
var rec := baseValue.AsGenericRecord;
var fieldIndex := rec.IndexOf(Node.Member.Value);
if fieldIndex < 0 then
raise EEvaluatorException.CreateFmt('Member ":%s" not found in record.', [Node.Member.Value.Name]);
Result := rec.Items[fieldIndex].Value;
end;
vkScalarRecord: Result := TDataValue(baseValue.AsScalarRecord.Fields[Node.Member.Value]);
vkGenericRecord: Result := TDataValue(baseValue.AsGenericRecord.Fields[Node.Member.Value]);
else
raise EEvaluatorException.Create('Member access operator `.` is not supported for this value type.');
end;
@@ -512,8 +497,7 @@ begin
values[i] := valData.AsScalar.Value;
end;
var rec := TScalarRecord.Create(Node.ScalarDefinition, values);
Result := TDataValue.FromRecord(rec);
Result := TDataValue.FromScalarRecord(TScalarRecord.Create(Node.ScalarDefinition, values));
end
else
raise EEvaluatorException.Create('RecordLiteral has no definition (Binder/TypeChecker failure).');