Extended data value type descriptions
This commit is contained in:
@@ -78,9 +78,6 @@ constructor TExecutionScope.Create(
|
||||
const ADescriptor: IScopeDescriptor;
|
||||
const ACapturedUpvalues: TArray<IValueCell>
|
||||
);
|
||||
var
|
||||
slotCount: Integer;
|
||||
i: Integer;
|
||||
begin
|
||||
inherited Create;
|
||||
FParent := AParent;
|
||||
@@ -89,10 +86,7 @@ begin
|
||||
FCapturedUpvalues := ACapturedUpvalues; // Store upvalues
|
||||
|
||||
if ADescriptor <> nil then
|
||||
begin
|
||||
slotCount := ADescriptor.SlotCount;
|
||||
SetLength(FValues, slotCount);
|
||||
end;
|
||||
SetLength(FValues, ADescriptor.SlotCount);
|
||||
end;
|
||||
|
||||
destructor TExecutionScope.Destroy;
|
||||
|
||||
@@ -210,18 +210,75 @@ begin
|
||||
end;
|
||||
|
||||
function TDataValue.ToString: String;
|
||||
var
|
||||
sb: TStringBuilder;
|
||||
field: TScalarRecordField;
|
||||
first: Boolean;
|
||||
begin
|
||||
case FKind of
|
||||
vkScalar: Result := FScalar.ToString;
|
||||
vkInterface: Result := '<interface>';
|
||||
vkText: Result := AsText;
|
||||
vkSeries: Result := '<series>';
|
||||
vkRecordSeries: Result := '<record_series>';
|
||||
vkRecord: Result := '<record>';
|
||||
vkMemberSeries: Result := '<member_series>';
|
||||
vkText: Result := '"' + AsText + '"';
|
||||
vkSeries:
|
||||
begin
|
||||
var series := AsSeries.Value;
|
||||
// Add type and count for series
|
||||
Result := Format('<series<%s>[%d]>', [series.Kind.ToString, series.Items.Count]);
|
||||
end;
|
||||
vkRecordSeries:
|
||||
begin
|
||||
var series := AsRecordSeries.Value;
|
||||
sb := TStringBuilder.Create;
|
||||
try
|
||||
sb.Append('{');
|
||||
first := True;
|
||||
for field in series.Def.Fields do
|
||||
begin
|
||||
if not first then
|
||||
sb.Append(',');
|
||||
sb.Append(field.Name);
|
||||
first := False;
|
||||
end;
|
||||
sb.Append('}');
|
||||
// Add field names and count for record series
|
||||
Result := Format('<record_series%s[%d]>', [sb.ToString, series.Count]);
|
||||
finally
|
||||
sb.Free;
|
||||
end;
|
||||
end;
|
||||
vkRecord:
|
||||
begin
|
||||
var rec := AsRecord.Value;
|
||||
sb := TStringBuilder.Create;
|
||||
try
|
||||
sb.Append('{');
|
||||
first := True;
|
||||
for field in rec.Def.Fields do
|
||||
begin
|
||||
if not first then
|
||||
sb.Append(',');
|
||||
sb.Append(field.Name);
|
||||
first := False;
|
||||
end;
|
||||
sb.Append('}');
|
||||
// Add field names for records
|
||||
Result := Format('<record%s>', [sb.ToString]);
|
||||
finally
|
||||
sb.Free;
|
||||
end;
|
||||
end;
|
||||
vkMemberSeries:
|
||||
begin
|
||||
var series := AsMemberSeries.Value;
|
||||
// Add type and count for member series
|
||||
Result := Format('<member_series<%s>[%d]>', [series.Kind.ToString, series.Count]);
|
||||
end;
|
||||
vkVoid: Result := '<void>';
|
||||
vkMethod: Result := '<method>';
|
||||
vkGeneric: Result := '<generic>';
|
||||
vkGeneric:
|
||||
// Getting meaningful type information for vkGeneric is not easily possible
|
||||
// without storing additional RTTI, as the specific type of T in TVal<T> is lost.
|
||||
Result := '<generic>';
|
||||
else
|
||||
Result := '[Unknown DataValue]';
|
||||
end;
|
||||
|
||||
Reference in New Issue
Block a user