Extended data value type descriptions
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
<ProjectVersion>20.3</ProjectVersion>
|
<ProjectVersion>20.3</ProjectVersion>
|
||||||
<FrameworkType>FMX</FrameworkType>
|
<FrameworkType>FMX</FrameworkType>
|
||||||
<Base>True</Base>
|
<Base>True</Base>
|
||||||
<Config Condition="'$(Config)'==''">Release</Config>
|
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||||
<Platform Condition="'$(Platform)'==''">Win64</Platform>
|
<Platform Condition="'$(Platform)'==''">Win64</Platform>
|
||||||
<ProjectName Condition="'$(ProjectName)'==''">ASTPlayground</ProjectName>
|
<ProjectName Condition="'$(ProjectName)'==''">ASTPlayground</ProjectName>
|
||||||
<TargetedPlatforms>2</TargetedPlatforms>
|
<TargetedPlatforms>2</TargetedPlatforms>
|
||||||
|
|||||||
@@ -78,9 +78,6 @@ constructor TExecutionScope.Create(
|
|||||||
const ADescriptor: IScopeDescriptor;
|
const ADescriptor: IScopeDescriptor;
|
||||||
const ACapturedUpvalues: TArray<IValueCell>
|
const ACapturedUpvalues: TArray<IValueCell>
|
||||||
);
|
);
|
||||||
var
|
|
||||||
slotCount: Integer;
|
|
||||||
i: Integer;
|
|
||||||
begin
|
begin
|
||||||
inherited Create;
|
inherited Create;
|
||||||
FParent := AParent;
|
FParent := AParent;
|
||||||
@@ -89,10 +86,7 @@ begin
|
|||||||
FCapturedUpvalues := ACapturedUpvalues; // Store upvalues
|
FCapturedUpvalues := ACapturedUpvalues; // Store upvalues
|
||||||
|
|
||||||
if ADescriptor <> nil then
|
if ADescriptor <> nil then
|
||||||
begin
|
SetLength(FValues, ADescriptor.SlotCount);
|
||||||
slotCount := ADescriptor.SlotCount;
|
|
||||||
SetLength(FValues, slotCount);
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TExecutionScope.Destroy;
|
destructor TExecutionScope.Destroy;
|
||||||
|
|||||||
@@ -210,18 +210,75 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TDataValue.ToString: String;
|
function TDataValue.ToString: String;
|
||||||
|
var
|
||||||
|
sb: TStringBuilder;
|
||||||
|
field: TScalarRecordField;
|
||||||
|
first: Boolean;
|
||||||
begin
|
begin
|
||||||
case FKind of
|
case FKind of
|
||||||
vkScalar: Result := FScalar.ToString;
|
vkScalar: Result := FScalar.ToString;
|
||||||
vkInterface: Result := '<interface>';
|
vkInterface: Result := '<interface>';
|
||||||
vkText: Result := AsText;
|
vkText: Result := '"' + AsText + '"';
|
||||||
vkSeries: Result := '<series>';
|
vkSeries:
|
||||||
vkRecordSeries: Result := '<record_series>';
|
begin
|
||||||
vkRecord: Result := '<record>';
|
var series := AsSeries.Value;
|
||||||
vkMemberSeries: Result := '<member_series>';
|
// 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>';
|
vkVoid: Result := '<void>';
|
||||||
vkMethod: Result := '<method>';
|
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
|
else
|
||||||
Result := '[Unknown DataValue]';
|
Result := '[Unknown DataValue]';
|
||||||
end;
|
end;
|
||||||
|
|||||||
Reference in New Issue
Block a user