diff --git a/ASTPlayground/ASTPlayground.dproj b/ASTPlayground/ASTPlayground.dproj
index b988ee1..4b373f7 100644
--- a/ASTPlayground/ASTPlayground.dproj
+++ b/ASTPlayground/ASTPlayground.dproj
@@ -4,7 +4,7 @@
20.3
FMX
True
- Release
+ Debug
Win64
ASTPlayground
2
diff --git a/Src/AST/Myc.Ast.Scope.pas b/Src/AST/Myc.Ast.Scope.pas
index 5335388..b129a43 100644
--- a/Src/AST/Myc.Ast.Scope.pas
+++ b/Src/AST/Myc.Ast.Scope.pas
@@ -78,9 +78,6 @@ constructor TExecutionScope.Create(
const ADescriptor: IScopeDescriptor;
const ACapturedUpvalues: TArray
);
-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;
diff --git a/Src/Data/Myc.Data.Value.pas b/Src/Data/Myc.Data.Value.pas
index 9194d72..0c986a7 100644
--- a/Src/Data/Myc.Data.Value.pas
+++ b/Src/Data/Myc.Data.Value.pas
@@ -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 := '';
- vkText: Result := AsText;
- vkSeries: Result := '';
- vkRecordSeries: Result := '';
- vkRecord: Result := '';
- vkMemberSeries: Result := '';
+ vkText: Result := '"' + AsText + '"';
+ vkSeries:
+ begin
+ var series := AsSeries.Value;
+ // Add type and count for series
+ Result := Format('[%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('', [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('', [sb.ToString]);
+ finally
+ sb.Free;
+ end;
+ end;
+ vkMemberSeries:
+ begin
+ var series := AsMemberSeries.Value;
+ // Add type and count for member series
+ Result := Format('[%d]>', [series.Kind.ToString, series.Count]);
+ end;
vkVoid: Result := '';
vkMethod: Result := '';
- vkGeneric: Result := '';
+ vkGeneric:
+ // Getting meaningful type information for vkGeneric is not easily possible
+ // without storing additional RTTI, as the specific type of T in TVal is lost.
+ Result := '';
else
Result := '[Unknown DataValue]';
end;