IScalarRecord
This commit is contained in:
@@ -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).');
|
||||
|
||||
Reference in New Issue
Block a user